【问题标题】:C# tesseract only scanns first .tiff PageC# tesseract 只扫描第一个 .tiff 页面
【发布时间】:2022-01-17 00:49:59
【问题描述】:

我目前正在尝试对一些 .tiff 文件进行 OCR。显然,“Tesseract”只扫描每个文件的第一页。我一直在谷歌上寻找提示,但这不是很有帮助。 此代码应该从每个 .tiff 文件中获取完整文本:

public async Task<List<string>> ScannFile(string file)
{
    if (Path.GetFileName(file).EndsWith(".pdf"))
    {
        MessageBox.Show("Sie können nur .tiff Dokumente einscannen!");
        return null;
    }
    else
    {
        List<string> PageContent = new();
        await Task.Run(new Action(() =>
        {
            using (var engine = new TesseractEngine(@"C:\Users\f.rigo\source\repos\FinalScanner\FinalScanner\bin\Debug\net5.0-windows/tessdata", "deu", EngineMode.TesseractOnly))
            {
                using (var img = Pix.LoadFromFile(file))
                {
                    //img.Scale((float)scann_dpi / 2, (float)scann_dpi / 2);
                    using (var page = engine.Process(img))
                    {
                        var text = page.GetText();
                        PageContent = cleanOCROutput(text);
                    }
                }
            }
        }));
        return PageContent;
    }
}

我尝试使用 for-each 循环获取完整文件,但不幸的是,“img”不包含任何可枚举的内容。顺便说一句,我正在使用 Tesseract 库。查尔斯·韦尔德(Charles Weld)。

对于如何扫描 .tiff 文件的第 2 页及以后的页面,您有什么建议吗?

【问题讨论】:

    标签: c# tesseract


    【解决方案1】:

    下面的代码展示了如何使用 NuGet 包 Tesseract 从多页 .tiff 文件中提取文本。

    以下内容已使用 Tesseract (v4.1.1) 进行了测试,并改编自 OP 和 here

    添加以下 using 语句

    using Tesseract;
    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Diagnostics;
    

    注意:在下面的代码中,假设tessdata 文件夹(以及相关文件/子文件夹)与可执行文件位于同一目录中。

    public async Task<List<string>> ScannFile(string filename)
    {
        if (Path.GetFileName(filename).EndsWith(".pdf"))
        {
            MessageBox.Show("Sie können nur .tiff Dokumente einscannen!");
            return null;
        }
        else
        {
            List<string> PageContent = new List<string>();
    
            await Task.Run(new Action(() =>
            {
                using (Image tiffImg = Image.FromFile(filename))
                {
                    //create new instance
                    using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                    {
                        //get total pages
                        int pageCount = tiffImg.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
    
                        for (int i = 0; i < pageCount; i++)
                        {
                            Debug.WriteLine(String.Format("---Page {0}---", i + 1));
    
                            //select active frame
                            tiffImg.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
    
                            byte[] imageBytes = null;
                            using (MemoryStream ms = new MemoryStream())
                            {
                                //save to MemoryStream
                                tiffImg.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
    
                                //copy to byte[]
                                imageBytes = ms.ToArray();
                            }
    
                            //load image 
                            using (var img = Pix.LoadTiffFromMemory(imageBytes))
                            {
                                using (var page = engine.Process(img))
                                {
                                    //get text
                                    string imageText = page.GetText();
                                    Debug.WriteLine("imageText: " + imageText);
    
                                    //add
                                    PageContent.Add(imageText);
                                }
                            }
                        }
                    }
                }
            }));
    
            return PageContent;
        }
    }
    

    资源

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 2011-12-18
      • 2019-06-14
      相关资源
      最近更新 更多