我必须识别来自视频流的图像中的数字,还有更多的东西,这应该使识别更容易:
1)它是固定字体6x8,所有符号宽度相等
2)我知道数字的确切位置,它们总是矩形,没有旋转/ sqewed / scaled,但是由于空气传输故障可能会有一些扭曲。
3)它只是数字和。
4)数字背景是半黑色(50%不透明)
我已经尝试过tesseract v2和v3,但.NET包装器并不完美,识别错误非常大,即使我使用自定义字体训练,据我所知,这是因为分辨率很小。
我自己制作了一个非常简单的算法,将图像变为黑白,并计算原始字体图像与流中图像之间的匹配像素,它的性能优于tesseract,但我认为更复杂的算法会做得更好。 / p>
我尝试使用ActivationNetwork和BackPropagationLearning训练AForge并且它无法收敛(本文第一部分,只要我不需要缩放和几种字体http://www.codeproject.com/Articles/11285/Neural-Network-OCR,因为我理解文章中的代码是对于较旧版本的AForge),不好的是,该项目不再受支持,论坛已关闭,谷歌小组也是我理解的。
我知道有.NET的OpenCV端口,据我所知,它有不同于AForge的网络方法,所以questiton哪种方法最适合。
那么有没有任何.NET框架可以帮助我,如果它支持多个神经网络实现,哪种实现最适合?
答案 0 :(得分:4)
对于固定大小的固定大小的字体,您可以使用基于模板匹配的不太复杂的OCR方法。有关如何使用OpenCV进行模板匹配的示例,请参阅here(不是.NET,但希望足以让您入门。)基本思路是为每个数字创建一个模板,然后尝试匹配所有模板您的目标位置,选择匹配分数最高的位置。因为您知道数字的位置,所以您可以搜索每个数字的非常小的区域。有关模板匹配背后理论的更多信息,请参阅this wiki article关于互相关。
这实际上是简化OCR应用程序的基础(通常用于识别特殊的OCR字体,例如用于在硅晶片上打印序列号的SEMI标准字体。)生产级算法还可以支持缩放,旋转和平移的容差,但基本技术几乎相同。
答案 1 :(得分:2)
尝试查看this project和this project too。这两个项目都解释了OCR的工作原理,并向您展示了如何在C#和.NET中实现它。
答案 2 :(得分:0)
如果你不是非常匆忙,我建议你先找一个解决问题的方法。我用WEKA做了很好的经历。使用WEKA,您可以非常快速地测试一堆算法。 一旦找到解决问题的算法,就可以将其移植到.NET,构建包装器,查找实现或(如果它是一个简单的算法)在.NET中重建它。