如何加快tesseract OCR

问题描述:

我想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

目前,您为每个扫描页面创建一个新的TesseractEngine对象。创建引擎的代价很高,因为它读取'tessdata'文件。

你说你有20个并行任务在运行。由于引擎不能一次处理多个页面,因此您需要为每个任务创建一个引擎,并将其重用于所有任务进程的页面。您只需致电using (var page = Engine.Process(pix))即可使用现有引擎处理下一页。

重新使用引擎应该会显着提高性能,因为您只需创建20个引擎而不是300k。