2017-06-02 82 views
1

我想OCR很多文件(我的意思是在一天300k +範圍內)。目前我正在使用Tesseract wrapper for .NET,它的質量都很好,但速度不夠好。我平均每次掃描平均掃描半頁的20個任務的平均時間爲2546秒。使用代碼IM:如何加快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); 
     } 

的平均時間我得到的是降低一半圖像的分辨率,並將其轉換爲灰度後。任何想法加快這一進程?我不需要對文本進行分段,只需將文本排成一行即可。我是否應該使用如Matlab for c#?

+0

您是否爲每個頁面創建一個新引擎(調用'new TesseractEngine')? – GWigWam

+0

@GWigWam是的,目前它的工作就是這樣。我很確定它不支持並行使用 – TestzWCh

+1

你是對的,它不支持並行使用。然而,創建它是昂貴的。 – GWigWam

回答

2

目前,您爲每個掃描頁面創建一個新的TesseractEngine對象。創建引擎的代價很高,因爲它讀取'tessdata'文件。

你說你有20個並行任務在運行。由於引擎不能一次處理多個頁面,因此您需要爲每個任務創建一個引擎,並將其重用於所有任務進程的頁面。您只需致電using (var page = Engine.Process(pix))即可使用現有引擎處理下一頁。

重新使用引擎應該會顯着提高性能,因爲您只需創建20個引擎而不是300k。