[转]tesseract OCR Engine overview字符识别学习
原文地址:http://blog.csdn.net/viewcode/article/details/7790065
?
正文:
原文:?An Overview of the Tesseract OCR Engine?
下載地址http://code.google.com/p/tesseract-ocr/wiki/Documentation
?
Tesseract的識別步驟大致如下:
1. 連通區域分析;
2. 檢測出字符區域區域(輪廓外形),以及子輪廓;
3. 由字符輪廓,得出文本行,以及通過空格識別出單詞,通過字符單元分割出單個字符,而對百分號的文本(Proportional text)通過fuzzy空格來分割為單詞;
4. 每個單詞進行分析,采用自適應分類器,分類器有學習能力,先分析的且滿足條件的字母也作為訓練樣本,所以后面的字符(比如頁尾)的字符識別更精確;此時,頁首的字符識別比較吃虧,所以tesseract會對整頁的識別不太好的字符,再次進行識別。
5.最后,識別含糊不清的空格,及用其他方法,如由筆畫高度(x-height),識別小寫字母的文本。
?
small-cap:小寫字母?
?
利用第四個步驟的特性,對單個字符識別,選用能識別的比較好的字符放在頁首,將待識別的字符放在頁尾,是否能提高識別率?待測試...
-------------------
1. line and word finding
a. 假定文本區域能大致確定,將跨行大寫字母及縱向粘連一起的字符過濾掉,可以利用字符的高度信息,選取所有字符的中值高度
b. 對字符的x坐標排序,利用坐標擬合直線,擬合方法:中位數最小方差擬合(least median of squares fit)
c. 進一步,擬合文本行的形狀,利用四次多項式,將文本行看成螺線形,采用最小方差擬合
d. 檢測出等距文本(fixed pitch text),對粘連的文本進行分割(chopping)
e. 對非等距字體如百分號,斜體等問題,利用中線、基準線之間的空白大小,來分割字符
Drop-caps: 段落的首個字母,大寫且跨越兩行。
vertical touching character:縱向粘連一起的字符。
Proportional text:含百分號的文本
2. word recognition
a. 分割粘連的字符,將凹進去的輪廓點作為備選分割點,分割后,進行識別,如果都失敗,就認為字符破損不全,修補字符
b. 對破碎的字符,利用A*算法搜索最優的字符組合,直到達到滿意的識別結果
?
3.?Static Character Classifier
特征
a. 拓撲特征:與字體及大小無關,但問題是(引用文章看不到)?
b.?將字符近似為多邊形作為特征:對破碎不連通的字符無效
c. 突破性方案:訓練階段的特征與識別的特征可以不盡相同。在訓練階段,將近似多邊形作為特征,而在識別階段,抽取字符的輪廓特征并歸一化,然后將訓練集中的原型特征再與之,進行多對一的方式匹配
The features extracted from the unknown:待識別字符的特征,3維數據(x, y坐標,角度),每個字符一般有50-100個特征
the prototype features:原型特征(訓練集中的字符特征),4維數據(x, y坐標,角度,長度)一般有10-20個特征
?
分類,分為兩個步驟:
a. 粗分,多個特征,將每個特征相近的字符列舉出來
b. 細分,對相近的字符,用特征距離進行細分
?
訓練數據
94個字符,8種大小,4種字體(正常,粗體,斜體,斜粗體),每種20個樣本,共60160個樣本。
? ??
4. 語法分析
訓練集中有最常用的高頻詞,字典中的常用詞,常用數字,常用大寫、小寫。
將分割出的、待識別的詞與這些詞進行比較計算,算法采用加權最小距離。
問題:不同的分割,會識別出不同的結果。兩種結果都有可能,原因在于分割的不確定。用兩個指標進行量化,一個是confidence,將未知字符到原型的歸一化距離為指標;第二是將未知字符的輪廓長度(歸一化后的)作為指標。
?
5.?Adaptive Classifier 自適應分類器
由于靜態分類器涉及到多種字體(generalizing to any kind of font),其區分相近字符、字符與非字符的能力被削弱。此時,由于每頁文檔內的字符的個數有限,利用靜態分類器的結果可以訓練出對字體更敏感的自適應分類器,可以提高分類能力。
tesseract不用模板分類器,但使用相同的特征和分類作為靜態分類器(uses the same features and classifier as the static?classifier. 不解?)。靜態與自適應的區別,除了訓練集外,還有自適應分類器會將一行字符的基線(baseline)/x-高度(小寫字母x的高度) 歸一化。 歸一化后,很容易區分字母大小寫及噪聲;而靜態分類器僅利用字符歸一化的一階矩確定位置,二階矩確定字符大小。
將字符的距 歸一化最大的好處是 去除 高寬比(?aspect ratio?)和字體筆畫寬度(stroke width)的影響,且使上標、下標的區分簡單。但需要額外的分類特征來區分字母大小寫。
(兩種歸一化:基線/x行高的歸一化,單個字符距的歸一化)
tesseract還有學習能力,一般來說,整頁的文章的識別率要比單個字符的識別率要高,而且速度要比單個字符識別(累加時間)要好。
?
----------------------
在tesseract源碼里,tesseract默認選取的特征是 bmp,分類器是Convolutional Neural Net classifier,即可演化的神經網絡分類器(每一個結果都作為神經網絡的輸入,能提供反饋)。\tesseract_src\cube\conv_net_classifier.h 是分類器的描述。
不僅如此,tesseract還提供了Hybrid Neural Net Char Classifier分類器,使用Hybrid特征數據。
\tesseract_src\cube\classifier_factory.cpp
\tesseract_src\ccmain\cube_reco_context.cpp
里包含了tesseract分類器的實現。
?
文章比較拗口,英語功底不夠,后面慢慢理解修正。
轉載于:https://www.cnblogs.com/Crysaty/p/6094602.html
總結
以上是生活随笔為你收集整理的[转]tesseract OCR Engine overview字符识别学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 变量,函数
- 下一篇: Bug测试报告--食物链教学工具--奋斗