1

非常に多数の PDF を OCR 処理するプロジェクトに取り組んでいます。各 PDF は、通常のオフィス タイプのドキュメントのイメージです。各 PDF ページは個別のファイルに保存されます。現在のアプローチよりも高速に (つまり、計算時間を短縮して) これを行う方法はありますか?

この規模のプロジェクトでは、わずかなパフォーマンスの改善が計算コスト/時間の大幅な削減につながります。現在、Tesseract の呼び出しには、プロジェクトの他のすべての処理ステップよりも約 2 ~ 3 桁多くの時間がかかります。

各ファイル (page.pdf) について、まず Tiff (image.tiff) に変換します。わかりやすくするために、この呼び出しから Python を取り除きました。

ghostscript -o image.tiff -q -r300x300 -sCompression=none -sDEVICE=tiffgray page.pdf

次に、基本的に次の手順を実行します。

def ocr( image ):
    import tesseract, cv2.cv as cv

    # Load Tesseract
    api = tesseract.TessBaseAPI()
    api.Init(".","eng",tesseract.OEM_DEFAULT)
    api.SetPageSegMode(tesseract.PSM_AUTO)

    # Load and OCR the image file 
    cv_image = cv.LoadImage(image, cv.CV_LOAD_IMAGE_GRAYSCALE)
    tesseract.SetCvImage(cv_image, api)

    # Return the text
    return api.GetUTF8Text()

わかりやすくするために、少し単純化しました。たとえば、実際にはファイルごとに Tesseract を個別にロードすることはありません。私は例外などを処理します。ただし、使用される時間の 99.9% は api.GetUTF8Text() 呼び出しにあるため、違いは実際には問題ではありません。

それをスピードアップするためのアイデアはありますか?

4

1 に答える 1

0

マルチコア CPU の場合は、おそらく並列化するのが最善の策です。

詳細については、 http: //wiki.python.org/moin/ParallelProcessing などをご覧ください。

于 2013-04-21T22:50:54.437 に答える