识别图片中的数字

17

我一直在网上搜索有关图像中数字识别的资源。 我找到了许多链接提供了大量关于该主题的资源。但不幸的是,它更加混乱而不是帮助,我不知道从哪里开始。

我有一张图片上有5个数字,没有受到干扰(没有验证码或类似的东西)。数字是黑色的,背景是白色的,用标准字体书写。

我的第一步是分离这些数字。我目前使用的算法非常简单,它只是检查列是否完全为白色,因此是空格。然后它修剪每个字符,以便其周围没有白色边框。这个方法效果还不错。

但是现在我卡在了数字的实际识别上。我不知道猜测正确数字的最佳方法是什么。我认为直接与字体进行比较不是一个好主意,因为如果数字只有一点不同,它就不能工作了。

有人能给我提示如何解决吗?

这对问题无关紧要,但我将在C#或Java中实现它。我找到了一些库可以完成工作,但我想自己实现它,以学习一些东西。

1个回答

14

为什么不考虑使用开源OCR引擎,例如Tesseract?

http://code.google.com/p/tesseract-ocr/

C#封装Tesseract

http://www.pixel-technology.com/freeware/tessnet2/

Java对Tesseract的封装

http://sourceforge.net/projects/tessocrinjava/

虽然您可能认为使用第三方库不是自行实现,但仅集成第三方工具就需要大量的工作。同时请记住,即使是看似简单的事情(识别数字5与数字6),通常也非常复杂;我们谈论的是成千上万行代码复杂。至少,查看tesseract的源代码将给您一个充分的理由去利用第三方库。
这里有另一个SO问题,它会给您一些关于算法的思路: https://stackoverflow.com/questions/850717/what-are-some-popular-ocr-algorithms

谢谢你的提示。实际上我不是很擅长C/C++,代码也很多。我仍然希望不必尝试理解整个OCR软件项目,只是为了学习数字识别。 - svens
这将消除您使用C++的需要... C#包装器非常简单。除非您想成为机器学习和图像优化方面的专家,否则您真的不想尝试自己开发OCR解决方案。 - Keith Adler
1
+1 Tesseract非常棒。只要在命令行中调用它,您可以使用任何语言。 - rook
1
您可以将其作为DLL使用,而无需太多的努力,因此不需要命令行。如发布说明中所述,它已经默认包含了这个功能。http://code.google.com/p/tesseract-ocr/wiki/ReleaseNotes - Keith Adler

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