尝试在tensorflow中创建OCR,字母训练后怎么办?

Posted

技术标签:

【中文标题】尝试在tensorflow中创建OCR,字母训练后怎么办?【英文标题】:Experimenting with creating OCR in tensorflow, what to do after training on letters? 【发布时间】:2017-12-22 00:47:12 【问题描述】:

老实说,我只是卡住了,无法思考。我一直在努力创建一个可以阅读字母的惊人模型,但是我该如何继续阅读单词、句子、段落和全文呢?

这是一个普遍的问题,所以请原谅我没有提供代码,但假设我已经成功训练了一个网络来识别多种字母和多种字体,图像中有各种不同的噪声和失真。

(只是为了技术,模型训练的图像只是36*36灰度图像,模型是一个简单的分类器,有一些conv2d层)

现在我想使用这个训练有素的模型和它的所有参数,并给它一些可供阅读的东西,以变成一个完整的 OCR 程序。这就是我卡住的地方。我想给程序一张纸的照片/扫描,让它识别所有的字母。但是,当图像明显大于单字母训练的图像时,如何使用我的模型“预测”?

我尝试添加一个额外的conv2d 层,它会尝试读取图像部分的特征,但这太复杂了,我无法弄清楚。

我还查看了opencv 程序,这些程序可以识别图像中的文本位置并将其裁剪出来,但我找不到单独的单个字母,现在可以将这些字母提供给经过训练的模型以尝试阅读。

我的下一步是什么?

【问题讨论】:

【参考方案1】:

如果字母的字体在整个图像中都是相同的,您可以使用所谓的:“滑动窗口技术

从左上角开始,将扫描窗口向右滑动到字母的大小,直到到达纸的末尾。

滑动窗口将是扫描字母的大小,当输入到您的神经网络时,它将输出字母。将这些字母保存在某处。

其他方法包括更改您的神经网络并更智能地检测扫描纸上的文本块

如果您正在寻找现成的解决方案,请查看Tessaract-ocr。

【讨论】:

你能扩展一下“滑动窗口”吗?我考虑过实现类似的东西,但我假设通过每次“滑动”几个像素,如果“幻灯片”太大,我可能会错过字母,或者如果幻灯片太大,我可能会多次阅读同一个字母小的。所需幻灯片的大小是未知的,并且对于每篇论文都不同。有没有处理这个问题的模型? 您可以尝试使用不同的窗口大小,看看哪一个可以为图像的不同部分提供最佳精度,然后选择最佳的滑动窗口大小。 在整个图像上使用相同的窗口大小和幻灯片长度,然后将图像缩小一点并再次滑动,然后缩小图像和幻灯片,依此类推。这是一种多尺度方法。但是根据您的分类器,可能还有另一个问题:它是否对旋转和透视失真保持不变,或者您是否假设直立的直线纸作为输入? 或者可能使用笔画宽度变换来猜测字体大小或某事;)【参考方案2】:

查看以下链接以获取想法:

STN-OCR: A single Neural Network for Text Detection and Text Recognition STN-OCR on Medium Attention-based Extraction of Structured Information from Street View Imagery Another Attention-based OCR Repo A model using both CNN and LSTM

【讨论】:

以上是关于尝试在tensorflow中创建OCR,字母训练后怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 训练模型在云端机器上工作,但在我的本地电脑上使用时出错

使用在 32x32 字母图像上训练的模型预测整个文档的 ocr 文本

在 tensorflow 中创建多层循环神经网络

张量流中的ocr实现

如何在 tf 2.1.0 中创建 tf.data.Dataset 的训练、测试和验证拆分

在 iOS 上实现 TensorFlow Attention OCR