目录
OCR(Optical Character Recognition)光学字符识别,指的是对文本资料的图像文件进行分析识别处理,获取文集及版面信息的过程。
Tesseract-OCR:一个开源的字符识别引擎,我们可以用它来识别一些简单的验证码。
环境安装及文件配置
Tesseract-OCR引擎安装
Windows安装:https://digi.bib.uni-mannheim.de/tesseract/
Linux安装:sudo apt-get install tesseract-ocr sudo apt-get install libtesseract-dev
Mac安装:brew install tesseract
pytesser3库
Python内使用Tesseract-Ocr的库,Pytesseract文档:https://pypi.org/project/pytesseract/
安装:pip install Pytesseract
使用
除在上篇中说的在pytesseract.py文件中配置Tesseract-OCR引擎外,还可以在当前文件中重新给tesseract_cmd变量赋值
pytesseract.pytesseract.tesseract_cmd = r'D:\OCR\Tesseract-OCR\tesseract.exe'
简单代码举例(识别验证码)
# coding=GBK
import pytesseract
from PIL import Image
image = Image.open(r'img/数字验证码1.jpg') # 图片文件所在位置
pytesseract.pytesseract.tesseract_cmd = r'D:\OCR\Tesseract-OCR\tesseract.exe' # 可选择在pytesseract.py文件中配置,也可在当前文件中重新赋值
txt = pytesseract.pytesseract.image_to_string(image)
# 两种方法替换分页符
str1 = txt.replace('%s'%chr(12),'') # 使用ASCII转换得到分页符进行替换
str2 = txt.replace('','') # 直接替换分页符,第一个参数为分页符,此网页无法输入这个符号,实际生产中直接复制黏贴为这个参数值即可
with open('code.txt', 'w', encoding='utf-8') as f:
f.write(str1.replace('\n','')) # 替换和分页符和换行符写入文件中查看结果中去掉了分页符和换行符
注意事项和报错处理
报错处理
缺少可以匹配的语言包TesseractError错误:
TesseractError: (1, 'Error opening data file D:\\OCR\\Tesseract-OCR\\tessdata/eng.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'eng\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')
解决方法:
下载对应的语言包添加到tessdata目录下(语言包下载地址: https://github.com/tesseract-ocr/tessdata),并将tessdata目录设置为环境变量。
如果还是解决不了,查看报错信息中的 (1, 'Error opening data file D:\\OCR\\Tesseract-OCR\\tessdata/eng.traineddata Please ...) 红色表示的文件是否存在,不存在就按照这个文件创建一个目录文件,将原来的安装后的所有文件移动到这个目录下,或者重新安装Tesseract-OCR引擎到这个文件下。tesseract.exe路径变了,tesseract_cmd的值也记得修改哦,完美解决!!!!
注意事项
识别之后的打印结果中最后面都会出现一个小方框的字符,怎么回事呢? ??通过字符集的ascii码转化发现这个符号是一个分页符。
验证码识别中的分页符和换行符:在实际使用的时候如果是对验证码的识别,最后自动化输入的识别结果中会出现这个分页符,通过打印到word文件中,可以明显发现。除了分页符,还会打印换行符,那么这就不利于实际生产需要了,解决的办法就是使用字符串替换方法替换掉即可,上面代码中有说明。
再次说明:Pytesseract识别效果不理想,若想提高识别率,可使用jTessBoxEditor对Tesseract进行简单的训练。 OCR是一个专门的图像处理的领域,高精度的识别需要依靠深度学习、神经网络等技术。