操作环境:

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实例支持jpg tesseract库_创建Tesseract实例支持jpg

这里为了演示就只使用相对路径访问图片,所以提前把一段包含文字的图片放入安装目录下。

再在命令行下输入tesseract 1.jpg 1.txt -l chi_sim+equ+eng的命令就可以看到txt的结果了(详情参考上面的百度经验的链接)

(2)调用pytesseract:

创建Tesseract实例支持jpg tesseract库_二值化_02

事先截取了一个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()

得到结果:

创建Tesseract实例支持jpg tesseract库_OCR_03

创建Tesseract实例支持jpg tesseract库_创建Tesseract实例支持jpg_04

在二值化时注意调节阈值,因为这个图片黄白色彩对比不强,背景色比较浅,需要调高阈值,否则二值化后会是一片白,识别失败

这里的代码仅仅是展示了英语文字的OCR识别,其他用法可以参考点击打开链接中的教程.

例如利用如下代码可以对于英语,数字之外的其他语种进行识别.

# French text image to string
print(pytesseract.image_to_string(Image.open('test-european.jpg'), lang='fra'))

三、

总结:

tesseract-ocr库十分有用,开源免费,在对于图片二值化处理后识别效果比较不错.在爬虫之中可以进行验证码的识别,进而实现模拟登录

笔者接下来,会对于北航的物理实验选课网站(必须输入验证码才能够登录,你这是在刁难我胖虎),利用selenium,tesseract-ocr,PIL进行模拟登陆,自动选课的尝试.如果成功将会分享出来,尽请期待.