我正在研究一個涉及提取以PDF格式存儲的文本科學論文的項目。對於大多數論文來說,使用PDFMiner可以很容易地完成這項工作,但一些較早的論文將其文本存儲爲大圖片。本質上,掃描一張紙並且該圖像文件(通常是PNG或JPEG)包括整個頁面。在多段落掃描中提高OCR性能
我嘗試使用Tesseract引擎通過它的python-tesseract綁定,但結果相當令人失望。
在深入討論我對這個圖書館的問題之前,我想提一下,我願意提供關於OCR庫的建議。似乎很少有本地的Python解決方案。
Here是我試圖提取文本的一個這樣的圖像(JPEG)。我在上面鏈接到的python-tesseract google代碼頁上的示例代碼片段中提供了確切的代碼。我應該提到文檔有點稀疏,所以很可能我的代碼中的許多選項之一被錯誤配置。任何建議(或深入教程鏈接)將不勝感激。
Here是我對OCR的嘗試的輸出。
我的問題如下:
- 有什麼不理想在我使用的代碼?有沒有更好的方法來做到這一點?不同的圖書館可能?
- 我可以通過什麼樣的預處理來改善檢測?這些圖像都是B & W,但是我應該設置一個閾值並將其設置爲單值黑色,並將其下的所有值設置爲空值白色?還要別的嗎?
- 更具體的問題:可以通過在單個單詞上執行OCR來提高性能?如果是這樣,任何人都可以提出一種在圖像文件(例如:上面鏈接的那個)中劃分單個單詞的方法,並將它們提取到可以獨立處理的單獨圖像中?
- 嵌入在PDF頁面圖像中的圖形和其他圖像是否會影響OCR?我應該刪除這些嗎?如果是這樣,任何人都可以提出一種方法來自動刪除它們?
編輯: 爲簡單起見,這裏是我使用的代碼。
import tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
mImgFile = "eurotext.jpg"
mBuffer=open(mImgFile,"rb").read()
result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api)
print "result(ProcessPagesBuffer)=",result
這裏是可選的代碼(其結果在這個問題中沒有顯示,雖然性能看起來非常相似)。
import cv2.cv as cv
import tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
image=cv.LoadImage("eurotext.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
tesseract.SetCvImage(image,api)
text=api.GetUTF8Text()
conf=api.MeanTextConf()
任何人都可以解釋這兩個片段之間的區別嗎?
Ozvald,真棒意見,謝謝!我真的很想檢查你的代碼。你有一個Github倉庫或什麼?關於圖像文件類型,是否可以將JPEG圖像轉換爲PNG圖像,還是損壞已經完成?我問,因爲我遇到的許多PDF都將圖像作爲JPEG存儲在內部,所以如果問題是有損壓縮問題之一,那麼我有點卡在我所擁有的內容中。 – blz 2012-07-27 15:03:39
沒有github回購,給我發郵件(ian在ianozsvald com),我會把它挖出來(我真的出來給github它......)。 – 2012-07-27 18:45:35
如果它已經是JPEG格式,那麼我會將它保存爲TIFF格式,以避免添加任何*額外*文物。增加額外的噪音是你想要避免的。 – 2012-07-27 18:46:21