Python实现验证码识别

opencv+pytesseract

https://blog.51cto.com/u_15295099/3147118

一、环境配置 需要 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 1. 2. 安装好Tesseract-OCR.exe pytesseract库的配置:搜索找到pytesseract.py,打开该.py文件,找到tesseract_cmd,改变它的值为刚才安装 tesseract.exe 的路径。

二、验证码识别 识别验证码,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。

实例1

-- coding: UTF-8 --

”“” @Author :叶庭云 @公众号 :修炼Python “”” 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

©著作权归作者所有:来自51CTO博客作者叶庭云的原创作品,请联系作者获取转载授权,否则将追究法律责任 python opencv+pytesseract 验证码识别 https://blog.51cto.com/u_15295099/3147118

dddd

https://jishuin.proginn.com/p/763bfbd60bb1

最近群里有位群友分享了一个新库,试用一下发现非常实用,特意今天分享给大家。

Github地址:https://github.com/sml2h3/ddddocr

该库名也是非常有趣 —— ddddocr(谐音带带弟弟OCR)

环境要求:

python >= 3.8 Windows/Linux/Macox.. 可以通过以下命令安装

pip install ddddocr 参数说明:

在网上随机寻找了一个验证码图片,使用这个库来实战一下。

来源:百度搜索 import ddddocr

ocr = ddddocr.DdddOcr() with open(‘1.png’, ‘rb’) as f: img_bytes = f.read() res = ocr.classification(img_bytes)

print(res)

优化

https://z.itpub.net/article/detail/2DF6DCCC7ACCD42B394F0C4253EEF84F

很久之前,分享过一次Python代码实现验证码识别的办法。

当时采用的是pillow+pytesseract,优点是免费,较为易用。但其识别精度一般,若想要更高要求的验证码识别,初学者就只能去选择使用百度API接口了。

但其实百度API接口和pytesseract其实都需要进行前期配置,对于初学者来说就不太友好了。

而且百度API必须要联网,对于某些机器不能联网的朋友而言,就得pass了

最近群里有位群友分享了一个新库,试用一下发现非常实用,特意今天分享给大家。

Github地址:https://github.com/sml2h3/ddddocr

该库名也是非常有趣 —— ddddocr(谐音带带弟弟OCR)

环境要求:

python >= 3.8 Windows/Linux/Macox.. 可以通过以下命令安装

pip install ddddocr 参数说明:

在网上随机寻找了一个验证码图片,使用这个库来实战一下。

来源:百度搜索 import ddddocr

ocr = ddddocr.DdddOcr() with open(‘1.png’, ‘rb’) as f: img_bytes = f.read() res = ocr.classification(img_bytes)

print(res)

成功识别出来了验证码文字!

而且优点也非常明显:首先代码非常精简,对比前文提到的两种方法,不需要额外设置环境变量等等,5行代码即可轻松识别验证码图片。另一方面,我们使用魔法命令%%time也测试出来吗,这段代码识别速度非常快。

下面用更多的验证码图片继续测试:

我又找了6个验证码图片来测试,观察结果,发现这类简单的验证码基本可以进行快速识别。但也有部分结果有问题——字母大小写没有进行区分(比如第6张图片)。

总而言之,如果你需要进行验证码识别,且对精度要求不是过高。

那么,带带弟弟OCR(ddddocr)这个库是一个不错的选择~