簡體   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