2012-07-25 46 views
21

我正在研究一個涉及提取以PDF格式存儲的文本科學論文的項目。對於大多數論文來說,使用PDFMiner可以很容易地完成這項工作,但一些較早的論文將其文本存儲爲大圖片。本質上,掃描一張紙並且該圖像文件(通常是PNG或JPEG)包括整個頁面。在多段落掃描中提高OCR性能

我嘗試使用Tesseract引擎通過它的python-tesseract綁定,但結果相當令人失望。

在深入討論我對這個圖書館的問題之前,我想提一下,我願意提供關於OCR庫的建議。似乎很少有本地的Python解決方案。

Here是我試圖提取文本的一個這樣的圖像(JPEG)。我在上面鏈接到的python-tesseract google代碼頁上的示例代碼片段中提供了確切的代碼。我應該提到文檔有點稀疏,所以很可能我的代碼中的許多選項之一被錯誤配置。任何建議(或深入教程鏈接)將不勝感激。

Here是我對OCR的嘗試的輸出。

我的問題如下:

  1. 有什麼不理想在我使用的代碼?有沒有更好的方法來做到這一點?不同的圖書館可能?
  2. 我可以通過什麼樣的預處理來改善檢測?這些圖像都是B & W,但是我應該設置一個閾值並將其設置爲單值黑色,並將其下的所有值設置爲空值白色?還要別的嗎?
  3. 更具體的問題:可以通過在單個單詞上執行OCR來提高性能?如果是這樣,任何人都可以提出一種在圖像文件(例如:上面鏈接的那個)中劃分單個單詞的方法,並將它們提取到可以獨立處理的單獨圖像中?
  4. 嵌入在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() 

任何人都可以解釋這兩個片段之間的區別嗎?

回答

12

如果你修補了一下,Tesseract對於乾淨的輸入文本(如你的例子)非常好。一些建議:

  • 自動化之前,先從正方體在命令行
  • 限制你的性格,如果可能的設置(例如需要在/ usr/local/share下/ tessdata /在CONFIGS看看。/ digits - 將其配置爲英文字符大寫/小寫字母等)並將其作爲命令行參數提供
  • 僅使用PNG或TIFF圖像(舊版本的TIFF)作爲JPG引入僞像
  • 將圖像上樣以使文本比當前的小字體大。 Tesseract lines> 10個像素的高字符(如果內存服務的話),它確實對小字符表現更差
  • 如果你已經是雙層的話,不需要進行閾值處理,但如果你確實看到它並不會受到傷害,與tesseract相同的圖像將會看到

我會在這裏查看看看我能否幫助更多,但請加入tesseract郵件列表,他們真的很有幫助。

旁註 - 我有一些針對pytesseract的補丁,我應該發佈這些補丁以獲得通過API獲得的字符&的信心&(這在幾個月前不可能實現)。如果他們可能有用,大聲喊叫。

+0

Ozvald,真棒意見,謝謝!我真的很想檢查你的代碼。你有一個Github倉庫或什麼?關於圖像文件類型,是否可以將JPEG圖像轉換爲PNG圖像,還是損壞已經完成?我問,因爲我遇到的許多PDF都將圖像作爲JPEG存儲在內部,所以如果問題是有損壓縮問題之一,那麼我有點卡在我所擁有的內容中。 – blz 2012-07-27 15:03:39

+1

沒有github回購,給我發郵件(ian在ianozsvald com),我會把它挖出來(我真的出來給github它......)。 – 2012-07-27 18:45:35

+0

如果它已經是JPEG格式,那麼我會將它保存爲TIFF格式,以避免添加任何*額外*文物。增加額外的噪音是你想要避免的。 – 2012-07-27 18:46:21

6

第一個示例將文件讀取爲緩衝區,然後將其中繼到tesseract-ocr而不進行任何修改,而第二個示例將文件讀入opencv格式,然後您可以執行一些圖像修改,如更改寬高比,灰度等使用cv庫。第二種方法是非常有用的,如果你想在將圖像傳遞給tesseract之前進行圖像處理。

順便說一下,我是python-tesseract的擁有者。如果妳想要問的問題,你可以隨時歡迎您的問題轉發給http://code.google.com/p/python-tesseract

+0

非常感謝您的澄清。我真的想知道opencv在哪裏出現了!我會提出任何我有你的問題,謝謝! – blz 2012-08-31 18:11:50