Tesseract OCR 引擎概述


Ray Smith
摘要
Tesseract OCR引擎,最初是HP在UNLV第四次OCR精度測試年會上提出的一個研究原型,本文對此作一個綜合性的概述。文中會對OCR引擎中一些新奇可不同尋常的地方加上強調標記,包括行發現,特徵/分類方法,自適應分類器

1. 引言——動機和歷史
Tesseract是一個開源的OCR引擎,最初由HP在1984到1994年開發,它在1995年UNLV的OCR精度測試年會上橫空出世,驚豔全場,之後又迅速消失在人們的視野中 。至到現在有關它的架構和算法細節才第一次被披露出來
Tesseract最初是HPBristol 實驗室的一個博士研究項目,因爲可能可以爲HP的平板掃描儀提供一個軟件或硬件的附加物,該項目獲得了快速的發展。而當時商業的OCR引擎還處於起步階段,除了對高質量的印刷品外,其他文本都不能識別。這給了他們很大的動力。
在HP的Bristol實驗室和HP在科羅拉多的掃描儀部門進行了一個聯合項目之後 ,Tesseract在精度上已經大大領先於商業引擎,但是還是沒有變成一個獨立產品。它下一個階段的開發又回到了Bristol實驗室,開始研究OCR在壓縮上的應用。主要的工作是改進拒絕高效而不是基礎的識別精度 。這個項目的後期,在1994年底,開發完全停止。引擎送往UNLV參加 1995年的OCR精度 測試年會,在那它證明了在對抗當時商業引擎方面的價值。到2005年,HP將tesseract開源,現在可以從http://code.google.com/p/tesseract-ocr上獲得

2. 架構
因爲HP有一個獨立的頁佈局分析技術(已經應用在產品中因此沒有開源),tesseeract從來不需要它自己的頁分析邏輯。tessearact因此假定它的輸入是一個二進制的圖像,可以附帶一個多邊形的區域定義
處理過程遵循傳統的一步一步處理,但是某些階段在當時是很不尋常的,有些可能到現在也是如此。第一步是連通組件分析,在這一步組件的輪廓被存儲下來。這在當時 是一個很耗計算資源的設計方案,但是有一個非常大的好處:對輪廓及子輪廓、孫輪廓數量的遞歸檢測,將會使文本的反轉和識別,像黑底白字文本一樣容易。tesseract可能是第一個可以輕鬆處理黑底白字的OCR引擎,在這個階段,輪廓將被聚合在一起,放到Blob中
Blob組織成文本行,分析這些行和區域以決定是等寬文本還是比例文本。文本行根據字符空間類型,分割成不同的單詞。等寬文本根據字符單元被立即分割,比例文本將根據固定空格和模糊的空格進行分割
之後是識別,分成兩次處理。第一次,嘗試輪流識別出每一個單詞,每一個滿意的單詞都被傳給一個自適當分類器作爲一個訓練數據,這樣自適應分類器將有機會在該頁的後面得到更精確的識別結果
因爲這種自適應分類器學到的有用東西可能對頁面頂部的內容來說太遲了,所以需要對整個頁面再運行一次識別過程,前一次識別不太好的單詞會在這次重新識別
最後階段是解決模糊空格,檢查對x-高度的另一種假定來定位小字母文本

3. 行和單詞發現
3.1 行發現
行發現算法是tesseract之前已經公開的少數幾個算法之一[3],這個算法可以處理傾斜的頁面,而不需要將傾斜頁面進行校正,因此不會損失圖像的質量。這一過程的關鍵是Blob過濾和行建構。
假設頁佈局分析已經提供了一個文字大小大致相同的文本區域,一個簡單的百分比高度過濾器去除掉下沉的字母以及垂直方向上互相接觸的字符。中間高度近似於這個區域文本的大小,所以過濾掉比中間高度的片斷更小的Blob是安全的,它們更可能是標點符號、變音符號和噪音
過濾後的Blob更可能擬合到一個無重疊的,平行但傾斜的線的模型。把這些塊按x座標排序並處理,使它可能將一些塊指派到唯一的行。文本行可以跟蹤整個頁的傾斜,這將大大減小在頁面傾斜時將Blob指定到錯誤文本行的風險。一旦這些過濾後的Blob已經被指定到了行,就可以用最小中位數平方法來估算基線,那些被過濾掉的塊會被重新安排到合適的行
創建行的最後一個步驟,是合併水平方向上重疊至少一半的塊,將變音符和正確的基線放在一起,和將破碎的字符正確相聯在一起

3.2 基線擬合
一旦文本行已經被發現,就可以用二次樣條法來擬合出更精確的基線。這是一個OCR系統 的另外一個首創,這使得Tesseract可以處理帶彎曲基線的頁面,這通常是掃描過程中人爲的影響,而不僅僅是因爲書籍裝訂的原因
基線擬合依據的是將Blob分區成組,用一個合理的、連續線代替原來筆直的基線。使用最小中值平方法來擬合二次樣條到最稠密的區域(假定是基線)。二次樣條有一個好處是計算相當穩定,但是壞處是要求多個樣條段時,會出現不連續性。一個更傳統的三次樣條可能會更好
圖1 一個擬合的彎曲基線
圖1顯示了一個文本行的例子,這個文本行帶有一個擬合的基線,下行,中值行和上行。所有這些行是平行的(在整個長度之上y間距是一個常量,)並且輕微的彎曲。上行線是藍綠色(印刷得有點灰)其上的黑線實際上是直的。仔細觀察可以看到,藍綠線/灰線相對於其上的黑線是彎曲的

3.3 等寬字符檢測和分割
Tesseract檢測文本行來判斷它們是不是等寬字符。一旦它發現了等寬文本,Tesseract用固定的寬度把單詞分割成一個個字符,並且在單詞識別階段不再進行分割與聚合操作。圖2顯示了一個典型等寬單詞的例子

3.4 非等寬單詞發現
非等寬或比例文本的分隔是一個非常艱鉅的任務。圖3顯示了一些典型的問題。圖中'ned'和'11.9%'之間的間隔和一般的間隔大小相同,而比“erated'和'junk'之間的間隔則要大得多,而‘of’和‘financial'之間則完全沒有水平間隔。Tesseract在基線與平均線之間一個有限的垂直範圍內,測量字符間隔,以此來解決大多數的這類問題。這一階段,那些接近閾值的間隔就會產生一些模糊,所以只有在單詞識別之後,才能做出一個最終的決定

4. 單詞識別
任何字符識別引擎識別過程的一部分工作,就是找出一個單詞應該如何分割成字符。在行發現中最初的分割輸出被首先進行分類,單詞識別的剩餘步驟只對非等寬文本適用

4.1 分割相連字符
當一個單詞的識別結果(參見第6部分)不令人滿意時,Tesseract將嘗試改進結果:以字符分類器中最不可信的結果來對Blob進行分割,候選的分割點可以從輪廓的多邊形近似圖的凹頂點中選取,可能有相反的凹頂點,或者一個線段。要成功地從ASCII集中分割一個連接在一起的字符,它可能佔用3對分割點才能成功
圖4用箭頭標示了一組候選的分割點,以及選擇的點,這些點作一條線穿過r和m輪廓線
分割執行的優先級較高。任何沒有改進結果可信度的分割將被恢復,但並不是完全丟棄,這樣分割可以在後面聚合過程如果需要的話,可以被重複使用

4.2 聚合分散的字符
當分割的潛能已經挖掘完,如果這個單詞還是不夠好,它就會被傳給聚合器。聚合器開始一個A*搜索(最佳優先搜索),對最大化分割的blob組合成可能的字符圖形片段。它做這些並沒有實際建立片斷圖,但是維護一個可訪問狀態的hash表。A*搜索過程靠從一個優先級隊列中抽取候選的新狀態,並且依靠對它們非分類的段組合進行分類,對它們進行評估
這種完全分割-聚合的方法是以最低的效率,以最壞的傾向來錯過重要的分割,這可能是這種情況。好處是:這種分割-聚合方案簡化了數據結構,這種數據結構在維護全段圖時被要求
1989年A*分段搜索第一次實現時,Tesseract在破損字符上的準確度大大超過了商業引擎。圖5是一個典型的例子。這一成功的本質是字符分類器可以輕易識別出破損的字符

5. 靜態字符分類
5.1 特徵
Tesseract早期的版本使用拓撲特徵,這是從Shilman. al.[7-8]的工作發展而來。雖然它可以與字體與大小無關,這些特徵對真實生活中圖片仍不夠健壯,如Bokser在[9]描述的那樣。一箇中間方案是引入近似多邊形分段作爲特徵,但這種方法對破損的圖像也不夠健壯,例如,在圖6(a)中,右邊的字符是分成兩邊的,但是在圖6(b)中,只有單獨的一片
終極的解決方案是:那些未知圖像的特徵不需要和訓練數據中的已知特徵相同。在訓練過程中,近似多邊形的分段被用作特徵項,但是在識別時,小的,固定長度(以統一的單位)的特徵從輪廓 中抽取出來,並匹配多對一而不是一簇訓練數據中的原型。在圖6(c)中,短粗線代表從未知圖像中抽取出來的特徵,而細長的線代表作爲原型的近似多邊形的一簇片斷。一個帶兩片的原型是完全不匹配的。三個特徵在一側,而二個特徵在另一側是不匹配,但是,撇開這些不看,每一個原型和每一個特徵是非常匹配的。這個例子顯示 ,小特徵匹配大原型過程,是可以很容易 複製 到破損圖像的識別中。它的主要問題是:計算一個原型與未知原型之間的距離,非常耗計算資源
從未知中抽取的特徵因此是三維的(x,y位置和角度),一個字符一般有50-100個特徵,而原型特徵有4個維度(x,y位置,角度 ,長度),一般一個原型配置有10-20個特徵

5.2 分類
分類 過程是一個二步過程。第一步,一個類修剪器創建一個可能匹配字符的短名單。每一個特徵,從一個粗糙的3維查找 表中,獲取一個類的 比特向量,代表它可能匹配的類,之後這個比特向量在所有特徵上累計,得到最高分的類(在修改了特徵的期望值之後)變成一個短名單,傳給下一步
每個未知 的特徵查看一個給定類原型的比特向量它可能匹配的。然後計算一個實際 的相似度,每一個原型字符 類用一個邏輯產器總數 代表,表示每一個術語,叫一個配置。所以距離 計算過程保持了一個總相似度的證據,也就是每個原型。最佳的距離 ,是最好的

5.3 訓練數據
因爲分類 器能輕易識別破損的字符,分類器沒有在破損字符上進行訓練。事實上,分類器只在僅僅94個字符的20個上進行了訓練,從8個字體,相同的大小,但帶有4個屬性(正常,粗體,斜體,粗斜體),生成了總共60160個訓練樣本。相比於其它已公開的分類器來說,這一點非常有意義,如Calera分類 器使用了超過一百萬的樣本,而Baird的100種字體分類器則使用了1175000個訓練樣本

6 語言分析
Tesseract中語言分析相對較小。單詞識別模塊無論何時都被認爲是一個新的分段,語言模塊(換碼器的一個錯誤命名)選擇最可能的單詞字符串在下面的分類 :最頻繁單詞,字典單詞,數字單詞,大寫字母單詞,小寫字母單詞,分類器選擇單詞。對一個給定的分段最終的選擇是擁有最低的總距離比例,每一個之上的分類 都被乘一個不同的常數
來自不同分段的單詞可能有不同數目的特徵,它很難直接比較這些單詞,即使一個分類 器聲稱是產品概率,而Tesseract不是。這個問題在Tesseract中靠創建兩個數字爲每一個字符分類來解決。首先,是減去一個正則化的距離 從原型中,這使得它是可信的在更大的場景,但是還是一個距離 ,第二個輸出,叫作比例,乘以正則化距離 。一個單詞中的字符比例可以是有意義的,因爲一個單詞中所有字符總的輪廓 長度總是相同的

7. 自適應分類器
文獻[11]和[12]中建議,OCR引擎可以通過使用自適應分類器來獲益。因爲統計分類器必須對所有字體都是好的,它對不同字符的識別或字符與非字符的識別能力被減弱。一個字體敏感的自適應 分類器是由統計分類器輸出訓練的,通常可以獲得更大的識別率在一個文檔內,在那字體 的數量 是有限的
Tesseract並不使用一個模板分類 器,但是使用和統計分類器相同的特徵和分類 器。統計分類 器和自適應分類 器唯一顯著的區別在於,自適應 分類器使用各向同性的基線/x高度規一歸,而統計分類 器使用位置的幾何中心來歸一化字符,第二次使用各向異性大小來歸一化
基線/x高度歸一化使得區分大小寫字符更容易,同是也改進了對噪聲斑點的抗干擾。字符瞬間歸一化的主要好處是字體方面比例的移除和字體寬度。它也下標和上標識別更容易 ,但是要求 另外的分類特徵來區分上標和下標字符。圖7顯示了一個3字符的例子對比了基線/x高度歸一化和瞬間歸一化

8. 結果
Tesseract以”HP實驗室OCR“身份參加了第4次UNLV年度OCR精度測試,但是自那之後代碼已經作了很大的修改,從轉到Unicode字符集到再訓練。表1比較了一個最近的Tesseract版本和最初1995年的結果。全部4個300DPI二進制測試集顯示如下,列了錯誤數,錯誤率和百分比變化率。更新的結果可以參考http://code.google.com/p/tesseract-ocr

9. 結論與後續工作
在沉寂了十多年之後,Tesseract在它的精確度方面現在在領先的商業引擎之後。它的主要力量可能是它的不同尋常的特徵選擇。它的主要弱項可能 是它使用了多邊形近似作爲分類器的輸入,而不是原始的輪廓
隨着國際化進程,隨着隱馬爾可夫模型的字符n-gram模型的加入,精度可能被大幅提高,同時也可能使用一個改進的分割器

10. 鳴謝
感謝John Burns和Tom Nartker在使Tesseract開源過程作的努力,感謝UNLV的ISRI組分享了他們的工具和數據,還有Luc Vincent, Igor Krivokon, DarShyang Lee和Tomas Kielbus對這篇文章的指點

11. 參考文獻
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章