如何识别图像中的数字序列

人工智能 神经网络 计算机视觉 张量流 Python 图像识别
2021-10-30 06:22:56

我正在学习对神经网络和其他网络进行编程,我想知道如何获得图像中的数字,例如,如果我传递一个写有 123 的图像,用我的模型得到有 123 个写,我尝试使用PyTesseract不是很精确,我想用神经网络来做,​​我当前的代码很简单,它可以识别mnist数据集的数字,例如:

import tensorflow as tf
from tensorflow.keras import Sequential, optimizers
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
import matplotlib.pyplot as plt

mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

print('train_images.shape:', train_images.shape)
print('test_images.shape:', test_images.shape)
plt.imshow(train_images[0])

train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

train_images = train_images.astype('float32') / 255
test_images = test_images.astype('float32') / 255

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
 

model = Sequential()

model.add(Conv2D(32, (5, 5), activation = 'relu', input_shape = (28, 28, 1)))
model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(64, (5, 5), activation = 'relu'))
model.add(MaxPooling2D((2, 2)))

model.add(Flatten())

model.add(Dense(10, activation = 'softmax'))

model.summary()

model.compile(loss = 'categorical_crossentropy', optimizer = 'sgd', metrics = ['accuracy'])

model.fit(train_images, train_labels, batch_size = 100, epochs = 5, verbose = 1)

test_loss, test_accuracy = model.evaluate(test_images, test_labels)

print('Test accuracy:', test_accuracy)

但是我需要知道如何将带有数字序列的图像传递给它,并且它可以识别有问题的数字,有人知道我该怎么做吗?

2个回答

您的任务是文本识别,但您的代码是用于分类任务。因此,您需要为此使用不同的方法。你提到你要给 model123和 get 123但是你不能只用卷积网络来做到这一点。带有文本的图像是连续的,因此需要使用CRNN (Convolutional-Recurrent-Neural-Networks)、LSTM (Long-Short-Term-Memory)、BiLSTM (Bidirectional-LSTM)。在大多数研究论文中,卷积网络仅用于特征提取阶段。对于预测阶段,他们使用循环单元,例如 LSTM 单元或 RNN。

从您的问题来看,没有迹象表明这些数字有任何模式。如果有的话,对 LSTM 或 RCNN 的推荐将是有意义的。在随机值的情况下,我发现通过两个并行密集网络下降的两层或三层 CNN 可以很好地识别 CAPTCHA 样式的随机字符。一个路径主要负责识别边界框,另一个是确定存在哪些字符。

还有很多其他方法可以解决这个问题。您可能会通过神经网络研究 CAPTCHA 解决方案。更具体地说,基于文本的验证码。如果你的任务真的只是 OCR,那么通过神经网络研究 OCR。例如,我在此处描述的技术会起作用,但对于一页文本来说会变得很麻烦。在这种情况下,滑动窗口 CNN 与密集层和 LSTM 相结合是最有意义的,因为您将处理可预测的字符序列。