操作环境:
1.tesseract-ocr 4.00.00
2.PIL库
3.pytesseract库
4.Python 3.6
一、
(1)tesseract-ocr库的下载:
这是一个谷歌的开源引擎,使用效果比较好
笔者在下载该库时踩坑颇多,从https://digi.bib.uni-mannheim.de/tesseract/上面下载后即可安装.这里面没有带上dev的是稳定版本,带dev的是实验版
然而安装速度实在太慢(中文简体chi-sim安装包虽然只有4M多,但是10kb/s的下载速度实在感人,翻墙貌似也没有明显速度提升),建议在勾选additional language data时可以少选几个,笔者只勾选了数学库和中文简体,如果有需要可以在选上日语,韩语等小语种.
安装完毕之后需要进行两个环境变量的配置(笔者就是在这栽了大跟头
,别的博主貌似都甚少提到)
详情请见百度经验的详细教程点击打开链接
(2)pytesseract库
这是Python的一个对应的识别库.有了这个库就可以在Python中直接调用tesseract-ocr了
先在点击打开链接这里下载安装包,再使用pip install pytesseract安装就行了
pip install pytesseract
安装完之后还不能直接运行,需要将之前下载的tesseract-ocr的路径添加到pytesseract.py中去
添加路径方法一:
参考https://pypi.org/project/pytesseract/
import pytesseract
pytesseract.pytesseract.tesseract_cmd = '<full_path_to_your_tesseract_executable>'
# Include the above line, if you don't have tesseract executable in your PATH
# Example tesseract_cmd: 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract'
需要把你之前在安装tesseract-ocr的路径加入到pytesseract的文件中,这样才能够调用tesseract-ocr库,其中路径地址需要转义(\t是制表符,再加上一个\加以解决)
添加路径方法二:
也可以到pytesseract.py文件中,将tesseract_cmd = 'tesseract' 改成 tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe' 使用r进行不转义处理
(此处参考 向博主致谢)
这样就能够安装成功了
此外还可以用pip install tesserocr pillow安装tesserocr,但是pip一般会报错,还得先安装whl等等文件,比较麻烦.笔者一直没有成功,pytesseract库也能用,我就懒得装tesserocr了
(3)PIL在Anaconda里面有,安装容易,不再赘述了
二、
实例操作:
(1)tesseract-ocr命令行操作:打开安装目录中的console。
输入tesseract如果出现下面的帮助命令就说明tesseract-ocr安装成功,环境变量配置也没问题.
这里为了演示就只使用相对路径访问图片,所以提前把一段包含文字的图片放入安装目录下。
再在命令行下输入tesseract 1.jpg 1.txt -l chi_sim+equ+eng的命令就可以看到txt的结果了(详情参考上面的百度经验的链接)
(2)调用pytesseract:
事先截取了一个TensorFlow 的图片放入pycharm的文件目录下,保存为tensorflow.png(使用绝对路径的话,可以随意放)
然后就可以运行代码了
from PIL import Image
import pytesseract
#二值化,输入阈值和文件地址
def binaryzation(threshold,image_address):
image=Image.open(image_address)#打开图片
image=image.convert('L')#灰度化
table=[]
for x in range(256):#二值化
if x<threshold:
table.append(0)
else:
table.append(1)
image=image.point(table,'1')
return image
def main():
image=binaryzation(200,'tensorflow.png')
image.show()#展示二值化后的效果,防止图片二值化效果不佳变成一片白无法识别
result=pytesseract.image_to_string(image)#变图片为字符串
print(result)
main()
得到结果:
在二值化时注意调节阈值,因为这个图片黄白色彩对比不强,背景色比较浅,需要调高阈值,否则二值化后会是一片白,识别失败
这里的代码仅仅是展示了英语文字的OCR识别,其他用法可以参考点击打开链接中的教程.
例如利用如下代码可以对于英语,数字之外的其他语种进行识别.
# French text image to string
print(pytesseract.image_to_string(Image.open('test-european.jpg'), lang='fra'))
三、
总结:
tesseract-ocr库十分有用,开源免费,在对于图片二值化处理后识别效果比较不错.在爬虫之中可以进行验证码的识别,进而实现模拟登录
笔者接下来,会对于北航的物理实验选课网站(必须输入验证码才能够登录,你这是在刁难我胖虎),利用selenium,tesseract-ocr,PIL进行模拟登陆,自动选课的尝试.如果成功将会分享出来,尽请期待.