繁体   English   中英

tesseract 多线程 c#

[英]tesseract multithreading c#

我有一个 tesseract 的代码可以在 1 个实例中运行我如何并行化代码以便它可以在四核处理器或 8 核处理器系统中运行。这是我的代码块。提前致谢。

  using (TesseractEngine engine = new TesseractEngine(@"./tessdata", "tel+tel1", EngineMode.Default))
        {

            foreach (string ab in files)
            {
                using (var pages = Pix.LoadFromFile(ab))
                {
                    using (Tesseract.Page page = engine.Process(pages,Tesseract.PageSegMode.SingleBlock))
                    {
                        string text = page.GetText();
                        OCRedText.Append(text);
                    }

                }
            }

并行运行此代码的最简单方法是使用PLINQ 在枚举上调用AsParallel()将自动在所有可用CPU内核上同时运行紧随其后的查询( .Select(...) )。

仅并行运行线程安全代码至关重要。 假设TesseractEngine和Pix.LoadFromFile()是线程安全的(正如您在评论中建议的那样,我自己没有对其进行验证),则唯一有问题的部分可能是OCRedText.Append() 从代码尚不清楚OCRedText是什么,因此我假设它是StringBuilder或List,因此它不是线程安全的。 因此,我从将要并行运行的代码中删除了这部分,然后稍后在单线程中对其进行处理-由于方法.Append()可能运行速度很快,因此这不会对整体性能产生重大不利影响。

using (TesseractEngine engine = new TesseractEngine(@"./tessdata", "tel+tel1", EngineMode.Default))
{
    var texts = files.AsParallel().Select(ab =>
            {
                using (var pages = Pix.LoadFromFile(ab))
                {
                    using (Tesseract.Page page = engine.Process(pages, eract.PageSegMode.SingleBlock))
                    {
                        return page.GetText();
                    }
                }
            });

    foreach (string text in texts)
    {
        OCRedText.Append(text);
    }
}

这对我有用:

static IEnumerable<string> Ocr(string directory, string sep)
    => Directory.GetFiles(directory, sep)
        .AsParallel()
        .Select(x =>
        {
            using var engine = new TesseractEngine(@"D:\source\repos\WPF\OcrTest\tessdata\", "deu", EngineMode.Default);
            using var img = Pix.LoadFromFile(x);
            using var page = engine.Process(img);
            return page.GetText();
        }).ToList();

我不是并行化问题的专家,但是这个 function ocr 在 12 秒内完成了 8 个 Tiff。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM