一、简介
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护。
二、下载
Tesseract OCR Github 项目地址: https://github.com/tesseract-ocr/tesseract
安装文件下载地址: https://digi.bib.uni-mannheim.de/tesseract , 目前最新版本为: 5.0.0 ,建议: 为了能够全局使用最好把安装目录放到环境变量里面.
官方提供的语言识别包: https://github.com/tesseract-ocr/tesseract/wiki/Data-Files
把下载下来的文件放到 Tesseract OCR 安装目录下的 tessdata 文件夹里面就可以了,
jTessBoxEditor下载地址: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor
因为是JAVA开发的所以需要自己安装JDK
注意: 需要把图片格式转换成tif\tiff格式,否则Merge样本文件的过程中会报错.
三、训练Tesseract 识别数字
例子:
图片名被我保存成了001.tif
1、 使用默认语言库识别
tesseract 001.tif output -l eng
【语法】: tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile…]
imagename为目标图片文件名,需加格式后缀;outputbase是转换结果文件名;lang是语言名称(在Tesseract-OCR中tessdata文件夹可看到以eng开头的语言文件eng.traineddata),如不标-l eng则默认为eng。
结果:
使用默认的eng 语言库识别,它把 7 识别成了 1
2、 Tesseract训练
大体流程为:安装jTessBoxEditor -> 获取样本文件 -> Merge样本文件 –> 生成BOX文件 -> 定义字符配置文件 -> 字符矫正 -> 执行批处理文件 -> 将生成的traineddata放入tessdata中
由于训练的时候需要样本文件,数量越多越好,我又找了两张图片,分别为 002.tif , 003.tif
1 )、Merge样本文件
解压 jTessBoxEditor,运行train.bat启动软件, Tools->Merge TIFF
选中所有的样本图片(图片路径不要有中文,我发现有中文无法多选图片)
保存完成后文件结构:
2 )、 生成BOX文件
打开命令行并切换至num.font.exp0.tif所在目录,输入
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为序号;在tesseract中,一定要注意格式。
执行完,文件夹会多出一个 num.font.exp0.box 的文件.
3 )、 创建配置文件
在样本图片的文件夹内生成一个名为font_properties的文本文件,内容为
font 0 0 0 0 0
【语法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用。
4 )、 字符矫正
打开jTessBoxEditor,BOX Editor -> Open,打开num.font.exp0.tif;进行矫正,最后点击save保存 .
5 )、生成语言文件
在样本图片所在目录下创建一个批处理文件,输入如下内容。
rem 执行改批处理前先要目录下创建font_properties文件 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. pause>null
批处理执行完成后的目录:
6 )、使用训练后的语言库识别
首先将num.traineddata 拷贝到Tesseract OCR 安装目录下的 tessdata 文件夹里
然后再命令行:
tesseract --list-langs |findstr num num
结果能显示num 证明已经正确添加了
tesseract 001.tif output -l num
使用我们自己训练的语言库已经可以正确识别7 了.
参考文章:
还没有评论,来说两句吧...