首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCR TesseractEngine

OCR TesseractEngine
EN

Stack Overflow用户
提问于 2016-07-12 18:41:25
回答 2查看 11.7K关注 0票数 5

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

代码语言:javascript
复制
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", "");

比例:

代码语言:javascript
复制
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号。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-12 19:58:23

您可以告诉Tesseract引擎只使用以下代码查找数字:

代码语言:javascript
复制
var  engine = new TesseractEngine(@"C:\Projects\tessdata", "eng", EngineMode.Default);
                engine.SetVariable("tessedit_char_whitelist", "0123456789");
票数 9
EN

Stack Overflow用户

发布于 2016-07-12 21:55:25

Strickos9已经向您展示了解决这个问题的一种很好的方法。但关键是,如果你必须扫描相同大小的文本,但也会包含一些字母,你会得到一个坏的结果。此外,即使使用仅与数字相关的白名单,您也可以在扫描时解决一些问题(例如5扫描为6),因为Tesseract确实很难扫描低质量字符,因此我强烈建议您:

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

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

结合Strickos9提供给您的内容(如果您只扫描数字),应该为您提供一个完美的扫描质量。

您可以使用像OpenCV或Matlab这样的软件进行图像处理(尽管我从未尝试过)。如果你正在努力解决这个问题,在评论中发表你的进一步问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38336601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档