23

私は、PDF 形式で保存されているテキストの科学論文を抽出するプロジェクトに取り組んでいます。ほとんどの論文では、これは PDFMiner を使用して非常に簡単に実行できますが、一部の古い論文ではテキストが大きな画像として保存されます。基本的に、紙がスキャンされ、その画像ファイル (通常は PNG または JPEG) がページ全体を構成します。

Python-tesseractバインディングを介してTesseractエンジンを使用してみましたが、結果は非常に残念です。

このライブラリに関する質問に飛び込む前に、OCR ライブラリに関する提案を受け付けていることを述べたいと思います。ネイティブの python ソリューションはほとんどないようです。

これは、テキストを抽出しようとしているそのような画像 (JPEG) の 1 つです。上記でリンクした python-tesseract Google コード ページのサンプル スニペットで提供されている正確なコードです。ドキュメントが少しまばらであるため、コード内の多くのオプションの 1 つが正しく構成されていない可能性が非常に高いことに注意してください。アドバイス (または詳細なチュートリアルへのリンク) をいただければ幸いです。

OCRでの私の試みからの出力は次のとおりです

私の質問は次のとおりです。

  1. 私が使用しているコードに次善のものはありますか? これを行うより良い方法はありますか?おそらく別のライブラリですか?
  2. 検出を改善するためにどのような前処理を実行できますか? 画像はすべて白黒ですが、おそらくしきい値を設定し、それより上にあるものを単一値の黒色に設定し、それより下にあるものをヌル値の白色に設定する必要がありますか? 他に何か?
  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()

これら 2 つのスニペットの違いを説明できる人はいますか?

4

2 に答える 2

12

Tesseract は、少しいじれば、きれいな入力テキスト (あなたの例のように) に非常に適しています。いくつかの提案:

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

ここに戻って、さらに支援できるかどうかを確認しますが、tesseract メーリング リストに参加してください。本当に役に立ちます。

補足 - API を介して文字と信頼度と単語を取得するために公開すべき pytesseract のパッチがいくつかあります (数か月前にはできませんでした)。それらが役に立つかどうか叫んでください。

于 2012-07-26T22:20:28.333 に答える
6

最初の例では、ファイルをバッファーとして読み取り、変更を加えずに tesseract-ocr に中継します。2 番目の例では、ファイルを opencv 形式に読み取ります。これにより、アスペクト比、グレー スケールの変更などの画像修正を行うことができます。 cv ライブラリを使用してなど。2 番目の方法は、画像を tesseract に渡す前に画像操作を行いたい場合に非常に便利です。

ところで、私は python-tesseract の所有者です。質問したい場合は、いつでも質問をhttp://code.google.com/p/python-tesseractに転送してください。

ジョー

于 2012-08-13T17:55:11.590 に答える