自然场景数字识别的深度学习解决方案

Posted

技术标签:

【中文标题】自然场景数字识别的深度学习解决方案【英文标题】:Deep Learning solution for digit recognition on natural scene 【发布时间】:2021-04-23 16:20:15 【问题描述】:

我正在解决一个问题,我想自动读取图像上的数字,如下所示:

可以看出,这些图像非常具有挑战性!这些不仅在所有情况下都不是相连的线,而且对比度也相差很大。我的第一次尝试是经过一些预处理后使用 pytesseract。我还创建了一个 *** 帖子 here。

虽然这种方法适用于单个图像,但它并不通用,因为它需要太多手动信息来进行预处理。到目前为止,我最好的解决方案是迭代一些超参数,例如阈值、腐蚀/膨胀的过滤器大小等。但是,这在计算上很昂贵!

因此我开始相信,我正在寻找的解决方案必须基于深度学习。我这里有两个想法:

在类似任务中使用预训练网络 将输入图像拆分为单独的数字,并以 MNIST 方式自行训练/微调网络

关于第一种方法,我还没有找到好的方法。有人对此有想法吗?

关于第二种方法,我首先需要一种方法来自动生成单独数字的图像。我想这也应该是基于深度学习的。之后,我也许可以通过一些数据增强来取得一些好的结果。

有人有想法吗? :)

【问题讨论】:

【参考方案1】:

你的任务真的很有挑战性。我有几个想法,可能会对你有所帮助。首先,如果你得到正确的图像,你可以使用EasyOCR。它使用一种复杂的算法来检测图像中的字母CRAFT,然后使用 CRNN 识别它们。它对符号检测和识别部分提供了非常细粒度的控制。例如,在对图像进行一些手动操作(灰度、对比度增强和锐化)之后,我得到了

并使用以下代码

import easyocr
reader = easyocr.Reader(['en']) # need to run only once to load model into memory
reader.readtext(path_to_file, allowlist='0123456789')

结果是3119743231197396

现在,对于对比度恢复部分,opencv 有一个名为CLAHE 的工具。如果你运行以下代码

img = cv2.imread(fileName)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (25, 25), 0)
grayscaleImage = gray * ((gray / blurred) > 0.01)  
clahe = cv2.createCLAHE(clipLimit=6.0, tileGridSize=(16,6))
contrasted = clahe.apply(grayscaleImage)

在原始图像上,您会得到 它们在视觉上与上面的非常相似。我相信,经过一番清理后,您无需过多摆弄超参数即可使其易于识别。

最后,如果你想训练自己的深度学习 OCR,我建议你使用 keras-ocr 。它使用与 EasyOCR 相同的算法,但提供了端到端的训练管道来构建新的 OCR 模型。它涵盖了所有必要的步骤:数据集下载、数据生成、扩充、训练和推理。

考虑到深度学习解决方案的计算量很大。祝你好运!

【讨论】:

非常感谢您的回答,我一定会尝试这些想法! :)【参考方案2】:

关于你的第一种方法,

有两个综合准备的数据集可用:

    Text Recognition Data 包含 900 万张图片。 SynthText in the Wild 包含 800 万张图片。

我已将上述数据集用于平板图像的文本识别。图像非常具有挑战性,但现在我达到了 90% 以上的准确率。我已经实现了以下模型来解决这个任务。它们是:

    CRAFT 用于文本本地化。 Deep Text Recognition 用于文本识别。

如果您只使用 类型的图像,我强烈建议您尝试深度文本识别。它是4阶段框架。

    对于转换,您可以选择 TPSTPS 表现出更高的性能。他们实现了Spatial Transformer Networks。

    在特征提取阶段,您可以选择:ResNetVGG

    对于顺序阶段,BiLSTM

    AttnCTC 用于预测阶段。

他们在 TPS-ResNet-BiLSTM-Attn 版本上取得了最佳准确度。您可以轻松地微调这个网络,我希望它可以解决您的任务。使用上述数据集训练的模型。

【讨论】:

以上是关于自然场景数字识别的深度学习解决方案的主要内容,如果未能解决你的问题,请参考以下文章

人脸识别的深度学习

目标识别深度学习进行目标识别的资源列表

深度学习面试题12:LeNet(手写数字识别)

精彩论文基于深度学习和图像识别的电力配件智能出入库

用于图像识别的深度残差学习!

一种基于脑电图情感识别的新型深度学习模型