提升Tesseract-OCR輸出的質量


https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality

如果你使用Tesseract不能獲得理想的輸出結果,可能會有很多原因。但是請記住,除非你使用一個非常罕見的字體,或者使用一種沒有被訓練過的新語言這些情況,重新訓練Tesseract不會有多大效果。

圖片處理

Tesseract在做真正的OCR之前,內部(使用Leptonica庫)先進行了各種圖片處理。一般來說,它這些准備工作做的不錯,但是不可避免的還是會有不足夠的地方,如果圖片處理不到位的話識別准確率也不會很高。

你可以在運行Tesseract的時候,設置配置變量tessedit_write_images=true,在輸出的日志中可以看到Tesseract是如何處理圖片的。如果返回的tessinput.tif文件看起來有問題,那么在OCR之前不妨進行一些手動的圖片處理。

修改比例(Rescaling)

如果圖片的DPI有300以上,Tesseract可以處理的很棒,所以如果DPI不夠,不妨調整比例。

二值化(Binarisation)

binarisation

也就是說,最好把圖片變為黑白圖片。Tesseract會在內部做這個事情(使用Otsu算法),但是處理結果可能不是最好的,特別是在背景顏色不算均勻暗色的時候。

如果你不能提供更好的圖片,你也可以使用不同的算法。比如ImageAutoThreshold(Java), OpenCV Image Thresholding(Python), scikit-image Thresholding(Python)的文檔。

去除噪點(Noise Removal)

noise

噪點,是圖片中那些隨機的暗色或者彩色點,這讓圖片中的文字更加難以閱讀。Tesseract的二值化處理步驟沒有辦法處理一些類型的噪點,這時候會讓解析精度驟降。

旋轉/偏移校正(Rotation / Deskewing)

skew-linedetection

歪曲的圖片,會導致頁面被掃描的時候不是筆直的。如果頁面太歪曲,Tesseract的行數分割不會很准確,這也會影響OCR的最終質量。

邊界(Borders)

掃描中的邊界移除

borders

被掃描的頁面,可能會有一些暗邊褶皺。這可能會導致提取一些額外的錯誤的字符。

缺少邊界

如果你想要OCR的文本區域沒有邊界,Tesseract可能會碰到問題。請看這個帖子,你也可以使用ImageMagick來增加一條邊界。

convert 427-1.jpg -bordercolor White -border 10x10 427-1b.jpg

透明度/Alpha通道

一些圖片格式(比如png),可能使用Alpha通道來提供透明度特性。

Tesseract3.x希望用戶在輸入給tesseract之前移除圖片的alpha通道。可以使用下面的命令:

convert input.png -alpha off output.png

Tesseract4.00開始,內部使用了leptonica的函數pixRemoveAlpha()來移除alpha通道:通過為alpha部分混入白色背景色來解決。在一些少見的情況下,這個方法可能會導致問題,用戶需要手動移除alpha通道。

工具/庫

例子

如果你想要知道如何使用程序來提升圖片質量,可以看看下面的例子:

頁面划分的方法

默認情況下,Tesseract會認為圖片是划分好的,會識別整個圖片。如果你只要對一個小塊區域進行OCR,請使用--psm參數。注意,為文本加入白色的border也有用,請看issue 398.

想要知道Tesseract支持的所有頁面分割模式,請使用命令tesseract -h:

0    Orientation and script detection (OSD) only.
1    Automatic page segmentation with OSD.
2    Automatic page segmentation, but no OSD, or OCR.
3    Fully automatic page segmentation, but no OSD. (Default)
4    Assume a single column of text of variable sizes.
5    Assume a single uniform block of vertically aligned text.
6    Assume a single uniform block of text.
7    Treat the image as a single text line.
8    Treat the image as a single word.
9    Treat the image as a single word in a circle.
10    Treat the image as a single character.
11    Sparse text. Find as much text as possible in no particular order.
12    Sparse text with OSD.
13    Raw line. Treat the image as a single text line, 
                bypassing hacks that are Tesseract-specific.

字典,單詞列表以及模式

默認情況下,Tesseract被優化為識別單詞組成的句子。如果你想要識別一些其它的模式,比如收據,價格列表,或者代碼。可以使用一些方法來提高識別率,比如選用合適的文本分割方法。

如果你要識別的文本都不是字典中的單詞,禁用Tesseract的字典功能可以提升識別准確率。可以通過同時設定配置load_freq_dawg=false & load_system_dawg=false來禁用字典。

另外,也可以為Tesseract的單詞列表加入一些新的詞,來幫助提升識別准確率。或者可以加入通用的字符模式,如果你對你的輸入模式有了解,這種方式可以大幅提升准確率。更多詳情請參考Tesseract手冊.

如果你知道,只會碰到語言中的一部分子集,比如只有數字,你可以使用配置tessedit_char_whitelist.


免責聲明!

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



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