如何制作光学字符识别程序?

11

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

3个回答

9
一种基本方法是制作黑色像素的直方图。首先:将所有像素投影到一条线上。直方图中的深谷表示行之间的分隔(如果纸张可能倾斜,请尝试不同的角度)。然后,对于每一行(或每一页,如果您知道字体是等宽的),将像素投影到水平直方图上。这将为您提供有关字符间距的强烈指示。至少,这会给你一个平均字符高度和宽度的值,这将在下一步中帮助你。

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

根据扫描图像的质量,您可能需要使用更高级的技术,但这将让您开始工作。


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

3

2
@quanta AI和OCR不是同一件事情。如果称其为AI,你描述的就是错误的东西。 - Raoul

0

对我来说,问题本身似乎不太清楚。

因为它涉及OCR,我会留下一些文章,它们可能会有所帮助(至少对我有用):

另外,如上所述tesseract是一个很好的OCR开源Python库(我个人也使用这个)。您可以通过sklearn采取其他方法。

您还可以查看this stackoverflow post

我相信你可以使用researchgate来查找任何论文(我找到了一些,但不确定这是否是你需要的)。

我认为上面的通用答案适用于通用问题。


1
嗨,通常在 Stack Overflow 上,如果一个问题不清楚,最好不要回答它,直到它变得清晰明了。如果你认为已经有一个回答了这个问题,那么就更应该如此。 - TylerH

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