2017-06-02 43 views
1

私は多くのドキュメントをOCRしようとしています(私は300k +の範囲で1日を意味します)。現時点では、私はTesseract wrapper for .NETを使用していますが、品質はすべて良いですが、スピードが十分ではありません。私が平均20回の同じ仕事をしているpdfからの半分のページの平行スキャンでは、スキャンあたり2,546秒です。コードを使用して:tesseractをスピードアップする方法OCR

using (var engine = new TesseractEngine(Tessdata, "eng", EngineMode.TesseractOnly)) 
     { 
      Page page; 
      page = engine.Process(image, srcRect);   
      var text = page.GetText(); 
      return Task.FromResult(text); 
     } 

私が得る平均時間は、画像の解像度を半分に下げてからグレースケールに変換した後です。どのようなアイデアは、プロセスをスピードアップするには?テキストを分割する必要はありません。テキストは1行に収められます。 Matlab for c#?

+0

すべてのページに対して新しいエンジンを作成しますか( 'new TesseractEngine')? – GWigWam

+0

@GWigWamはい、現時点ではそのように動作しています。私はそれが並列使用をサポートしていないと確信しています – TestzWCh

+1

あなたは正しいです、それは並列使用をサポートしていません。しかし、それを作成するのはコストがかかります。 – GWigWam

答えて

2

現在、スキャンするページごとに新しいTesseractEngineオブジェクトを作成します。エンジンを作成すると、 'tessdata'ファイルが読み込まれるため、コストが高くなります。

20種類の並列タスクが実行されているとします。エンジンは複数のページを一度に処理することができないため、タスクごとに1つのエンジンを作成し、そのタスクが処理するすべてのページに再利用する必要があります。既存のエンジンで次のページを処理するには、単にusing (var page = Engine.Process(pix))と呼ぶことができます。

エンジンを再利用すると、300kではなく20台のエンジンを作成すれば済むので、パフォーマンスが大幅に向上します。

関連する問題