【问题标题】:Tesseract OCR for .net not detecting text when white text is written on black rectangle and the border of black rectangle is white?当白色文本写在黑色矩形上并且黑色矩形的边框为白色时,.net 的 Tesseract OCR 未检测到文本?
【发布时间】:2017-05-17 09:29:05
【问题描述】:

我正在尝试使用 tesseract 从 png 中提取文本。在跟随 png 的情况下,Tesseract 不会提取文本。

图像中的黑色矩形有白色边框(由于网站背景不可见)。但是,如果我从矩形上删除白色边框,那么 Tesseract 能够检测到文本。有什么解决方法这个问题?

另外,如果减小边框大小,它会提取一些文本:

我 (31.04 我

这是我正在使用的代码:

 using (TesseractEngine ocr = new TesseractEngine(dataPath, "eng", EngineMode.TesseractOnly))
            {
                using (Pix p = Pix.LoadFromFile(filePath))
                {
                    using (Pix img = p.Scale(2,3))
                    {

                        using (var page = ocr.Process(img))
                        {

                            string text = page.GetText();
                            Console.WriteLine(text);
                        } 
                    }
                }

            }

通过缩放,我可以提取以下文本:

I G1.04 I

但是,如果我增加边框大小,那么即使缩放图像也没有效果。

【问题讨论】:

  • 实际上 Tesseract 甚至可以检测带有白色边框的文本。这可能是由于其他问题。尝试将图像转换为灰度并将其传递给 tesseract
  • "scale" 解决了我的问题。谢谢。

标签: c# png ocr tesseract


【解决方案1】:
using AForge.Imaging;
Grayscale grayFilter = new Grayscale(0.2125, 0.7154, 0.0721);
Bitmap grImage = grayFilter.Apply(image);
grImage.Save("./grey_image.png");

将此图像路径传递给您的 TesseractEngine。

【讨论】:

  • 使用了这段代码,但没有任何区别。另外,png是黑白的。所以,我认为生成的灰度图像与原始图像没有任何不同。但是我确实注意到,如果我减小白色边框宽度,那么它确实会将文本检测为“I (31.04 I”。
  • 你应该在给图像tesseract引擎之前预处理你的图像
  • 这个图像预处理我该怎么做?
  • 查看此链接以获取一些提示:github.com/tesseract-ocr/tesseract/wiki/ImproveQuality
猜你喜欢
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2022-09-28
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多