OCR TesseractEngine

5

我正在使用OCR来识别图片上的数字

enter image description here

var engine = new TesseractEngine(@"C:\Projects\tessdata", "eng", EngineMode.Default,);
var currentImage = TakeScreen();
var page = engine.Process(ScaleByPercent(currentImage, 500));
var text = page.GetText().Replace("\n", "");

比例尺:

public Bitmap ScaleByPercent(Bitmap imgPhoto, int Percent)
    {
        float nPercent = ((float)Percent / 100);

        int sourceWidth = imgPhoto.Width;
        int sourceHeight = imgPhoto.Height;
        var destWidth = (int)(sourceWidth * nPercent);
        var destHeight = (int)(sourceHeight * nPercent);

        var bmPhoto = new Bitmap(destWidth, destHeight,
                                 PixelFormat.Format24bppRgb);
        bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
                              imgPhoto.VerticalResolution);

        Graphics grPhoto = Graphics.FromImage(bmPhoto);
        grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

        grPhoto.DrawImage(imgPhoto,
                          new System.Drawing.Rectangle(0, 0, destWidth, destHeight),
                          new System.Drawing.Rectangle(0, 0, sourceWidth, sourceHeight),
                          GraphicsUnit.Pixel);
        bmPhoto.Save(@"D:\Scale.png", System.Drawing.Imaging.ImageFormat.Png);
        grPhoto.Dispose();
        return bmPhoto;
    }

但是我得到的结果是"10g"。

  1. 如何强制引擎只识别数字?
  2. 如何获得数字1013。

@Jocke,他为什么期望1013很清楚...因为1013在一张图片上,他试图对其进行OCR识别,但结果返回的是字母。 - user10349555
2个回答

9
您可以使用以下代码告诉Tesseract引擎只查找数字:
var  engine = new TesseractEngine(@"C:\Projects\tessdata", "eng", EngineMode.Default);
                engine.SetVariable("tessedit_char_whitelist", "0123456789");

4
Strickos9已经给出了一个部分解决这个问题的好方法。但是,关键在于如果你需要扫描相同大小的文本,并且包含一些字母,那么结果可能会很糟糕。此外,即使将白名单仅与数字相关联,您在扫描时仍可能遇到一些问题(例如将5扫描为6),因为Tesseract在扫描低质量字符时确实遇到了困难,因此我强烈建议您:

  • 将图像放大2-4倍。
  • 如果需要,请进行一些模糊处理以软化字符的边缘。
  • 使用“阈值”或“自适应阈值”算法处理它(以清除模糊的像素和背景中的蓝色颜色)。

我在这里回答了一个类似的问题,其中一个人也对扫描低质量图片的结果不满意。

如果结合Strickos9给出的建议(如果您只打算扫描数字),应该可以提供完美的扫描质量。

您可以使用OpenCV或Matlab等软件进行此图像处理(尽管我从未尝试过)。如果您遇到困难,请在评论中发布您的进一步问题。


嗨!我对图像处理还不熟悉,我在使用tesseract时遇到了区分5和6的问题,谢谢你提供的帮助,网络上并不是很清楚。 - Oscar Ortiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接