我心中的王者:Python-文字识别系统
Tesseract OCR是一个文字识别(OCR, Optical Character Recognition)的系统,可以在多个平台上运作,目前这是一个开放资源的免费软件。1985-1994年间由惠普(HP)实验室开发,1996年开发为适用Windows系统。有接近十年期间,这个软件没有太大进展,在2005年惠普公司将这个软件释为免费使用(open source),2006年起这个软件改由Google赞助与维护。
本章笔者将简单介绍使用Python处理文字识别,在上一章笔者有说明目前有许多网站在进入前需要输入验证码,这一章将用实例说明,如何处理这些验证码。同时也将说明使用这个系统识别繁体和简体中文图文件。
29-1 安装Tesseract OCR
使用这套软件需要下载,请至下列网站。
http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe
①首先将看到下列左图画面。
②请按Next按钮,于第4个画面你将看到下列右图。
③请选择全部,然后按Next按钮,如下列左图。
④上述请使用默认目录安装,请按Next按钮,接着画面可以使用预设,下列右图是安装过程画面。
⑤下列左图是安装结束画面。
⑥安装完成后,下一步是将Tesseract-OCR所在的目录设定在Windows操作系统的path路径内,这样就不会有找不到文件的问题。首先打开控制面板的系统设置,如下列右图。
⑦选择高级系统设置,在高级选项卡单击环境变量按钮,在系统变量栏点path选项,会出现编辑系统变量对话框,请在变量值字段输入所安装Tesseract安装目录,如果是依照默认模式输入,路径如下:
C:\Program Files (x86)\Tesseract-OCR
上述路径建议用复制方式处理,需留意不同路径的设定彼此以“;”隔开。
⑧完成后,请单击确定按钮。如果想要确定是否安装成功,可以在命令行窗口输入“tesseract -v”,如果列出版本信息,就表示设定成功了。
29-2 安装pytesseract模块
pytesseract是一个Python与Tesseract-OCR之间的接口程序,这个程序的官网就自称是Tesseract-OCR的wrapper,它会自行调用Tesseract-OCR的内部程序执行识别功能,我们调用pytesseract的方法,就可以完成识别工作,可以使用下列方式安装这个模块。
pip install pytesseract
29-3 文字识别程序设计
安装完Tesseract-OCR后,预设情况下是可以执行英文和阿拉伯数字的识别,下列是笔者采用数字与英文的图片文件执行识别,并将结果印出(ch29_1.py)与印出和存储(ch29_2.py),在使用pytesseract前,需要导入pytesseract模块。
import pytesseract
由于这个pytesseract会自行处理和tesseract-OCR的接口,所以程序可以不用导入tesseract模块。这个模块主要是使用image_to_string( )方法,执行图像识别,然后将结果传回,如果识别英文或数字可以不必额外参数,如果识别其他语言,则需加上lang=‘chi_tra’(这是识别繁体中文)参数,chi_tra是繁体中文的参数名称,细节可参考29-4节。
程序实例ch29_1.py:这个程序会识别图片的文字,同时输出执行结果,下列是内含文字要识别的图片内容。
下列是程序内容。
# ch29_1.py
from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract-OCR\tesseract.exe'
text = pytesseract.image_to_string(Image.open(r'E:\桌面Desktop\Python王者归来\代码\ch29\data29_1.jpg'))
print(text)
执行结果 这个程序无法在Python idle环境执行,下列在命令提示符模式执行。
4DDKR
程序实例ch29_2.py:这个程序会执行识别图片的文字,除了输出文字,也会将文字存入out29_2.txt文件内,下列是内含文字要识别的图片内容。
下列是程序内容。
# ch29_2.py
from PIL import Image
import pytesseract
text = pytesseract.image_to_string(Image.open('E:\桌面Desktop\Python王者归来\代码\ch29\data29_2.jpg'))
print(text)
with open('E:\桌面Desktop\Python王者归来\代码\ch29\out29_2.txt', 'w') as fn:
fn.write(text)
执行结果 下列是程序执行结果。
Users \Jiin-l
vei>echo %path%
下图是所建立的out29_2.txt文件内容。
29-4 识别繁体中文
Tesseract-OCR也可以识别繁体中文,这需要指示程序引用中文数据文件,这个繁体中文数据文件名称是chi-tra.traineddata,在29-1节的安装画面中,笔者指出了需要设定安装语言文件。
如果读者依照上面指示安装,可以在\tessdata文件夹下看到chi_tri.trianeddata文件,下面将以实例ch29_3.py说明识别下列繁体中文的图片文件。
程序实例ch29_3.py:执行繁体中文图片文字的识别,这个程序最重要的是笔者在image_to_string( )方法内增加了第2个参数lang=‘chi_tra’参数,这个参数会引导程序使用繁体中文数据文件做识别。
# ch29_3.py
from PIL import Image
import pytesseract
text = pytesseract.image_to_string(Image.open('E:\桌面Desktop\Python王者归来\代码\ch29\data29_3.jpg'),
lang='chi_tra')
print(text)
with open('E:\桌面Desktop\Python王者归来\代码\ch29\out29_3.txt', 'w') as fn:
fn.write(text)
执行结果
1:從無到有一步一步教導讀
2:學習本書不需要
書已灌溉了統計知識給你
R 語言的使
統計基礎,但在無形中
本
在上述识别处理中,只有一个字错,这是一个非常好的识别结果。不过笔者在使用时发现,如果图片文件的字比较小,会有较多识别错误情况。
29-5 识别简体中文
识别简体中文和繁体中文步骤相同,只是导入的是chi_sim.trianeddata简体中文数据文件,下面将以实例ch29_4.py说明识别下列简体中文的图片文件。
程序实例ch29_4.py:执行简体中文图片文字的识别,这个程序最重要的是笔者在image_to_string( )方法内增加了第2个参数“lang=‘chi_sim’”参数,这个参数会引导程序使用简体中文数据文件做识别。这个程序另外需留意的是,第8行在打开文件时需要增加encoding=‘utf-8’,才可以将简体中文写入文件。
# ch29_4.py
from PIL import Image
import pytesseract
text = pytesseract.image_to_string(Image.open('E:\桌面Desktop\Python王者归来\代码\ch29\data29_4.jpg'),
lang='chi_sim')
print(text)
with open('E:\桌面Desktop\Python王者归来\代码\ch29\out29_4.txt', 'w', encoding='utf-8') as fn:
fn.write(text)
执行结果
1: 从无到有一步一步教导读者 R 语言的使用
2: 学习本书不需要有统计基础,但在无形中本
已灌溉了统计知识给你
在使用时,笔者也发现如果发生无法识别情况,程序将响应空白。