我试图OCR很多文件(我的意思是每天300k +范围内)。目前我正在使用Tesseract wrapper for .NET并且它的质量都很好,但速度还不够好。从平均扫描同一pdf半页的20个任务的平均时间是每次扫描2,546秒。代码即时使用:
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 :(得分:4)
目前,您为每个扫描的页面创建一个新的TesseractEngine
对象。创建引擎的成本很高,因为它会读取' tessdata'文件。
你说你有20个并行任务在运行。由于引擎无法一次处理多个页面,因此您需要为每个任务创建一个引擎,并将其重用于任务处理的所有页面。您只需致电using (var page = Engine.Process(pix))
即可使用现有引擎处理下一页。
重新使用引擎应该可以显着提高性能,因为您只需创建20个引擎而不是300k。