详解Python验证码识别的实例实现是怎样
Admin 2022-09-09 群英技术资讯 809 次浏览
关于“详解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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
单例模式(Singleton Pattern)是一种常用的软件设计模式,是指一个类的实例从始至终只能被创建一次,同时它提供一个静态的getInstance()
ResNet全称residual neural network,主要是解决过深的网络带来的梯度弥散,梯度爆炸,网络退化(即网络层数越深时,在数据集上表现的性能却越差)的问题
分词工具在Python中,会经常使用到,而比较常的分词工具有jieba 分词、pkuseg 分词、FoolNLTK 分词和THULAC,这四种,那么究竟哪个更好用呢?
selenium的几种定位方法中,大杀器之一就是xpath方法,学会它,你将无所不能.本文就带大家详细了解一下这个大杀器,文中有非常详细的介绍,需要的朋友可以参考下
这篇文章主要介绍了python OpenCV图像金字塔,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008