光学字符识别多行检测

Posted

技术标签:

【中文标题】光学字符识别多行检测【英文标题】:Optical Character Recognition Multiple Line Detection 【发布时间】:2019-05-24 12:40:50 【问题描述】:

我正在构建 OCR。为此,我使用CNNRNNCTC 损失函数。 我的输入层获取图像,输出层预测该图像上写入的内容。标签转换为整数。

['A', 'B', 'C'] -> A = 0, B = 1, C = 2

如果图像是ABC,训练标签将为0,1,2(单行向量)

我能够在单行上完成此操作。例如。 'ABCDE' 写在图像上,模型效果很好。但是如果图片是

'ABC'

'CAB'

那么训练标签应该是什么?我如何告诉模型下一行?我想在多行上训练模型。

【问题讨论】:

您可以对图像进行预处理以将其分成单行。这可能比用多行检测整个图像要容易得多。 @HaBom 我想到了这个主意。我尝试了 opencv mser,contours 但效果不佳。如果您知道如何将图像裁剪成单独的行,请分享。请记住,图像也可能会倾斜。 你找到解决办法了吗? 【参考方案1】:

您想要识别包含多行的文档的文本。有两种方法可以实现这一目标:

    将文档分割作为预处理步骤,然后将每条分割线分别输入您的神经网络。 如果你想走这条路,例如阅读 Bunke 和 Marti 的论文 [1]。他们基本上计算每条扫描线的黑白转换并从中创建直方图。他们使用直方图的最小值将文档分成单独的行。还有一些其他方法可以将文档分割成行。

    训练神经网络将文档隐式分割。 您需要增加对神经网络的关注,以便它可以专注于单个线条。 Bluche 在文档级别的文本识别方面做了一些出色的工作。 请参阅论文 [2] 和网站 [3]。

[1] Bunke, Marti: The IAM-database: 一个用于离线手写识别的英文句子数据库。通过 Springer 下载

[2] Bluche:端到端手写段落识别的联合线分割和转录。通过https://arxiv.org/abs/1604.08352下载

[3] Bluche:扫描、出席和阅读。请参阅 http://www.tbluche.com/scan_attend_read.html 并查找“使用 MDLSTM 和 CTC 进行手写识别”和“折叠层及其建议的替代品”

【讨论】:

嗨@Harry。谢谢你的帮助。这就是我想要的,但是作为深度学习的一个天真者,我不知道如何实现多维 LSTM,也没有找到任何好的教程。如果您指出正确的方向,将不胜感激。 我不知道“扫描、参加和阅读”的任何开源实现——也许问问 T. Bluche 他是否开源了他的代码。我认为这种整页文本识别方法是可行的方法(并且将来会得到更多适应),但我也认为开发这样一个系统需要做相当多的工作。 MD-LSTM 的开源实现是可用的,即使在 TensorFlow 中也是如此,例如寻找 tf.contrib.ndlstm。

以上是关于光学字符识别多行检测的主要内容,如果未能解决你的问题,请参考以下文章

Andrew Ng-ML-第十九章-应用举例:照片OCR(光学字符识别)

OCR (Optical Character Recognition,光学字符识别)

Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)

如何使用光学字符识别解析数字 4

halcon光学字符识别(训练后识别),验证码识别

光学字符识别。使用tesseract识别里程表