美文网首页
Tesseract-OCR 安装、中文识别与训练字库

Tesseract-OCR 安装、中文识别与训练字库

作者: 大盘站 | 来源:发表于2022-08-09 12:23 被阅读0次

    简介

    OCR(Optical Character Recognition):光学字符识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。 Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后由Google进行改进、修改bug、优化,重新发布。

    下载

    1、Windows版本Tesseract各版本下载,本教程用的版本是tesseract-ocr-setup-4.00.00dev.exe(【注意】要3.0以上才支持中文)。
    项目github地址:Tesseract

    2、各版本对应字库要识别简体中文需要下载chi_sim.traindata字库(【注意】根据版本下载对应字库)。

    3、jTessBoxEditor官网下载,用来训练字库的,带FX的版本才支持中文。

    安装

    1、点击tesseract-ocr-setup-4.00.00dev.exe文件,按提示安装就行,安装成功之后如下张图:

    复制你的安装路径,我的安装路径D:\Python\Tesseract-OCR,界面如下:

    路径

    打开我的电脑系统属性->高级->环境变量

    2、将下载好的字库放到Tesseract-OCR项目的tessdata文件夹里面。

    识别

    进入cmd,进入到要识别的图片的路径下E:\PythonCode***\tesseract图片识别(根据自己图片位置而定),输入命令

    tesseract 图片名称 生成的结果文件的名称 字库

    例如我的图片识别就是:

    tesseract test.png result -l chi_sim

    错误1

    安装tesseract-ocr时,改变了默认路径,执行命令出现如下错误:

    增加一个TESSDATA_PREFIX变量名,变量值为我的语言字库文件夹安装路径D:\Python\Tesseract-OCR\tessdata 添加到变量中;如下图:

    错误2

    当字库里面没有对应字库时,会提示以下错误:

    识别结果

    示例1:先拿一个比较简单图片来识别

    切换到图片目录在cmd窗口执行以下命令行:

    tesseract test1.png result -l chi_sim

    -l chi_sim 表示用简体中文字库(需要下载中文字库文件,解压后,存放到tessdata目录下去,字库文件扩展名为 .raineddata 简体中文字库文件名为: chi_sim.traineddata)

    打开图片目录下result.txt

    示例2:

    tesseract test2.png result -l chi_sim -psm 7

    -psm 7 表示告诉tesseract code.jpg图片是一行文本 这个参数可以减少识别错误率. 默认为 3

    识别结果:

    当识别效果不太理想,我们就要训练自己的字库

    训练

    1、准备图片

    彩色图片进行灰度化处理,在线png2tif地址将图片转换成tif格式,或者画图打开,另存为tif文件前后两个图片放在同个目录中,用于后面生成box文件。

    image.png

    【注意】如果存在多张图片,则需要合并 tif,在Box Editor中点击Tools->Merge Tiff ,按住shift键选择多个tif文件,并把合并生成的tif文件放到新目录中,重新命名;样本图像文件格式必须为tif\tiff格式,否则在Merge样本文件的过程中会出现 Couldn’t Seek 的错误。

    tif文件命名格式[lang].[fontname].exp[num].tif
    tif命名规则:lang为语言名称,fontname为字体名称,num为图片序号; 比如我们要训练自定义字库 testlang、字体名normal,则命名为testlang.normal.exp0.tif

    2、生成box文件

    切换到合成的tif文件夹下,执行命令,生成box文件

    tesseract tif文件名.tif -l 字体库 box文件名 makebox

    tif文件名与box文件名保持一致

    tesseract testlang.normal.exp0.tif -l chi_sim testlang.normal.exp0 makebox

    【注意】以简体中文字库识别,用其他字库解析不出来

    3、修改box文件

    将jTessBoxEditor下载后解压,点击运行

    【注意】这个工具是基于java虚拟机运行的,电脑是必须是Java运行环境

    点击Box Editor->Open->选择testlang.normal.exp0.tif,选择testlang.normal.exp0.tif会自动加载testlang.normal.exp0.box

    【注意】box文件和对应的tif一定要在相同的目录下,不然后面打不开。

    错误

    如果jTessBoxEditor char列出现了乱码,点击setting->font->宋体

    多个tif记得翻页修改,修改之后记得save哦

    4、生成font_properties

    执行echo命令生成font_properties

    echo normal 0 0 0 0 0 >font_properties

    【语法】<fontname> <italic> <bold> <fixed> <serif> <fraktur>

    fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用。

    【注意】这里输入的 “normal” 名称必须与 “testlang.normal.exp0.box” 中两个点号之间的 “normal” 名称保持一致。

    5、生成训练文件

    执行命令,生成testlang.normal.exp0.tr训练文件

    tesseract tif文件名.tif tr文件名 -l 字库名 nobatch box.train

    tif文件名与tr文件名一致

    tesseract testlang.normal.exp0.tif testlang.normal.exp0 -l chi_sim nobatch box.train
    1. E:\PythonCode\SpiderWeb\tesseract图片识别>tesseract testlang.normal.exp0.tif testlang.normal.exp0 -l chi_sim nobatch box.train

    2. Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica

    6、生成字符集文件

    执行命令,生成名为unicharset的字符集文件

    unicharset_extractor box文件名字.box
    unicharset_extractor testlang.normal.exp0.box
    1. E:\PythonCode\SpiderWeb\tesseract图片识别>unicharset_extractor testlang.normal.exp0.box

    2. Extracting unicharset from testlang.normal.exp0.box

    3. Wrote unicharset file ./unicharset.

    7、生成聚集字符特征文件

    执行命令,生成3个特征字符文件,inttemp、pffmtable、shapetable

    mftraining -F font_properties -U unicharset -O tr文件名.tr
    mftraining -F font_properties -U unicharset -O unicharset testlang.normal.exp0.tr
    1. E:\PythonCode\SpiderWeb\tesseract图片识别>mftraining -F font_properties -U unicharset -O unicharset testlang.normal.exp0.tr

    2. Warning: No shape table file present: shapetable

    3. Failed to load unicharset from file unicharset

    4. Building unicharset for training from scratch...

    5. Failed to load unicharset from file unicharset

    6. Building unicharset from scratch...

    7. Failed to load unicharset from file unicharset

    8. Building unicharset from scratch...

    9. Failed to load unicharset from file unicharset

    10. Building unicharset from scratch...

    11. Reading testlang.normal.exp0.tr ...

    12. Flat shape table summary: Number of shapes = 0 max unichars = 0 number with multiple unichars = 0

    13. Warning: no protos/configs for Joined in CreateIntTemplates()

    14. Warning: no protos/configs for |Broken|0|1 in CreateIntTemplates()

    8、生成字符正常化特征文件

    执行命令,生成normproto文件

    cntraining tr文件名.tr
    cntraining testlang.normal.exp0.tr
    1. E:\PythonCode\SpiderWeb\tesseract图片识别>cntraining testlang.normal.exp0.tr

    2. Reading testlang.normal.exp0.tr ...

    9、重新命名

    执行命令,把步骤7,步骤8生成的特征文件进行更名

    rename 旧文件名 新文件名

    依次执行以下命令

    1. rename normproto testlang.normproto

    2. rename inttemp testlang.inttemp

    3. rename pffmtable testlang.pffmtable

    4. rename unicharset testlang.unicharset

    5. rename shapetable testlang.shapetable

    10、合并训练文件

    执行命令,生成.traineddata文件

    combine_tessdata 合成文件名.
    combine_tessdata testlang.
    1. E:\PythonCode\SpiderWeb\tesseract图片识别>combine_tessdata testlang.

    2. Output testlang.traineddata created successfully.

    3. 1:unicharset:size=1788, offset=168

    4. 3:inttemp:size=177486, offset=1956

    5. 4:pffmtable:size=307, offset=179442

    6. 5:normproto:size=3594, offset=179749

    7. 13:shapetable:size=508, offset=183343

    【注意】命令后面的.

    将 testlang.traineddata文件拷贝到tesseract安装目录的tessdata目录下,才能被tesseract找到。

    在test图片所在目录下创建一个windows的脚本文件 testlang.bat,输入如下内容

    1. set filename=testlang.normal.exp0

    2. echo Generate unicharset...

    3. unicharset_extractor %filename%.box

    4. echo Run Tesseract for Training...

    5. tesseract %filename%.tif %filename% nobatch -l chi_sim box.train

    6. echo Generate font_properties...

    7. echo normal 0 0 0 0 0 >font_properties

    8. echo Generate Character...

    9. mftraining -F font_properties -U unicharset -O unicharset %filename%.tr

    10. rename normproto testlang.normproto

    11. rename inttemp testlang.inttemp

    12. rename pffmtable testlang.pffmtable

    13. rename shapetable testlang.shapetable

    14. rename unicharset testlang.unicharset

    15. combine_tessdata testlang.

    11、测试训练识别库

    执行以下命令,进行验证

    tesseract test2.png chi_sim_result -l chi_sim
    tesseract test2.png testlang_result -l testlang

    tessdata的合并必须要拥有.box文件,不能将自己训练合并到系统自带的字库中,我们可以用+结合使用

    tesseract test2.png result -l chi_sim+testlang

    在Python Tesseract-OCR识别代码实现

    1. [r"D:\Python\Tesseract-OCR\tesseract.exe", r"E:\PythonCode\SpiderBaidu\tesseract图片识别\test2.png", "result", "-l",

    2. stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    3. result = open(r"result.txt", "r", encoding='utf-8')

    总结

    总体流程:安装jTessBoxEditorFX-> 获取样本.tif文件 -> Merge样本文件 –> 生成BOX文件 -> 字符矫正 -> 执行脚本文件 -> 将生成的.traineddata文件放入Tesseract-OCR\tessdata文件夹下

    tesseract识别率,通过样本数量提升,呈对数型增长

    相关文章

      网友评论

          本文标题:Tesseract-OCR 安装、中文识别与训练字库

          本文链接:https://www.haomeiwen.com/subject/bflnwrtx.html