私は、PDF 形式で保存されているテキストの科学論文を抽出するプロジェクトに取り組んでいます。ほとんどの論文では、これは PDFMiner を使用して非常に簡単に実行できますが、一部の古い論文ではテキストが大きな画像として保存されます。基本的に、紙がスキャンされ、その画像ファイル (通常は PNG または JPEG) がページ全体を構成します。
Python-tesseractバインディングを介してTesseractエンジンを使用してみましたが、結果は非常に残念です。
このライブラリに関する質問に飛び込む前に、OCR ライブラリに関する提案を受け付けていることを述べたいと思います。ネイティブの python ソリューションはほとんどないようです。
これは、テキストを抽出しようとしているそのような画像 (JPEG) の 1 つです。上記でリンクした python-tesseract Google コード ページのサンプル スニペットで提供されている正確なコードです。ドキュメントが少しまばらであるため、コード内の多くのオプションの 1 つが正しく構成されていない可能性が非常に高いことに注意してください。アドバイス (または詳細なチュートリアルへのリンク) をいただければ幸いです。
OCRでの私の試みからの出力は次のとおりです。
私の質問は次のとおりです。
- 私が使用しているコードに次善のものはありますか? これを行うより良い方法はありますか?おそらく別のライブラリですか?
- 検出を改善するためにどのような前処理を実行できますか? 画像はすべて白黒ですが、おそらくしきい値を設定し、それより上にあるものを単一値の黒色に設定し、それより下にあるものをヌル値の白色に設定する必要がありますか? 他に何か?
- より具体的な質問: 単一の単語に対して 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()
これら 2 つのスニペットの違いを説明できる人はいますか?