热点复现|验证码识别
最近忙着做OCR的小项目,很久没上ModelArts,刚好周末在 快学Python 看到朱小五的《5行Python实现验证码识别,太稳了!》介绍了一个名为ddddocr的,配置要求远低于之前用的EasyOCR和pytesseract,刚好来ModelArts探索、复现一下。
1. 库的安装
这个库的安装非常简单。
!pip install ddddocr
2. 验证码识别尝试
首先向小五学习,去百度图片下载一些验证码图片,放入文件夹验证码图片。
!pip install matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
import ddddocr
ocr = 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也是一个不错的敲门砖。