-
TesseractOCR
(光学字符识别)引擎概述
< br>
一:
TesseractOCR
简介
Tesseract
是惠普布
里斯托实验室在
1985
到
1995<
/p>
年间开发的一个开源的
OCR
引擎,
p>
曾经在
1995 UNLV
精确度测试中名
列前茅。但
1996
年后基本停止了开发。
2005
年,惠普
将其对外开源,
2006
由
Google
对
Tesseract
进行改进、消除
Bug
、优化工作。项目地址
为:
/p/tesse
ract-ocr
二:
TsseractOCR
架构
Tesseract
的识别步骤大致如下:
1.
< br>连通区域分析
,
检测出字符区域区域
(轮廓外形)
,
以及子轮廓。在此阶段轮廓线集成
为块区域。
2.
由
字符轮廓和块区域得出文本行,以及通过空格识别出单词。固定字宽文本通过字
符单元分
割出单个字符,而对百分号的文本(
Proportional text
)通过一定的间隔和模糊间
隔就(
fuzzy
spaces
)来分割;
3.
p>
依次对每个单词进行分析,采用自适应分类器,分类器有学习能力,先分析的且满
足条件的单词也作为训练样本,所以后面的字符(比如页尾)识别更准确;此时,页首的字
符识别比较不准确,所以
tesseract
会
再次对识别不太好的字符识别是其精度得到提高。
4.
最后,识别含糊不清的空格,及用其他方法,如由笔画高度(
x-he
ight
),识别小写
字母(
smal
l-cap
)的文本。
三:文本行和单词的查找(
Line and Word
Finding
)
a.
假设页面布局分析(
page layout analysi
s
)大致确定了文本区域和文本尺寸,一个
简单百分位高度过滤
器(
percentile height filter
)可
以将跨行大写字母及纵向粘连一起的字
符过滤掉,
利用字符的高
度信息,
选取所有字符的中值高度,
通过高度的比例调节去掉一
些
无关的块,比如标点符号,变音符和噪声等;
b.
对块区域的
x
< br>坐标排序,利用坐标拟合直线(
baseline
),拟
合方法:中位数最小
方差拟合(
least median
of squares fit
)
c.
进一步,拟合文本行的形状,利用四次多项式,将文本行
看成螺线形,采用最小二
乘法拟合
d.
检测出等距文本
(fixed
pitch
text)
,对粘连的文本进行分割
(chopping)
e.
对非等距字体如百分号,斜体等问题,利用中线、基准线
之间的空白大小,来分割
字符
有关函数:
1
.
PageIterator * tesseract::TessBaseAPI::
AnalyseLayout()
页面结构分析
2.
Boxa *
tesseract::TessBaseAPI::GetRegions(Pixa **
pixa)
获取页面结构分析结果
3. Boxa *
tesseract::TessBaseAPI::GetConnectedComponents (
Pixa ** pixa )
连通域分析
4.
void
tesseract::TessBaseAPI::GetBlockTextOrientations (
int **
block_orientation,
bool ** vertical_writing
)
获取每一块(
block
由页面结构分
析获得)中的文字方向。
5.
Boxa *
tesseract::TessBaseAPI::GetStrips ( Pixa ** pixa,
int **
blockids
)
6.
Boxa *
tesseract::TessBaseAPI::GetTextlines ( Pixa **
pixa,
int **
blockids
)
7. Boxa *
tesseract::TessBaseAPI::GetWords(Pixa ** pixa)
以
Boxa
格式获取文字。
8.
获得文本行
获得
strip
区域
Boxa*tesseract::TessBaseAPI
::GetComponentImages
(
PageIteratorLevel
level
,
bool
Pixa **
int **
)
获得指定级别的元素(
block
,
textline,
word
)
text_only
,
pixa
,
blockids
9.
voidtesseract::TessBaseAP
I::DeleteBlockList(BLOCK_LIST * block_list)
删除
Block
四:单词的识别(
word
recognition
)
a. <
/p>
分割粘连的字符,将凹进去的轮廓点作为备选分割点,分割后,进行识别,如果都
失败,就认为字符破损不全,修补字符
b.
对破碎的字符,利用
A*
算法搜索最优
的字符组合,直到达到满意的识别结果。(识
别成功的基本是字符分类器可以很好的识别
破碎的字符)
1.
inttesseract::TessBaseAPI::Recognize(ETEXT_DE
SC * monitor)
识别
来自
SetAndThresholdImage
的图像,产生
Tesseract
内部结构数据。
2.
int tesseract::TessBaseAP
I::RecognizeForChopTest(
ETEXT_DESC
* monitor)
识别
来自
SetAndThresholdImage
,<
/p>
Recognize() or TesseractRect().
的图像,测试
chopper.
3.
< br>booltesseract::TessBaseAPI::ProcessPages ( const char *
filename,
const char *
retry_config,
int
timeout_millisec,
-
-
-
-
-
-
-
-
-
上一篇:汽车零件术语
下一篇:汽车零件对照翻译及各功用