2012-07-25 17 views
21

私は、PDF形式で保存されたテキストの科学論文を抽出するプロジェクトに取り組んでいます。ほとんどの論文では、これはPDFMinerを使って非常に簡単に行えますが、古い論文の中にはテキストを大きなイメージとして保存するものがあります。本質的には、紙がスキャンされ、その画像ファイル(通常はPNGまたはJPEG)がページ全体を構成します。複数段落スキャンでのOCRパフォーマンスの改善

私はTesseractエンジンを使ってそれをpython-tesseractバインディングで試しましたが、結果はかなり残念です。

私はこのライブラリで質問をする前に、OCRライブラリの提案を受け付けています。ネイティブのPythonソリューションはほとんどないようです。

Hereは、テキストを抽出しようとしているそのような画像(JPEG)です。私は上記のpython-tesseract googleコードページのサンプルスニペットで提供されている正確なコードです。私はドキュメントが少し疎であることを言及する必要があるので、私のコードの多くのオプションの1つが誤って構成されている可能性があります。どんなアドバイス(または詳細なチュートリアルへのリンク)も大歓迎です。

Hereは、OCRで試した結果です。次のように

私の質問は以下のとおりです。

  1. は、私が使用しているコード内の次善のものはありますか?これを行うより良い方法はありますか?おそらく別の図書館でしょうか?
  2. 検出を改善するためにどのような前処理を実行できますか?画像はすべてB & Wですが、しきい値を設定してその上に何かを単一値の黒色に設定し、その下のすべてをヌル値の白色に設定する必要がありますか?他に何か?
  3. より具体的な質問:単一単語でOCRを実行するとパフォーマンスが改善できますか?もしそうなら、誰も画像ファイル(例えば、上にリンクされたもの)内の単一の単語を区切り、それらを独立して扱うことができる別々の画像に抽出する方法を提案することができますか?
  4. PDFページ画像に埋め込まれたグラフや他の画像がOCRに干渉することはありますか?私はこれらを取り除くべきですか?もしそうなら、誰も自動的にそれらを削除する方法を提案できますか?

EDIT: 簡単にするために、ここで私が使用したコードです。

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() 

誰でもこの2つのスニペットの違いを説明できますか?

答えて

12

Tesseractは、ちょっと変わった場合、あなたの例のようにきれいな入力テキストにとても良いです。いくつかの提案:自動化する前に

  • 、(例えばでは/ usr/local/share/tessdata /コンフィグで見てください可能であれば、あなたのキャラクターが設定制限コマンドライン
  • でたTesseractで始まります。/数字 - 英語の大文字/小文字などを設定する)
  • JPGがアーチファクトを導入するため、PNGまたはTIFF画像(旧バージョンのTIFF)のみを使用する
  • 画像をアップサンプリングしてください現在の小さなフォントよりも大きいです。 Tesseract lines> 10ピクセルの高さの文字(メモリが使用されている場合)、確かに小さな文字で悪化します
  • バイレベルであればしきい値処理を行う必要はありませんが、 tesseractと同じ画像が表示されます

私はもっと助けてもらえますか?tesseractメーリングリストに参加するかどうかを確認します。本当に役に立ちます。

追記 - 私はどの私は文字に(数ヶ月戻っことができませんでした)APIを経由して&信頼度&の単語を取得するために公開するべきpytesseractのためのいくつかのパッチを持っています。役に立つかもしれないと叫ぶ。

+0

Ozvaldに質問を転送するために歓迎でき、素晴らしいアドバイス、ありがとう!私はあなたのコードをチェックアウトすることに本当に興味があります。 githubリポジトリなどがありますか?画像ファイルの種類については、JPEG画像をPNG形式に変換することは許容されていますか、それともすでに行われている損傷ですか?私は遭遇したPDFの多くが内部的にJPEGとして画像を保存しているので、私は尋ねます。問題が損失圧縮の1つであれば、私は私が持っているものにこだわっています。 – blz

+1

github repoはありません、私にメールを送ってください(ianzsvald comのian)、私はそれを掘り出します(私は実際にそれをgithubに...)。 –

+0

JPEGの場合は、余分なアーチファクトを追加しないようにTIFFとして保存します。ノイズを追加することは、避けたいものです。 –

6

最初の例では、ファイルをバッファとして読み込み、変更を加えずにtesseract-ocrにリレーし、2番目のファイルをopencv形式に読み込み、アスペクト比を変更するようなイメージタッチを可能にします、グレースケールなどのcvライブラリを使用しています。 2番目の方法は、イメージをtesseractに渡す前にイメージ操作を行いたい場合に非常に便利です。

私はpython-tesseractの所有者です。 uは質問をしたい場合は、常にhttp://code.google.com/p/python-tesseract

ジョー

+0

清算のためにあまりにもありがとう。私は実際にopencvがどこに来たのか疑問に思っていました!ありがとうございました! – blz

関連する問題