Tesseract-ocr开发经验总结

环境搭建的问题总结

前言:除非特殊需要,或者系统不支持,否则尽量避免使用源码安装,不然可能会在环境搭建这一步浪费大量时间。即使能正常使用了,也可能在后续的使用中因为各种各样的问题来重走这一过程,为避免这一情况的发生,即使tesseract能正常使用了,也请通过tesseract -v来确认自己需要的库都已经成功被tesseract找到。

一、configure提示leptonica library missing

configure输出(最后几行):

checking for leptonica... yes
checking for pixCreate in -llept... no
configure: error: leptonica library missing

我们看到checking for leptonica... yes,那么leptonica是安装成功的,但是却没有找到lib,那么我们通过环境变量和configure参数让它找到
export LIBLEPT_HEADERSDIR=/usr/local/include
./configure --enable-shared --with-extra-libraries=/usr/local/lib
(使用–enable-shard原因见下)

二、make时提示各类undefined symbol

情况有两种

(1)各类依赖安装不完全

If they are not already installed, you need the following libraries (Ubuntu 16.04/14.04):

sudo apt-get install g++ # or clang++ (presumably)
sudo apt-get install autoconf automake libtool
sudo apt-get install autoconf-archive
sudo apt-get install pkg-config
sudo apt-get install libpng-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install zlib1g-dev

if you plan to install the training tools, you also need the following libraries:

sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev

如果提示undefined reference to TIFFXXX@LIBTIFF_4.0',可能是因为libtiff4和libtiff5冲突所致,请将所有的libtiff的库文件删除干净后,重新安装libtiff4-dev后再次安装

(2)tesseract和leptonica版本不一致

Tesseract   Leptonica   Ubuntu
4.00        1.74.2      Must build from source
3.05        1.74.0      Must build from source
3.04        1.71        Ubuntu 16.04
3.03        1.70        Ubuntu 14.04
3.02        1.69        Ubuntu 12.04
3.01        1.67    

三、tesseract运行提示cannot open shared object file

提示信息:
tesseract: error while loading shared libraries: libtesseract.so.3: cannot open shared object file: No such file or directory

采用Linux下的开发经验总结中的通用方法即可解决

训练过程的经验总结

一、使用jTessboxeditor生成tif和box文件的技巧

情况分析:
网上的许多教程都是通过这样一个方式得到tif文件和box文件:1.准备文字数据 2.利用jTessboxeditor(或其他工具)将文字数据生成为tif文件 3.用tesseract对tif文件作识别和标记(姑且这么称呼这个过程)得到box文件 4.利用jTessboxeditor调整box文件,之后就可以用tesseract生成训练文件了。
但是一旦实际操作起来,尤其是文字数据量较大时,就会发现这个过程十分低效。
在使用jTessboxeditor生产tif文件的时候,我们会发现她也帮我们生成了一个box文件,那么这个box文件得到的过程和利用tesseract生成box文件有何不同呢,我作出如下分析:1.我们不难想象,jTessbxeditor为了生产tif文件,一定是有每个字符的位置信息的,那么jTessboxeditor其实既含有一个blob的位置信息,又有其对应的真实的字符(根据文字数据),那么理所应当应该生成出一个具有准确信息的box文件 2.那么tesseract又是如何生成box文件的呢,其实我们可以简单的理解为tesseract其实就是在识别一副再普通不过的图片,只不过她不仅输出了识别到的字符,还把对应的像素区域框定了出来,也就是box文件(box文件本质上,每一行的内容就是一个字符加一个对应页上的矩形区域),也就是说tesseract生成的box文件是识别出来的,那自然避免不了一个问题,误识别
所以,这里给出高效的生成tif和box文件的顺序:
1.准备文字数据
2.利用jTessboxeditor将文字数据生成为tif文件和box文件
tesseract直接用步骤2的tif和box文件生成训练文件

Tips:
1.如果你发现jTessboxeditor生成的box文件中存在大量的blob错位的情况,请将文本数据分成多份,以生成多个文件(目前测试中,只有tif文件只有1页的情况下box没发现过错位的情况)
2.多个tif文件和box文件可以在后面生产字典的时候得到合并,请注意命名的统一(如AAA.BBB.exp0 AAA.BBB.exp1 …)

二、FAILURE! Couldn’t find a matching blob FAIL!

错误提示
APPLY_BOXES: boxfile line XXX/X ((XXXX,XXXX),(XXXX,XXXX)): FAILURE! Couldn't find a matching blob
FAIL!

情况分析:jTessboxeditor中每个方框和字符对应都很正确,tesseract生成训练文件时却提示找不到匹配的blob(虽然我认为方框和实际文字有没有对齐以及是否和字符匹配都和这个错误没什么关系)
经借鉴一些前人的解决经验,初步认为是tesseract对box文件和tif文件中的blob和page的位置界定有问题
解决步骤:
消除了生成tif文件的文字之间的所有空格,然后生成tif文件和box文件,再次生成训练文件,无错误产生。
如果还有错误,可尝试调整出错的字符到其他位置(如与旁边的字符交换位置等)。

三、多种字体的训练

情况分析:我之前训练了一种名为myChi的语言(couriernewb字体)的数据,现在我想增加一种字体
解决步骤:
直接用jTessboxeditor生成新的字体的tif和box文件,步骤同上,注意文件名的语言名字要同为myChi。此时jTessboxeditor会自动在已有的myChi.font_properties文件中再增加一行,增加的一行为新增的字体的数据。后续步骤同上。

四、误识别的纠正

情况分析:训练过程中遇到误识别是非常正常的事情,这里提供一些解决技巧
解决步骤:
1.考虑是否是由于字体的原因造成误识别,如字体类型,大小,是否加粗等,然后根据情况增加所需的tif和box文件
2.考虑是否是因为训练的文本中相似字符过多,或者不同类型的字符过于混杂等(比如数字和汉字之间的误识别),根据情况可用opencv等对图片进行一定分割,比如某些区域只含有数字,可把该区域单独分割出来,用只含有数字的语言进行识别。
3.对于不好判断的情况,可用上述的一里面提到的思想,把有误识别的图片生成box文件,用jTessboxeditor进一步确定是哪些部分造成的误识别,再思考可能的解决办法
tesseract XXX.jpg XXX -l language makebox
4.一些情况可通过增加文字内容的方式解决误识别,比如图片中含有“2016”的字样,但是识别出来为“2015”等,可考虑在文字数据部分加入“2016”,来增加对该字样的识别率。(不确定是否真的有效,但测试下来确实有几次是有效的)

猜你喜欢

转载自blog.csdn.net/the_k_is_on_the_way/article/details/79222450