详解Python验证码识别的实例实现是怎样
Admin 2022-09-09 群英技术资讯 259 次浏览
需要 pillow 和 pytesseract 这两个库,pip install 安装就好了。
pip install pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pip install pytesseract -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
安装好Tesseract-OCR.exe
pytesseract 库的配置:搜索找到pytesseract.py,打开该.py文件,找到 tesseract_cmd,改变它的值为刚才安装 tesseract.exe 的路径。
识别验证码,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。
import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波 去噪 dst = cv.pyrMeanShiftFiltering(image, sp=10, sr=150) # 灰度图像 gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY) # 二值化 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) # 形态学操作 腐蚀 膨胀 erode = cv.erode(binary, None, iterations=2) dilate = cv.dilate(erode, None, iterations=1) cv.imshow('dilate', dilate) # 逻辑运算 让背景为白色 字体为黑 便于识别 cv.bitwise_not(dilate, dilate) cv.imshow('binary-image', dilate) # 识别 test_message = Image.fromarray(dilate) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./test/044.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()
运行效果如下:
识别结果:3n3D
Process finished with exit code 0
import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波 去噪 blur =cv.pyrMeanShiftFiltering(image, sp=8, sr=60) cv.imshow('dst', blur) # 灰度图像 gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY) # 二值化 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) print(f'二值化自适应阈值:{ret}') cv.imshow('binary', binary) # 形态学操作 获取结构元素 开操作 kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2)) bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel) cv.imshow('bin1', bin1) kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3)) bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel) cv.imshow('bin2', bin2) # 逻辑运算 让背景为白色 字体为黑 便于识别 cv.bitwise_not(bin2, bin2) cv.imshow('binary-image', bin2) # 识别 test_message = Image.fromarray(bin2) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./test/045.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()
运行效果如下:
二值化自适应阈值:181.0
识别结果:8A62N1
Process finished with exit code 0
import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波 去噪 blur = cv.pyrMeanShiftFiltering(image, sp=8, sr=60) cv.imshow('dst', blur) # 灰度图像 gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY) # 二值化 设置阈值 自适应阈值的话 黄色的4会提取不出来 ret, binary = cv.threshold(gray, 185, 255, cv.THRESH_BINARY_INV) print(f'二值化设置的阈值:{ret}') cv.imshow('binary', binary) # 逻辑运算 让背景为白色 字体为黑 便于识别 cv.bitwise_not(binary, binary) cv.imshow('bg_image', binary) # 识别 test_message = Image.fromarray(binary) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./test/045.jpg') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()
运行效果如下:
二值化设置的阈值:185.0
识别结果:7364
Process finished with exit code 0
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于Python的相关知识,其中主要整理了解析参数的三种方法相关问题,第一个选项是使用 argparse,它是一个流行的 Python 模块,专门用于命令行解析;另一种方法是读取 JSON 文件,我们可以在其中放置所有超参数;第三种也是鲜为人知的方法是使用 YAML 文件,下面一起来看一下,希望对大家有帮助。
python取对数可以采用两种工具包,math包可对单一数字取对数,numpy可以数列整体取对数。
这篇文章主要weidajia 介绍了python目标检测非极大抑制NMS与Soft-NMS实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
python开发中经常遇到报错的情况,但是warning通常并不影响程序的运行,而且有时特别讨厌,下面我们来说下如何忽略warning错误。在说忽略wa
python如何使用pool函数?一些朋友可能对于python Pool常用函数用法不是很了解,对此这篇文章主要给大家分享pool函数的用法,下文实例有一定的借鉴价值,感兴趣的朋友可以参考一下,希望大家阅读完这篇文章能有所收获,下面我们一起来学习吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008