tesseract-ocr命令学习

时间:2022-08-30 09:01:20

Tesseract-OCR的命令行使用

打开DOS界面,输入tesseract:

tesseract-ocr命令学习

如果出现如上输出,表示安装正常。

我准备了一张验证码1.png放在D盘根目录下 tesseract-ocr命令学习,简单的执行验证码识别

tesseract-ocr命令学习

其中 1.png是验证码图片 result是结果文件的名称 默认是.TXT文件 执行成功后会在验证码图片所在位置生成result.txt 打开结果为:

tesseract-ocr命令学习

命令详解:

Usage:tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
pagesegmode values are:
0 = Orientation and script. detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform. block of vertically aligned text.                            
//作为一个竖屏文字识别
6 = Assume a single uniform. block of text.
7 = Treat the image as a single text line.                                                           //只有一个单独的行
8 = Treat the image as a single word.                                                                //作为一个图片显示
9 = Treat the image as a single word in a circle.                                                
10 = Treat the image as a single character.                                                       
-l lang and/or -psm pagesegmode must occur before anyconfigfile.


tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]

tesseract    图片名  输出文件名 -l 字库文件 -psm pagesegmode 配置文件

例如:

tesseract code.jpg result  -l chi_sim -psm 7 nobatch

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

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

configfile 参数值为tessdata\configs 和  tessdata\tessconfigs 目录下的文件名


//======================================================================================

为了方便 tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言 fontname是字体 
比如我们要训练自定义字库 chi 字体名:黑体
那么我们把tif文件重命名 chi.黑体.exp0.tif

把多个.tif文件合并成一个.tif文件tesseract-ocr命令学习合并成一个.tif文件


下面开始训练字库:

tesseract-ocr命令学习

下面第一条命令与上图功能一样,产生.box文件
1、E:\Tesseract-ocr\tesseract.exe chi.黑体.exp0.tif chi.黑体.exp0 batch.nochop makebox

    运行以上命令也会产生一个box文件。产生box文件的过程是必须的,也是最重要的,没有box文件以下的内容都无法进行。

需要记住的是生成的.box要和这个.tif文件同在一个目录下。

tesseract-ocr命令学习

2、文字校正。运行jTessBoxEditor工具,打开chi.黑体.exp0.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如上图所示。可以看出有些字符识别的不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。


2、产生字符特征文件 

   tesseract chi.黑体.exp0.tif chi.黑体.exp0 nobatch box.train

     这一步将会产生 chi.黑体.exp0.tr文件和一个 chi.黑体.exp0.txt文件,txt文件貌似没什么用,看看而以。

3、计算字符集

   unicharset_extractor chi.黑体.exp0.box

     这一步会产生一个unicharset字符集文件.

4、定义字体特征文件,---Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties.txt的字体特征文件

     手工建立一个文件font_properties.txt

     内容如:黑体 0 0 0 0 0

注意:这里   必须与训练名中的名称保持一致,填入下面内容 ,这里全取值为0,表示字体不是粗体、斜体等等。

5、聚集字符特征

   1) shapeclustering -F font_properties.txt -U unicharset chi.黑体.exp0.tr   注意:如果font_properties不加扩展名.txt,可能会报错

   2) mftraining -F font_properties.txt -U unicharset -O chi.unicharset chi.黑体.exp0.tr

   使用上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件chi.unicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符

   特征数文件pffmtable。最重要的就是这个inttemp文件了,他包含了所有需要产生的字的图形原型。 

   3)cntraining chi.黑体.exp0.tr

     这一步产生字符形状正常化特征文件normproto。

6、把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上chi.

7、执行combine_tessdata chi.

    然后把chi.traineddata放到tessdata目录


tesseract-ocr命令学习

必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了.


8、用新的字库对图片进行分析

     tesseract test.tif output -l chi    

    内容会写到output.txt文件中,这个文件与测试图片在同一个目录下


识别问题:

1、一个字分成2部分识别,如:好,会认为女  子,如何解决???


4.Tesseract-OCR的QA合集

A.ImageMagick是什么?

ImageMagick是一个用于查看、编辑位图文件以及进行图像格式转换的开放源代码软件套装

我在这里之所以提到ImageMagick是因为某些图片格式需要用这个工具来转换。

B.Leptonica 是什么?

Leptonica 是一图像处理与图像分析工具,tesseract依赖于它。而且不是所有的格式(如jpg)都能处理,所以我们需要借助imagemagick做格式转换。

Here's a summary of compression support and limitations:
    - All formats except JPEG support 1 bpp binary.
    - All formats support 8 bpp grayscale (GIF must have a colormap).
    - All formats except GIF support 24 bpp rgb color.
    - All formats except PNM support 8 bpp colormap.
    - PNG and PNM support 2 and 4 bpp images.
    - PNG supports 2 and 4 bpp colormap, and 16 bpp without colormap.
    - PNG, JPEG, TIFF and GIF support image compression; PNM and BMP do not.
    - WEBP supports 24 bpp rgb color.

C.提高图片质量?

识别成功率跟图片质量关系密切,一般拿到后的验证码都得经过灰度化,二值化,去噪,利用imgick就可以很方便的做到.

convert -monochrome foo.png bar.png #将图片二值化

D.我只想识别字符和数字?

结尾仅需要加digits

命令实例:tesseract imagename outputbase digits

E.训练你的tesseract

不得不说,tesseract英文识别率已经很不错了(现有的tesseract-data-eng),但是验证码识别还是太鸡肋了。但是请别忘记,tesseract的智能识别是需要训练的.

F.命令执行出现empty page!!错误

严格来说,这不是一个bug(tesseract 3.0),出现这个错误是因为tesseract搞不清图像的字符布局

训练时出现的问题

错误1:

编译下面两句的时候

shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr

出现错误: No shape table file present: shapetable Reading num.tr …Font id = -1/0, class id = 1/13 on sample 0font_id >= 0 && font_id < font_id_map_.SparseSiz
..\..\classify\trainingsampleset.cpp, line 622

原因:主要出在font_properties.txt这个文件的配置上。
内容为:黑体 0 0 0 0 0      正确