TesseractOCR的使用与训练
Tesseract,是一个开源文本识别 (OCR) 引擎,是由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Office Document Imaging(MODI)相比,可以不断的训练自己的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。
安装
百度搜索Tesseract,选择适合的版本安装,如安装位置D:\Tesseract-OCR,安装完成之后,增加环境变量TESSDATA_PREFIX,指向到D:\Tesseract-OCR\tessdata,在Path环境变量中增加D:\Tesseract-OCR。
如果需要识别中文,下载中文语言包,下载地址https://digi.bib.uni-mannheim.de/tesseract/tessdata_fast/, 下载完成后放到D:\Tesseract-OCR\tessdata目录下面
检查是否安装成功
通过tesseract --version命令如果能看以下相关信息,说明安装成功
测试
使用命令行测试
打开命令行窗口,输入 tesseract test.jpg result.txt -l chi_sim 执行,其中
test.jpg 是当前目录下需要识别的图片文件(支持多种图片格式)
result.txt 识别后输出的结果文件
-l 参数,代表要使用的语言,默认eng
chi_sim 中文
使用Python脚本测试
使用python调用Tesseract-OCR时,需要用到pytesseract库,可先进行安装pytesseract
import pytesseract
import cv2
image = cv2.imread(r'F:\test.jpg', cv2.IMREAD_COLOR)
result = pytesseract.image_to_string(image, 'chi_sim')
print(result)
Tesseract训练
训练自定义的模型,如训练手写的0到9的数字,训练完成后把生成的模型文件放到D:\Tesseract-OCR\tessdata,就可通过上面测试的方法,识别文件了,训练需要用到jTessBoxEditorFX软件(该软件是java开发的,需安装java环境), 训练方法如下:
获取样式文件
手写多张0到9的数字(样式文件越多越好),生在图片文件,文件格式一定要是**.tif**的。
Merge样本文件
打开jTessBoxEditor,Tools->Merge TIFF,将样本文件全部选上,并将合并文件保存为num.font.exp0.tif
生成BOX文件
打开命令行并切换至num.font.exp0.tif所在目录,输入,生成文件名为num.font.exp0.box,文件名一定要与上面生成tif文件名一致,否则使用jTessBoxEditorFX工具校正的时候会找不到data
tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
语法
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
lang为语言名称,fontname为字体名称,num为序号
定义字符配置文件
在目标文件夹内创建一个名为font_properties的文本文件,内容为
font 0 0 0 0 0
语法
fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用
字符校正
打开jTessBoxEditor,BOX Editor -> Open,打开num.font.exp0.tif,如图
通过上面的工具对识别错误或少识别的字符进行校正或添加,确保每个字符的大小、位置和值都是正确的,保存文件
执行批处理文件
在目标目录下创建一个批处理文件,如make.bat,内容如下:
rem test
echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
echo Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
echo Clustering..
cntraining.exe num.font.exp0.tr
echo Rename Files..
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable
echo Create Tessdata..
combine_tessdata.exe num.
echo. & pause
保存会执行,结果如下代表执行成功
执行完成之后在目标目录下会产生如下文件
生成模型文件
将目标目录下生成的文件num.traineddata,放到到Tesseract-OCR中tessdata文件夹下
测试
打开命令行窗口执行
tesseract test.jpg result.txt -l num
语言使用num,代表使用刚才训练的模型,最后在result.txt查看识别出的字符