Python使用Tesseract实现OCR文字识别

易小灯塔
2022-08-11 / 0 评论 / 981 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年10月10日,已超过412天没有更新,若内容或图片失效,请留言反馈。

自动化办公有些场景会用到OCR文字识别, 不是很复杂的场景Tesseract-OCR就够用, 当然, 比较复杂的比如发票,合同, 表格等识别建议还是购买商用的基于AI训练的OCR识别接口.

Tesseract,一款由HP实验室开发由Google维护的开源OCR引擎。它可以读取和识别多种图像格式,包括jpeg, png, gif, bmp, tiff等。它还可以将识别的文本输出为字符串、边界框、数据、方向和脚本等信息

安装Tesseract-OCR

官方网站:https://github.com/tesseract-ocr/tesseract
官方文档:https://github.com/tesseract-ocr/tessdoc
下载地址:https://digi.bib.uni-mannheim.de/tesseract/

1.下载安装Tesseract

Tesseract-OCR支持很多操作系统,如windows、linux、MacOS等等。

注意尽量不要下载带dev,alpha,beta等版本,这些版本不稳定,也可能是测试版本。这里选择5.0版本, 以windows系统为例

https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.0.0.20211201.exe

双击下载的安装包,一路Next。

安装过程可以附带选择要安装的语言包,如果你要识别简体中文, 可以选择简体中文, 之后自动会从服务器下载该语言包下来。也可以不选择下载语言包, 下载离线包进行安装。

由于在线安装比较慢且不太稳定, 我们这里不勾选在线安装语言包

image-20231010153957058

image-20231010160240129

点下一步后会有安装路径的选择,你可以选择要安装C盘D盘等, 但记住这个路径, 之后设置环境变量会用, 我这里选择在默认路径C:\Program Files\Tesseract-OCR

点击下一步直至完成安装

2.下载语言包

进入tesseract的github文档页(https://tesseract-ocr.github.io/tessdoc),找到5.0.0.x目录下的Traineddata Files目录:

img

该目录下有tessdata,tessdata_best,tessdata_fast等5种语言包,其中tessdata是检测速度和准确度居中的语言包,后缀best对应最慢和最准确的语言包,后缀fast对应最快和准确度较差的语言包,这里我们选择tessdata。进入到tessdata语言包的github仓后,可以用git命令拉到本地,或者网页版下载到本地后解压,就可以看到很多以语言简称为文件名、traineddata为后缀的文件,其中eng.traineddata和chi_sim.traineddata一般足够应对中文和英文场景:

img

下载后将该包直接放在程序安装目录就是刚才的C:\Program Files\Tesseract-OCR目录, 放入目录下的的tessdata文件夹里面即可。

3.设置环境变量

在左下角的windows图标上点击右键, 选择系统, 在设置选择高级系统设置, 选择环境变量

image-20231010160803930

image-20231010160915159

image-20231010161000641

按图所属选择编辑, 填入tesseract的安装路径C:\Program Files\Tesseract-OCR, 点确定保存

image-20231010161134617

image-20231010161304560

打开cmd命令行, 输入tesseract -v检查查看是否安装成功

image-20231010161502517

命令行使用 tesseract --list-langs命令可查看当前软件支持的语言:

image-20231010161751346

出现上面信息即代表安装成功了

在Python中使用Tesseract

安装pytesseract包

pip install pytesseract

进行图片文字识别

from PIL import Image
import pytesseract

img = Image.open('xxx.jpg')

# 识别文字,并指定语言
string = pytesseract.image_to_string(img, lang='chi_sim')
print(string)

命令行使用

下面这个例子解析单个文件test.png(第1个参数),在标准输出(命令行界面)打印解析结果(第2个参数为stdout),用-l参数带chi_sim表示使用简体中文语言:

tesseract.exe test.png  stdout  -l chi_sim

也可以将stdout改为其他的字符串(第2个参数改为输出文件名称,不用带txt后缀),这样会将识别的结果写入到以该字符串命名的txt文件中:

tesseract.exe test.png  result  -l chi_sim

在当前目录下就会生成一个result.txt的文件,文件内容就是识别出来的文字内容。

扩展

对于发票合同之类比较复杂的场景, 可以利用OpenCV对发票图像进行预处理滤波、自适应阈值等一系列预处理得到二值图像;然后利用形态学中的开运算提取表格全域线段,进行表格位置提取,并结合表格交点坐标与自定义模板,实现表头与内容自适应适配;最后利用jTessBoxEditor对表格区域内容进行字库训练优化,最终实现基于Tesseract-OCR的字符识别。

发票文档由中英文、数字和特殊符号共同组成,Tesseract-OCR引擎自带的字库识别准确率并不高,引入jTessBoxEditor来训练专门针对发票识别的字库。通过修正坐标,将内容与表格边框分隔开,使表头与内容精准匹配,从而实现任意区域下对特定表格进行内容提取,并高效精准识别。

如果嫌麻烦又不差钱的, 可以选择使用阿里云发票票据识别、护照识别、名片识别、等复杂场景的接口.

0

评论 (0)

取消