一个单独的数字如何识别号码?

数据挖掘 神经网络 预处理 图像识别
2021-10-05 11:19:32

假设一个人有一个神经网络,能够从给定的 28x28px 图像中返回数字。

如何将未知大小和未知数字数量的图像拆分为一系列 28x28px 图像以提供给该网络?(数字的顺序必须是可获取的。)

例如:

一串数字

如何将其拆分为:

在此处输入图像描述

假设并不总是有 5 位数字,并且初始图像并不总是相同的大小。

首先,我的想法是创建一个二级神经网络。该神经网络将输出 (x, y) 坐标。这可用于将图像裁剪为关于此坐标的 28x28px。然而,这个神经网络一次只能定位一个数字。

其次,另一个想法是可以执行一系列随机裁剪,然后全部交给数字识别神经网络。但是,这会产生很高的错误率,并且数字识别神经网络无法判断没有给出有效数字(除非添加了输出)。但更重要的是,数字的顺序会/可能会丢失。

我正在努力寻找任何解释可能解决方案的资源。谷歌的门牌号码识别功能采用整个数字图像并返回一个值。这可以在Google 如何破解街景中的门牌号码识别使用深度卷积神经网络从街景图像中识别多位数号码中找到。

3个回答

在图像处理中,此任务称为定位。您基本上想要定位图像中的每个数字,然后在数字上使用您的数字识别器。粗略的谷歌搜索图像中的数字本地化给了我以下似乎很有帮助的论文。

其实这就是所谓的text line extraction我要告诉你的内容是从这位科学家的讲座中得到启发的。要查找数字,您无需设计网络。您应该提取它们,然后依次将它们提供给网络。

首先,您必须阅读您的图像。

import cv2
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
img = cv2.imread('./doc1.png')
plt.imshow(img)

在此处输入图像描述

然后你必须将你的图像作为一个二进制数组。

img.shape

(2360, 1649, 3)

img = cv2.imread('./doc1.png',0)
img.shape

(2360, 1649)

plt.imshow(img)

在此处输入图像描述

plt.imshow(img,cmap = 'gray')

在此处输入图像描述

以下代码显示了文档的一些行:

plt.imshow(img[900:1020,500:900],cmap = 'gray')

在此处输入图像描述

bimg=cv2.cvtColor(img[900:1020,500:900],cv2.COLOR_GRAY2RGB)
bimg.shape

(120, 400, 3)

接下来,您必须找到图像中的线条,然后您必须找到字符。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

基本上代码对我来说是完全清楚的。如果你不明白,请告诉我。

我曾在类似的情况下工作过,我需要分隔每个数字。我已经使用图像分割做到了这一点,只分割白色像素列。