详解Python验证码识别的实例实现是怎样
Admin 2022-09-09 群英技术资讯 747 次浏览
关于“详解Python验证码识别的实例实现是怎样”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。需要 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实现线程池之线程安全队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在模版中,有时候需要对一些数据进行处理以后才能使用。一般在Python中我们是通过函数的形式来完成的。而在模版中,则是通过过滤器来实现的。过滤器使用的是|来使用。
本文主要介绍了使用spyder3调试python程序的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
模块可以看成是一堆函数的集合体。一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块。如果这个py文件的文件名为module.py,模块名则是module。
我们在做开发的时候,常会使用进度条效果,这能方便我们在对一些耗时操作的进度观察。那么如何使用python实现进度条效果呢?我们知道Python第三方库很丰富,因此python实现进度条的方式多样,下面我们就一起来了解一下。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008