问题 我如何制作OCR计划?


我想制作一个程序,将图像作为输入并输出文本。现在我知道我可以使用神经网络将单个字符的图像转换为该字符。困难的部分是:给定一个带有文本的图像,我将如何生成每个角色周围的所有矩形?

那么有什么样的方法用于此,有没有人知道任何讨论如何做的研究论文?谢谢


9776
2017-07-01 14:58


起源



答案:


一种基本方法是制作黑色像素的直方图。第一:投射一条线上的所有像素。直方图中的深谷表示线之间的分离(如果纸张可能倾斜,请尝试不同的角度)。然后,每行(或每页,如果你知道字体是等宽的)投影水平直方图上的像素。这将为您提供字符间空间的强烈指示。至少,这为您提供了平均字符高度和宽度的值,可帮助您完成后续步骤。

之后,您需要处理字距调整(字符重叠)。找到连接的像素,可能首先对图像进行扩张或侵蚀,以补偿扫描伪影。

根据扫描图像的质量,您可能必须使用更高级的技术,但这将使您前进。


9
2017-07-07 08:37



这非常有趣,因为虽然我认为你描述的方法有时会很好用,但是它无法学习?可以训练神经网络以更好地阅读单个符号,但是一旦它完美,使用您的想法,我觉得它可能会受到这部分程序的限制。你认为是这种情况还是我误判了? - quanta
啊,我有点误读了你的问题。传统方法是1)图像增强2)分割3)字符识别(使用NN)4)使用上下文信息(字典查找或应用统计数据)。您基本上可以选择使用NN进行分段,或者使用NN进行组合2)和3)。后者将具有挑战性,但具有潜在的优势。如果您想将NN应用于细分,则必须提供良好的功能。使用直方图谷可能是其中之一(我自己没有这样做,所以实际上无法预测结果)。 - Emile
恭喜!你几乎彻底改造了霍夫变换。 - polkovnikov.ph


答案:


一种基本方法是制作黑色像素的直方图。第一:投射一条线上的所有像素。直方图中的深谷表示线之间的分离(如果纸张可能倾斜,请尝试不同的角度)。然后,每行(或每页,如果你知道字体是等宽的)投影水平直方图上的像素。这将为您提供字符间空间的强烈指示。至少,这为您提供了平均字符高度和宽度的值,可帮助您完成后续步骤。

之后,您需要处理字距调整(字符重叠)。找到连接的像素,可能首先对图像进行扩张或侵蚀,以补偿扫描伪影。

根据扫描图像的质量,您可能必须使用更高级的技术,但这将使您前进。


9
2017-07-07 08:37



这非常有趣,因为虽然我认为你描述的方法有时会很好用,但是它无法学习?可以训练神经网络以更好地阅读单个符号,但是一旦它完美,使用您的想法,我觉得它可能会受到这部分程序的限制。你认为是这种情况还是我误判了? - quanta
啊,我有点误读了你的问题。传统方法是1)图像增强2)分割3)字符识别(使用NN)4)使用上下文信息(字典查找或应用统计数据)。您基本上可以选择使用NN进行分段,或者使用NN进行组合2)和3)。后者将具有挑战性,但具有潜在的优势。如果您想将NN应用于细分,则必须提供良好的功能。使用直方图谷可能是其中之一(我自己没有这样做,所以实际上无法预测结果)。 - Emile
恭喜!你几乎彻底改造了霍夫变换。 - polkovnikov.ph


这听起来不像人工智能,听起来你在谈论OCR:

http://en.wikipedia.org/wiki/Optical_character_recognition

请参阅google tesseract

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

编辑 未经编辑的问题是询问人工智能。


2
2017-07-01 15:02



@quanta AI和OCR不是一回事。把它称为AI,你就是在描述错误的东西。 - Raoul