如何使用Python和TF,Keras从照片(.jpg格式)中识别数字?

时间:2018-12-23 15:07:25

标签: python tensorflow keras conv-neural-network image-recognition

我使用OpenCV从照片中裁剪图像。 由此: enter image description here

对此: enter image description here

然后我将其裁剪为5个不同的部分,这些部分具有不同类型的阈值和角度(在2D旋转矩阵中),用于训练神经网络。 现在我有45个类似的jpg文件,其范围从0到9的任何数字。 但是我不明白如何使用我自己的数据而不是MNIST数据集来训练它 请帮助我处理建立数字识别程序。我需要将所有数字从img提取到文本。

1 个答案:

答案 0 :(得分:2)

如果您要使用NN方法,我首先要从一个小nn开始,然后看看它的效果如何,您可以使用here中的MNIST玩具示例。

请注意,您将需要使用自己的数据,而不是mnist:

import tensorflow as tf

x_train, y_train = load_train_data()
x_test, y_test = load_test_data()


model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

请注意,我“发明”了两个函数:load_train_data()load_test_data(),您需要为数据实现它们,并为每个函数返回一个((samples,x,y), labels)元组。功能。

一旦有了这种感觉,我将探索更高级的网络,可以在这里查看:https://towardsdatascience.com/a-simple-2d-cnn-for-mnist-digit-recognition-a998dbc1e79a,它是2D CNN网络的不错的教程,只需使用数据加载功能代替mnist。

由于您现在可能正面临一堵墙,因为您没有足够的数据,因此需要应用一些数据扩充。
最后一个CVPR提供了一个很好的解决方案'Deep Diffeomorphic Transformer Networks',它在样本数量少的数字分类上表现出色。您可以找到mnist码here,然后再次对数据使用函数。