Tesseract-OCR的Training简明教程
引言: Tesseract虽然功能强大,但是依然由于图片本身诸多的干扰因素和识别能力,存在诸多的识别率不高和信息不准确的问题,Training的过程则可以提升起识别的准确率, 本文将介绍如何train tesseract-ocr。
1. 关于Training
Tesseract虽然很强,且可以处理各类的文字转换,但是我们的目标图片并非如我们所期没有各类的干扰因素;在实际的情况下,各类的干扰因素将导致我们的识别准确率和效果大幅度下降;针对这类问题,Tesseract提供了Training的各类工具和过程,以期提升其识别率和正确率,提供可定制化的灵活性。
- 如何来提升输出的质量(Improve the quality of output), https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality
- Traing的介绍 https://github.com/tesseract-ocr/tesseract/wiki/Training-Tesseract#introduction
- Testdata https://github.com/tesseract-ocr/tessdata
- Training Tesseract https://github.com/tesseract-ocr/tesseract/wiki/Training-Tesseract-3.00%E2%80%933.02
2. jTessEditorBox
jTessEditorBox是第三方提供了一个关于自定义用户识别结合的工具,非常的好用强大,其本身是基于Java开发而成的,需要依赖JRE的运行环境,推荐使用JDK8 u40+以上版本,具体信息可以参考其官网信息。
这里做一个小说明: 直接从其官网下载非常慢,且非常容易断线,故直接使用了baidu的离线下载,秒级下载成功;然后绕道从百度云盘上下载。
3. 安装好tesseract
这里假定已经安装好了tesseract,如果安装有问题,可以参考我之前写的一篇文字,关于如何安装tesseract的简明教程。
4. 创建用户自定义的原始图片文件
这里笔者自行使用window自带的工具,创建以下4个图片,分别写了简单的数字:
5. 运行jTessEditorbox工具,merge图片
点击打开Tool菜单,点击merge,选择多个文件,另存在一个合成之后的文件:
在生成另外一个merged文件之后,进行编辑和错误信息的纠偏:
另存文件或者保存文件之后,保存到当下目录。
6.. 运行tesseract命令,生成box文件
>>>> tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
- E:\testdir>tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
- Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
- Page 1
- Page 2
- Page 3
- Page 4
结果会生成一个名称为num.font.exp0的文件,在命令运行的当下目录。BOX文件为Tessercat识别出的文字和其坐标。
注:Make Box File 文件名有一定的格式,不能随便乱取名字,命令格式为:
- tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。
7. 定义字体特征文件。Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties的字体特征文件。font_properties不含有BOM头,文件内容格式如下:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。
这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:
- font 0 0 0 0 0
这里全取值为0,表示字体不是粗体、斜体等。。
8. 生成语言文件。在样本图片所在目录下创建一个批处理文件 num_batch.bat,输入如下内容:
- 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.
然后运行这个bat文件,运行结果信息如下:
- E:\testdir>num_batch.bat
- E:\testdir>rem 执行改批处理前先要目录下创建font_properties文件
- E:\testdir>echo Run Tesseract for Training..
- Run Tesseract for Training..
- E:\testdir>tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
- Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
- Page 1
- APPLY_BOXES:
- Boxes read from boxfile: 8
- Found 8 good blobs.
- Generated training data for 2 words
- Page 2
- APPLY_BOXES:
- Boxes read from boxfile: 8
- Found 8 good blobs.
- Generated training data for 2 words
- Page 3
- APPLY_BOXES:
- Boxes read from boxfile: 8
- Found 8 good blobs.
- Generated training data for 2 words
- Page 4
- APPLY_BOXES:
- Boxes read from boxfile: 8
- Found 8 good blobs.
- Generated training data for 1 words
- E:\testdir>echo Compute the Character Set..
- Compute the Character Set..
- E:\testdir>unicharset_extractor.exe num.font.exp0.box
- Extracting unicharset from num.font.exp0.box
- Wrote unicharset file ./unicharset.
- E:\testdir>mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
- Warning: No shape table file present: shapetable
- Reading num.font.exp0.tr ...
- Flat shape table summary: Number of shapes = 8 max unichars = 1 number with multiple unich
- Warning: no protos/configs for Joined in CreateIntTemplates()
- Warning: no protos/configs for |Broken|0|1 in CreateIntTemplates()
- Done!
- E:\testdir>echo Clustering..
- Clustering..
- E:\testdir>cntraining.exe num.font.exp0.tr
- Reading num.font.exp0.tr ...
- Clustering ...
- Writing normproto ...
- E:\testdir>echo Rename Files..
- Rename Files..
- E:\testdir>rename normproto num.normproto
- E:\testdir>rename inttemp num.inttemp
- E:\testdir>rename pffmtable num.pffmtable
- E:\testdir>rename shapetable num.shapetable
- E:\testdir>echo Create Tessdata..
- Create Tessdata..
- E:\testdir>combine_tessdata.exe num.
- Combining tessdata files
- TessdataManager combined tesseract data files.
- Offset for type 0 (num.config ) is -1
- Offset for type 1 (num.unicharset ) is 140
- Offset for type 2 (num.unicharambigs ) is -1
- Offset for type 3 (num.inttemp ) is 710
- Offset for type 4 (num.pffmtable ) is 130474
- Offset for type 5 (num.normproto ) is 130573
- Offset for type 6 (num.punc-dawg ) is -1
- Offset for type 7 (num.word-dawg ) is -1
- Offset for type 8 (num.number-dawg ) is -1
- Offset for type 9 (num.freq-dawg ) is -1
- Offset for type 10 (num.fixed-length-dawgs ) is -1
- Offset for type 11 (num.cube-unicharset ) is -1
- Offset for type 12 (num.cube-word-dawg ) is -1
- Offset for type 13 (num.shapetable ) is 131715
- Offset for type 14 (num.bigram-dawg ) is -1
- Offset for type 15 (num.unambig-dawg ) is -1
- Offset for type 16 (num.params-model ) is -1
- Output num.traineddata created successfully.
需确认打印结果中的Offset 1、3、4、5、13这些项不是-1。这样,一个新的语言文件就生成了。
num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到Tesseract-OCR-->tessdata目录下。可以用它来进行字符识别了。
9. 基于新的字符集合,进行字符识别验证
验证新的测试集合
创建新的测试图片,我们还是使用输入数字,重新做了一个图片:
打开命令行,我们进行OCR转换:
- E:\testdir>tesseract newtestnum.png newresulttest -l num
- Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
- Warning in fopenReadFromMemory: work-around: writing to a temp file
- E:\testdir>
注意: 这里我们使用了一个新的语言类型 num,就是我们之前进行的用户自定义的识别字符集合。
我们查看一下我们的识别结果集合:
- 12357 684
效果还是非常棒的。
FAQ
1. 在windows下安装成功之后,进行tesseract的操作,碰到如下错误信息:
- E:\testdir>tesseract ttest1.png test1 -l eng
- Error opening data file \Program Files (x86)\Tesseract-OCR\tessdata/eng.traineddata
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
- Failed loading language 'eng'
- Tesseract couldn't load any languages!
- Could not initialize tesseract.
错误信息的关键词是tesseract_prefix的环境变量设置。
解决办法: 找到testData所在的目录,默认情况下是在tesseract安装的目录,在环境变量中设置TESSDATA_PREFIX的环境变量为testdata所在的目录即可。 重新运行命令即可正常使用。
Tesseract-OCR的Training简明教程相关推荐
- Tesseract OCR 下载及安装教程 (中英文语言包)
Tesseract OCR 下载安装 (中英文语言包) (需要csdn币的下载真没必要,所有的包都在这里免费下) https://github.com/tesseract-ocr/tessdata 这 ...
- Tesseract OCR——Windows 10 + CMake-GUI + Visual Studio 2019下编译和使用解决方案
基本概念 Tesseract OCR:Tesseract-OCR 引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一.然而,HP不久便决定放弃OCR业务 ...
- jTessBoxEditor for Tesseract OCR
jTessBoxEditor下载地址 http://vietocr.sourceforge.net/training.html 以下翻译自安装(解压)后的Readme文件 jTessBoxEditor ...
- Tesseract OCR简介(三)--安装及参数使用
参考:AI-Tesseract-OCR简介_花熊的博客-CSDN博客_tesseract坐标 一.windows 1.1 Tesseract安装 适用于Tesseract 3.05和Tesseract ...
- Tesseract OCR简介(一)
简介 Tesseract(/'tesərækt/) 这个词的意思是"超立方体",指的是几何学里的四维标准方体,又称"正八胞体".右图是一个正八胞体绕着两个四维空 ...
- Tesseract OCR 训练字库
Tesseract OCR是一款由HP实验室开发由Google维护的开源OCR引擎,在字符识别领域发挥着举足轻重的作用.除了使用软件自带的中英文识别库,我们可以使用Tesseract OCR训练属于自 ...
- An Overview of the Tesseract OCR Engine译文
An Overview of the Tesseract OCR Engine译文 Abstract Tesseract OCR引擎以及UNLV OCR精度第四次年度测试中的HP Research P ...
- python简明教程word版-计算机开放电子书归档 2018
97 Things Every Programmer Should Know A Java Reference (UCB CS61b Textbook) AI Cheat Sheet Advanced ...
- tesseract ocr训练样本库以及样本库使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.tesseract ocr训练样本库 二.样本库的使用 总结 前言 这篇报告主要介绍两个内容: 1.tessera ...
最新文章
- java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题
- cpu功耗排行_2020 主流手机处理器排行榜
- 检索数据_9_返回的字段在某个范围内的数据
- 小白学数据分析------日活跃人数分析
- Python精通-Python元组操作
- 用javascript写Android和iOS naitve应用,实在炫酷。
- es的分片和副本_原创|ES广告倒排索引架构演进与优化
- [原创]差分放大器阻抗匹配计算+阻抗计算小工具
- Java实现简易版金山打字
- [渝粤教育] 三江学院 财务管理 参考 资料
- 剑客之剑——倚天剑(Vim)
- Go 标准库介绍一: Replacer
- 惠普台式计算机系统系统修复,一键恢复系统,详细教您怎么一键恢复惠普笔记本系统...
- Mac搭建GO开发环境
- 迷宫最短路径问题(数据结构4.4.3 拓展)
- OpenCL Programming Guide - OpenCL 编程指南 - 书中源代码
- SGU126 Boxes
- Android内核模式下对当前进程的cred结构的获取方式
- make_moons的用法
- js 判断浏览器是IE几
热门文章
- 100楼层和两个玻璃球
- 2017IT最重要的证书
- 护理疑难病例讨论PPT模板-优页文档
- 基于APP Inventor2的蓝牙智能小车控制之APP操作系统篇(20191220更新篇)
- Python 高级编程和异步IO并发编程 --13_7 futur和task
- 在统计学中_统计学中的几个基本概念
- python自然语言处理实战 | NLP中用到的机器学习算法学习笔记
- 该如何学习嵌入式?看大佬的职业规划!
- 目标跟踪:VITAL: VIsual Tracking via Adversarial Learning代码运行
- 支付宝手机网页支付java demo调试问题和解决办法