vlambda博客
学习文章列表

热点复现|验证码识别

最近忙着做OCR的小项目,很久没上ModelArts,刚好周末在 快学Python 看到朱小五的《5行Python实现验证码识别,太稳了!》介绍了一个名为ddddocr的,配置要求远低于之前用的EasyOCR和pytesseract,刚好来ModelArts探索、复现一下。


1. 库的安装

这个库的安装非常简单。

!pip install ddddocr


2. 验证码识别尝试

首先向小五学习,去百度图片下载一些验证码图片,放入文件夹验证码图片。

!pip install matplotlibimport matplotlib.pyplot as plt%matplotlib inline
import ddddocrocr = ddddocr.DdddOcr()p = plt.imread('验证码图片/t1.jpg')plt.imshow(p)with open('验证码图片/t1.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)
cxcy

p = plt.imread('验证码图片/t2.jpg')plt.imshow(p)with open('验证码图片/t2.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)
534

热点复现|验证码识别


p = plt.imread('验证码图片/t3.jpg')plt.imshow(p)with open('验证码图片/t3.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)
一o

热点复现|验证码识别

p = plt.imread('验证码图片/t4.jpg')plt.imshow(p)with open('验证码图片/t4.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)

25d7

热点复现|验证码识别

p = plt.imread('验证码图片/t5.jpg')plt.imshow(p)with open('验证码图片/t5.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)

7482

热点复现|验证码识别

p = plt.imread('验证码图片/t6.jpg')plt.imshow(p)with open('验证码图片/t6.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)

uwy6

热点复现|验证码识别

p = plt.imread('验证码图片/t7.jpg')plt.imshow(p)with open('验证码图片/t7.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)


7364

热点复现|验证码识别


p = plt.imread('验证码图片/t8.jpg')plt.imshow(p)with open('验证码图片/t8.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)

DwSe

热点复现|验证码识别

可能是我们选的样本更加复杂,我们试验下来,ddddocr库对验证码的识别效果比小五介绍的弱,对于重叠和角度不正的识别效果并不是很理想。

在此,我们想到了中文,于是尝试了一下中文验证码。

p = plt.imread('验证码图片/t11.png')plt.imshow(p)with open('验证码图片/t11.png', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)

离技以

热点复现|验证码识别

发现ddddocr库对中文验证码的识别能力并不弱于对数字和英文验证码的识别。


3. 通用文字识别尝试

p = plt.imread('验证码图片/t12.jpg')plt.imshow(p)with open('验证码图片/t12.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)
验证码图片

热点复现|验证码识别

p = plt.imread('验证码图片/t17.jpg')plt.imshow(p)with open('验证码图片/t17.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)
验收标准按笫二条标准验收

p = plt.imread('验证码图片/t20.jpg')plt.imshow(p)with open('验证码图片/t20.jpg', 'rb') as f: img_bytes = f.read()res = ocr.classification(img_bytes)print(res)
一二

可以看到,ddddocr可以用来做一般的文字识别,但只能识别单行,不能识别多行。


4. 应用

ddddocr最大的优势是内置了很多去噪的功能,对非白底高清的图片有很强的适应性,应用起来非常简单。如果简单的做些文字识别,ddddocr是一个非常不错的开源库。

我将它封装在 http://www.gchatst.club:8050/ ,有兴趣但对代码不熟悉的同学也可以简单尝试下。

此外,如果想正式入门文字识别,ddddocr也是一个不错的敲门砖。