經過測試和檢查tesseract3.01的源代碼,tesseract 3.01不支持多語言多字體OCR識別。
Tesseract3.01版本不支持新訓練的數據,也不支持通過添加原字符集的方式聯合使用多個訓練庫。
如何使用tesseract進行多語言或多字體識別?
壹種方法是自己訓練字符集,把所有字體和語言的訓練數據放到壹個訓練數據文件裏。可惜這種方法需要龐大的訓練樣本數據,工作量大,而且拋棄了原有的google訓練庫。
另壹種方法是將宇宙魔方升級到3.02版本。目前3.02版本還沒有發布,需要下載源代碼,自己編譯生成。宇宙魔方3.02支持多個訓練庫的聯合使用,這樣就可以支持多語言多字體的識別,而且宇宙魔方3.02的固有數據集要增加大量的樣本,因為它的體積比3.01版本的數據文件大很多。
介紹了采用tesseract開源OCR引擎進行多語言OCR識別的原理和算法。這裏我記錄下我對這篇文章的理解。
OCR字符識別的熱點趨勢:
拉丁語->;中文、日文、韓文-& gt;阿拉伯語-& gt;印地語
這些語言各有特色。
漢字和日語:有壹些相同的字符,但字符有成千上萬的形狀和結構。
韓文:自身獨特的文本結構,且數量較多。
阿拉伯語:字母寫在壹起,字母位置不同,形狀也不同。
印地語:將字符連接起來,形成數以千計的形狀來代表不同的音節。包含了阿拉伯語和韓語面臨的問題。
漢字、朝鮮語和印地語都有偏旁部首和詞根的結構。漢字與朝鮮語相比,字根在不同的字裏,形狀也不固定,往往與其他部首連寫。印地語更復雜。
另壹篇文章介紹了拉丁字符識別。下面是壹些沒有提到的想法和問題。
1.分析連通區域後,找出blob,即單個字母塊。
2.線檢測。使用等間距檢測和分割算法,包括識別單詞和字母之間的空白差異。
3.識別單個字符,對初始識別效果差的字符進行切分和關聯。對於許多可能性,使用字典距離計算來選擇最佳可能性。
4.多次識別:將識別效果好的字符作為訓練樣本,對其他不好的字符進行再次識別。(自適應分類器)
問題:
通常,字母是單個連通區域,但也有例外。壹個字母有多個相連的區域或嵌套的孔,例如壹個圓圈中有壹個C或R的字符。
-
文章的構成:
1.水平、垂直和混合排列
宇宙魔方最初支持水平排列的處理。如果處理各種排列,宇宙魔方需要考慮更多的特征檢測。
段落縮進的檢測;字符間距檢測(垂直字符的中值間距小於字符的平均大小);文本行(列)檢測
另外,對於豎排占多數的頁面,可以旋轉90度,使大部分文字轉化為橫排,降低豎排的誤檢率。
混合排列是存在的,在各種角色中都很常見,所以宇宙魔方要處理這些情況。
2.文本行和列檢測
線路檢測算法:
每行文字中字符的直接間距比較小,壹般比行距小,壹般字符大小也差不多,除了壹些特殊位置的字符。使用此功能,相鄰的字符串被連接起來形成壹條線。多條線形成後,還有多條平行線,多條平行線形成壹個模塊。
不同平行線形成的排版可以分割整頁。
行檢測完成後,您可以檢測行中的單個字符。對於拉丁文字來說,空格是最小識別單位的特征,而有些語言的空格特征並不明顯,比如漢字,字與字之間沒有空格的區別,詞根之間也有空格。把壹個連通區域作為壹個獨立的識別單元,這種識別方法缺乏整體識別能力,比如字典。壹種解決方案是首先識別標點符號,但對於長句,仍然有局限性。
如果有混合語言,字符的大小特征可能會有所不同,比如拉丁文和漢字。這需要不同的語言字符和不同的過濾閾值。
3.西裏爾文古斯拉夫語,類似俄語,小寫字母x的高度估計。
拉丁字符檢測方法不適用於此語言。
俄羅斯探測需要應用其他特征。我對這裏的俄語不太熟悉,就忽略了。
4.單詞和短語的識別
包括分割、搜索和形狀分類。
字母語言的識別不同於象形文字的識別。象形文字的界限不像字母表那樣清晰。
對於象形文字之間的關聯,tesseract使用最佳優先搜索法在字典中查找匹配的單詞,這比字母單詞搜索需要更深的搜索層次。
形狀分類
線寬和線長可以作為字符的形狀特征。對於壹個詞或字,可以先做壹個粗略的分類,選擇幾個近似的分類,然後再做壹個細致的分類,從候選類別中選出可能的類別。
6.上下文關聯的後處理
字典搜索