详解Python验证码识别的实例实现是怎样
Admin 2022-09-09 群英技术资讯 508 次浏览
需要 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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
使用Hadoop进行大数据运算,当数据量极其大时,那么对MapReduce性能的调优重要性不言而喻,尤其是Shuffle过程中的参数配置对作业的总执行时间影响特别大。下面总结一些和MapReduce相关的性能调优方法,主要从五个方面考虑:数据输入、Map阶段、Reduce阶段、Shuffle阶段和其他调优属性。
python是一种讲解性、编译性、交互性和面向对象的脚本语言。最初被设计为制作自动化脚本,随着版本的更新和语言新功能的追加,越多被用于独立、大型项目的开发。
本文给大家分享了作者整理的五个python游戏开发的案例,通过具体设计思路,代码等方面详细了解python游戏开发的过程,非常的详细,希望大家能够喜欢
这篇文章主要介绍了Python让列表逆序排列的3种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
prefetch_related()和select_related()的设计目的很相似,都是为了减少SQL查询的数量,但是实现的方式不一样,下面这篇文章主要给大家介绍了关于Django中QuerySet查询优化之prefetch_related的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008