【问题标题】:What should I use for monospaced digits recognition?我应该使用什么来识别等宽数字?
【发布时间】:2012-09-28 14:38:54
【问题描述】:

我必须从视频流中识别图像中的数字,还有更多的东西应该使识别更容易:
1) 固定字体为 6x8,所有符号等宽
2) 我知道数字的确切位置,它们总是矩形的,没有旋转/倾斜/缩放,但由于空气传输故障可能会出现一些失真。
3) 只有数字和 .
4) 数字背景为半黑色(50% 不透明)

我尝试过 tesseract v2 和 v3,但 .NET 包装器并不完美,识别错误非常大,即使我使用自定义字体进行了训练,据我所知,这是因为分辨率小。

我自己做了非常简单的算法,将图像转换为黑白并计算原始字体图像和流中图像之间的匹配像素,它的性能比 tesseract 更好,但我认为更复杂的算法会做得更好。

我尝试使用带有 BackPropagationLearning 的 ActivationNetwork 训练 AForge,但它无法收敛(本文第一部分,只要我不需要缩放和几种字体 http://www.codeproject.com/Articles/11285/Neural-Network-OCR,据我了解,文章中的代码适用于较旧的AForge 版本),糟糕的是,这个项目不再受支持,论坛已关闭,据我所知,谷歌群组也是如此。

我知道 .NET 有 OpenCV 端口,据我所知,它的网络方法与 AForge 不同,所以问题是哪种方法最适合。

那么有什么 .NET 框架可以帮助我解决这个问题,如果它支持多个神经网络实现,那么哪种实现最适合?

【问题讨论】:

  • 尝试使用 Tesseract 的一件事是将图像升级到如果您的图像来自 300dpi 扫描书籍图像时所获得的图像。我能够通过将 Tesseract 缩放到 100 宽来让 Tesseract 处理 12 像素宽的中文

标签: c# opencv machine-learning computer-vision aforge


【解决方案1】:

对于固定放大倍率的固定大小字体,您可能可以使用基于模板匹配的不太复杂的 OCR 方法。有关如何使用 OpenCV(不是 .NET,但希望足以让您入门)的示例,请参阅 here。基本思想是为每个数字创建一个模板,然后尝试匹配目标中的所有模板位置,选择匹配分数最高的位置。因为您知道数字的位置,所以您可以在非常小的区域内搜索每个数字。有关模板匹配背后理论的更多信息,请参阅 this wiki article 的交叉相关。

这实际上是简化 OCR 应用程序的基础(通常用于识别特殊的 OCR 字体,例如用于在硅片上打印序列号的 SEMI 标准字体。)生产级算法还可以支持缩放、旋转和平移的容差,但底层技术几乎相同。

【讨论】:

  • 我非常同意,因为您处于这样一个受控环境(固定大小、已知位置等),模板匹配就足够了,无需进入真正的 OCR。
  • 我得到了合适算法的名字,我发现它是在AForge中实现的,所以我已经使用了它,它的工作非常好,非常感谢。跨度>
【解决方案2】:

尝试查看this projectthis project too。这两个项目都解释了 OCR 的工作原理,并向您展示了如何在 C# 和 .NET 中实现它。

【讨论】:

  • @Giedrius -- 抱歉,我没有看到第二个链接。 Here is another one 虽然可以使用 Microsoft Office 2007 OCR,但前提是您的计算机上有 Microsoft Office。
【解决方案3】:

如果您不是很着急,我建议您首先寻找解决问题的方法。我在WEKA 方面取得了很好的经验。使用 WEKA,您可以非常快速地测试一堆算法。 一旦找到解决问题的算法,您就可以将其移植到 .NET、构建包装器、寻找实现或(如果它是简单的算法)在 .NET 中重建它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多