python opencv pytesseract 验证码识别的实现
一、环境配置
需要pillow和pytesseract这两个库,pipinstall安装就好了。
installpillow-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com pipinstallpytesseract-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com
安装好Tesseract-OCR.exe
pytesseract库的配置:搜索找到pytesseract.py,打开该.py文件,找到tesseract_cmd,改变它的值为刚才安装tesseract.exe的路径。
二、验证码识别
识别验证码,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。
实例1
importcv2ascv
importpytesseract
fromPILimportImage
defrecognize_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('inputimage',src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行效果如下:
识别结果:3n3D
Processfinishedwithexitcode0
实例2
importcv2ascv
importpytesseract
fromPILimportImage
defrecognize_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('inputimage',src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行效果如下:
二值化自适应阈值:181.0
识别结果:8A62N1Processfinishedwithexitcode0
实例3
importcv2ascv
importpytesseract
fromPILimportImage
defrecognize_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('inputimage',src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行效果如下:
二值化设置的阈值:185.0
识别结果:7364Processfinishedwithexitcode0
到此这篇关于pythonopencvpytesseract验证码识别的实现的文章就介绍到这了,更多相关opencvpytesseract验证码识别内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。