Tesseract算法研究


https://github.com/tesseract-ocr/tesseract/wiki github上的資料。

https://blog.csdn.net/guzhenping/article/details/51023687 關於tesseract的博客。

An Over view of theTesseract OCR Engine論文的個人理解

概述

字符輪廓形成blobs(博主認為可能是指連通域),blobs被識別為文本行,文本行和區域將用於分析固定間隔或者成比例的間隔。文本行根據字符間隔分為不同的字符,固定間隔將迅速分割字符,比例間隔使用確定間隔和模糊間隔分割字符。識別分為兩次過程進行。 在第一遍中,嘗試依次識別每個單詞。 識別效果好的單詞都將作為訓練數據傳遞給自適應分類器。 然后,自適應分類器將有機會更准確地識別頁面下方的文本。由於自適應分類器進行了學習,進行第二次識別可能識別出原本難以識別的字符。最后,解析模糊間隔,以及檢查x-height假設來確定小寫字母。

總體流程:

 

尋找行

行尋找算法已經公布https://www.hpl.hp.com/techreports/94/HPL-94-113.pdf,傾斜檢查的一般方法是通過將霍夫變換應用於圖像的部分區域簡化地檢查傾斜,或者是尋找平行於文本行基線的像素點集,進行不同角度的投影,選擇投影最高峰的方向為傾斜方向。

此算法如下:

連通分量分析,連通域稱為blob(個人推測),blob的尺寸和位置表示為外框坐標。

過濾blob,選擇blob集合,這個集合可能代表着正文。精度不是非常重要,主要是過濾首字下沉,下划線和孤立的噪聲。統計最多的高度、寬度作為參考,高度不足的blob會被刪除,保留高度、寬度在一定范圍內的blob。

根據blob外框左邊界的x坐標排序,這種排序可以隨着頁面傾斜,確保blob不會被放進錯誤的行里。尋找與blob相交最多的已存在的行,如果不存在,則放入第一個blob,后續添加新的blob擴展行的上下界限制,根據blob的下界更新平均y的偏移。

(個人理解是利用排序后的連通域,根據上下界進行限制,連通域邊界變化和頁面傾斜相關,比較固定,可任意保證多數連通域分配在准確的行內,再根據分配后的連通域外框坐標擬合直線。)

擬合基線,對已經分配好的blob,使用least median of squares(最小二乘法?)擬合基線。

關鍵點在於blob的干擾過濾以及文本行構造。

行尋找可以識別傾斜的頁面而不必進行傾斜校正,保證了圖像質量。假設頁面布局分析已經提供了大致相同的文本大小的文本區域,根據文本行高度,可以濾除高度不足的干擾信息。過濾后的blob更適合用於擬合不重疊、平行、可能傾斜的線模型。通過x坐標的排序和處理,可以將blob分配給不同的文本行,結合頁面的斜率可以大大減少在存在傾斜的情況下分配給錯誤文本行的危險。將過濾干擾后的blob分配給文本行后,用least median of squares(最小二乘法?) 擬合基線,將過濾會后的blob重新擬合回合適的行。最后,將水平重疊至少一半的blob合並,把標點和正確的基線放在一起,將分裂的字符部分合並。

擬合基線

找到文本行后,將使用二次樣條曲線更精確地擬合基線。 這是OCR系統的又一個先河,它使Tesseract能夠處理具有彎曲基線的頁面。將blob划分為幾組來擬合基線,並為原始基線合理地連續位移。通過最小二乘法用二次樣條擬合到最密集的區域。

 

 帶有基線,下降線,中間線和上升線的文本行示例,線都是平行的(y間隔在整行中為常量,可能有略微彎曲)。

固定間隔和比例間隔

在文本行中尋找固定間隔,使用固定間隔可以快速分割為字符。非固定間隔時,在基線和中間線之間的有限垂直范圍內測量間隔,在此階段使接近固定間隔閾值的空間變得模糊,以便可以在單詞識別后做出最終決定。

識別

 

黏連字符(圖4),通過多邊形近似的頂點作為候選分割點,利用識別的置信度來判別。誤分割字符,當候選分割點都使用后結果仍然不佳,則進行拼接。拼接時,進行搜索優先級隊列,對未識別的組合進行識別來評估。利用先分割后拼接的方案簡化對分割字符段維護的數據結構。

 

 

未知的特征不必和訓練庫中的完全一致,在訓練過程中,使用多邊形近似的線段作為特征,但是在識別中,從輪廓中提取了固定長度較小(以標准化單位)的特征,並將其與聚類的原型特征進行多對一匹配 訓練數據。短而粗的線是從未知中提取的,長而細的線是通過多邊形近似聚集的段,作為原型(圖6)。分割字符的特征和完整字符的特征是不匹配的,但是將完整字符特征分為小部分的特征是非常匹配的。這說明通過小特征匹配能夠解決誤分割字符的情況。唯一的問題是,計算位置特征和原型之間的距離的計算代價是很高的。未知提取的特征用三維向量表示(x, y, angle),多邊形擬合的原型用四維向量表示(x, y , angle, length)。多邊形的長特征被分解成等長的較短片段,因此長度從特征向量中消除了,這在識別破損字符時增加了適應性。

 

特征距離:

 

 d是x,y坐標距離,θ是角度差。

相似性證據:

 

 常量k決定減小的速度。

當提取特征和原型匹配時,將Ef復制為Ep,這些和通過特征的數量Nf和原型長度的總和Lp歸一化,結果轉換為反向距離:

 

分類

分類分為兩個過程。首先,使用局部敏感哈希查找表(LSH)(解決像漢字這類大字符集數據問題),創建一個特征分類列表,未知特征可能會匹配。從一個粗量化的三維查找表中提取每個特征,對所有匹配位向量求和,和最高的特征(即最匹配的)作為下一步的列表。每個未知特征和可能匹配的原型特征進行位向量比較,計算他們之間的相似度。每個原型被表示為合理的乘積和(a logical sum-of-product expression),相似度計算排序了匹配的原型特征。距離計算過程會記錄每個特征以及每個原型中的總體相似性證據。最佳的綜合相似度,匯總了特征和相似性證據。

語言分析

選擇下列分類中最好的結果,最頻繁字,字典,數字,大寫字母,小寫字母,分類選擇字。最終的結果是選擇最小距離評分,雖然每個類乘上不同的常量。字符不同的分割可能得到不同的結果,即使有概率也很難直接比較這些字符。為每個字符分類生成兩個數字,第一個是置信度,是減去歸一化原型的距離得來的。第二個是評分,通過歸一化原型的距離乘上字符輪廓長度,因為一個字符的輪廓長度總是不變的。基線/x-height歸一化,可以防止偏高、偏低以及噪點干擾。字符矩形歸一化的主要好處是可以消除不同字體的寬高比和筆畫寬度影響。

自適應分類器

使用靜態分類器必須概況所有情況,因此對於字符、非字符的區分能力會下降。因此,通常使用靜態分類器識別出來的字符訓練更有區分能力的自適應分類器。自適應分類器和靜態分類器的顯著不同在於,使用的歸一化方法不同。自適應分類器使用各向同性基線/ x-height歸一化,靜態分類器通過質心(一階矩)對字符位置和二階矩對尺寸進行歸一化。基線/ x-height歸一化對大小寫字母有較好的區分度,可以抗噪聲,矩歸一化的優點是消除了字符寬高比和筆畫粗細的不同。

 

看完這篇概述,主要的啟發還是傾斜檢測的想法,利用連通域來分析擬合基線,還有大字符集利用了局部敏感哈希查找,選擇出近似的小字符集后再細化比較特征(犧牲精度和空間選擇出范圍,再從細顆粒度作區分)。分割部分的黏連分割和拼接沒有詳細的說明,也不是很理解具體是怎么實現的,大概是結合了識別置信度來選擇最佳分割點,還有固定間隔和比例間隔的判斷依據是什么。識別部分分類器的訓練方式以及長特征和短特征的匹配方式也不是特別理解。

 

轉載請注明出處。

 

圖像的矩歸一化的相關說明。

 

 參考資料:

https://blog.csdn.net/guzhenping/article/details/51023687 關於tesseract的博客。

https://blog.csdn.net/gdfsg/article/details/51015066圖像矩。

An Over view of theTesseract OCR Engine 論文。

Adapting the Tesseract Open Source OCR Engine for Multilingual OCR 論文。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM