Tesseract-OCR 入门

/ 工具 / 没有评论 / 3081浏览

Tesseract-OCR 入门

Tesseract-OCR -01-Tesseract 介绍

OCR(Optical Character Recognition):

Tesseract - OCR 特性

对于开发者

Windows下 Tesseract-OCR 的安装

Windows下 Tesseract-OCR 的环境变量配置

Tesseract 环境终于配置完成,去测试咯!

Tesseract-OCR 的文字识别测试

  1. 找一个需要识别的图片,比如这个test.jpg https://xpwi.github.io/Photos/p/test.jpg。放在一个好找的目录,最好是 D:\photos 这样的 6
  2. 打开 cmd 进入该图片的文件夹
  1. 敲入: tesseract test.jpg output_1
  2. 操作截图: 7

运行结果:

8 这里图片中的数字,有一个是识别错误的,就需要使用更多的数字去训练,才可以得到更高的准确率,关于训练数据,后面再介绍,关注我哦!

Tesseract-OCR 图片文字识别

使用 Tesseract-OCR 做图片文字识别,识别手写文字的时候,正确率能达到 90%,当训练后正确率是极高的。这里介绍的图片文字识别,可以识别英文,数字和中文等 。

tesseract num1.jpg num1

识别手写英文

识别中文

**tesseract chi1.jpg chi1 -l chi_sim **

识别英文和数字夹杂验证码

tesseract timg.jpg timg

Tesseract 训练:

Tesseract-OCR-04-使用 jTessBoxEditor 进行训练

训练的大致步骤:

1.安装 jTessBoxEditor

2.获取样本文件

3.Merge样本文件

4.生成BOX文件

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中,一定要注意格式

5.定义字符配置文件

font 0 0 0 0 0

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

6.准备环节

7.字符矫正

8.执行批处理文件

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. 

echo. & pause

9.拷贝 num.trainddata 文件

10.大功告成,测试结果

tesseract num1.jpg num01 -l num

Tesseract-05-主要API功能介绍

  1. tesseract本身代码是由c/c++混编而成的,其中有用的简单的接口函数几乎都是在baseapi.h中
  2. 从其处理过程中,不难得出:

现在,我们从头有调理地简单讲述一下子:

  1. tesseract::TessBaseAPI,基础的接口函数,包含了初始化,简单的 处理图片文字信息,版面分析的结果体等。
  2. IMAGE,只是一个类,里边封装了相关的图片操作,包括图片的 读取,图片参数信息的获取等。
  3. 其他,包括数据类型声明,相关结构体声明,跨平台处理,命令端参数提取等。 我们在实际中用到的就是前两个里边的东西

声明:以下函数皆是在 tesseract::TessBaseAPI 域下

1: SetImage

函数声明:

void tesseract::TessBaseAPI::SetImage ( const unsigned char * imagedata,
int width,
int height,
int bytes_per_pixel,
int bytes_per_line
)

为Tesseract 提供待识别的图片。

2:SetSourceResolution

函数声明:

void tesseract::TessBaseAPI::SetSourceResolution(int ppi)

设置源图像的分辨率(像素每英尺),可以计算最终的字体大小信息。 SetImage之后调用此函数。

3:SetRectangle

函数声明:

void tesseract::TessBaseAPI::SetRectangle ( int left,
int top,
int width,
int height
)

将识别限制到图像的一个子矩形区域,SetImage 之后调用此函数。每一次该函数调用后将清除识别结果,以便同一张图像可以进行多矩形区域的识别。

4:SetThresholder

函数声明:

void tesseract::TessBaseAPI::SetThresholder(ImageThresholder * thresholder)

在一些特殊的情况下, 通常是产生一个阈值器类的子类的时候,该函数可以提供一个不同的阈值器,阈值器可能会随着图片和设定预装入,或者被随后设定。Tesseract 拥有阈值器支配权,并在它被替换或是API被析构后删除。

5:GetThresholdedImage

函数声明:

Pix * tesseract::TessBaseAPI::GetThresholdedImage()

从Tesseract获得内部阈值图像的拷贝,在SetImage 或者TesseractRect 之后可以随时别调用。 注意,只有安装了Leptonica之后才可使用。

6:GetRegions

函数声明:

Boxa * tesseract::TessBaseAPI::GetRegions ( Pixa ** pixa )

以aleptonica-style Boxa, Pixa pair 格式获得页面结构分析的结果,在Recognize前后均可被调用。

7:GetTextlines

函数声明:

Boxa * tesseract::TessBaseAPI::GetTextlines ( Pixa ** pixa,
int ** blockids
)

以aleptonica-style Boxa, Pixa pair 格式获取文本行,在Recognize前后均可被调用。如果blockids(block数目) 是空的话,每行block- id返回每行一个元素的数组,使用之后被删除。

8:GetStrips

函数声明:

Boxa * tesseract::TessBaseAPI::GetStrips ( Pixa ** pixa,
int ** blockids
)

以aleptonica-style Boxa, Pixa pair 格式获取图像区域的文本行和条形区域,方便后面非矩形区域的处理。在Recognize前后均可被调用

9:GetWords

函数声明:

Boxa * tesseract::TessBaseAPI::GetWords(Pixa ** pixa)

以aleptonica-style Boxa, Pixa pair 格式获取图像区域的文字,在Recognize前后均可被调用。

10:GetConnectedComponents

函数声明:

Boxa * tesseract::TessBaseAPI::GetConnectedComponents ( Pixa ** pixa )

在页面分析之后识别之间,以aleptonica-style Boxa, Pixa pair 格式获得独立连通的文本区域,在Recognize前后均可被调用。

11:GetComponentImages

函数声明:

Boxa * tesseract::TessBaseAPI::GetComponentImages ( PageIteratorLevel
level,
bool text_only,
Pixa ** pixa,
int ** blockids
)

以aleptonica-style Boxa, Pixa pair 格式获得制定级别的元素(block,textline, word),在Recognize前后均可被调用。果blockids(block数目) 是空的话,每行block- id返回每行一个元素的数组,使用之后被删除。如果text_only 为真, 只有text可被返回。

12:GetThresholdedImageScaleFactor

函数声明:

int tesseract::TessBaseAPI::GetThresholdedImageScaleFactor()const

返回阈值图像的比例系数,该阈值图像由yGetThresholdedImage() 和调用了GetComponentImages()的GetX()函数返回。

13:DumpPGM

函数声明:

void tesseract::TessBaseAPI::DumpPGM ( const char * filename )

将内部二值图像放到PGM文件中。

14:AnalyseLayout

函数声明:

PageIterator * tesseract::TessBaseAPI::AnalyseLayout()

以SetPageSegMode设定的模式进行页面结构分析,返回一个(iterator),错误返回为空。Iterator 使用后必须删除。注意:该函数指向TessBaseAPI 类内部的数据,因此必须在TessBaseAPI 存在的情况下才可被调用。不能被改变内部PAGE_RES的 Init, SetImage, Recognize, Clear, End DetectOS或者其他调用。

15:Recognize

函数声明:

int tesseract::TessBaseAPI::Recognize(ETEXT_DESC * monitor)

识别 来自SetAndThresholdImage的图像, 产生Tesseract 内部结构数据,成功返回0,如果需要,下面的Get*Tex函数会调用它。识别完成后,在SetImage之前,输出都会保持在内部。

16:RecognizeForChopTest

函数声明:

int tesseract::TessBaseAPI::RecognizeForChopTest(ETEXT_DESC * monitor)

检索来自SetAndThresholdImage(), Recognize() or TesseractRect()的信息(在需要的情况下隐式调用Recognize)。对Recognize 变化一测试chopper.

17:ProcessPages

函数声明:

bool tesseract::TessBaseAPI::ProcessPages ( const char * filename,
const char * retry_config,
int timeout_millisec,
STRING *
text_out
)

识别指定文件的所有页面,文件格式为(a multi-page tiff or list of filenames, or single image), 并且根据参数(tessedit_create_boxfile, tessedit_make_boxes_from_boxes, tessedit_write_unlv, tessedit_create_hocr.)得到合适的文本。在输入文件的每一页运行ProcessPage,输入文件可以是(a multi-page tiff, single-page other file format, or a plain text list of images to read),返回值放在text_out中。如果tessedit_page_number 非负,程序将会在其所代表那一页开始。运行错误返回false. 如果程序暂停在某一页timeout_millisec (非负) 时间终止程序,或者由于某些原因一些页面处理失败,该页面将会以retry_config 的配置文件重新处理。

18:ProcessPage

函数声明:

bool tesseract::TessBaseAPI::ProcessPage ( Pix * pix,
int page_index,
const char * filename,
const char * retry_config,
int timeout_millisec,
STRING *
text_out
)

为 ProcessPages进行单页面识别。Text放到text_out中, pix是文件名,page_index是边缘处理后的元数据,比如box文件,或者hOCR格式文件。

19:GetIterator

函数声明:

ResultIterator * tesseract::TessBaseAPI::GetIterator()

为 LayoutAnalysis and/or Recognize运行结果获取读取顺序的迭代器(iterator),使用之后删除。

20:GetMutableIterator

函数声明:

MutableIterator * tesseract::TessBaseAPI::GetMutableIterator()

为 LayoutAnalysis and/or Recognize运行结果获取可变的迭代器(iterator),使用之后删除。

21:GetUTF8Text

函数声明:

char * tesseract::TessBaseAPI::GetUTF8Text()

识别的文本被返回为字符指针,以UTF8编码(must be freed with the delete [] operator)。从内部数据结构中获得文本字符串。