调用CNN模型,识别本地的手写数字图片
在实现实时识别手写数字之前先实现本地图片的识别,这里的本地图片是从画图里面自己手写导出的(手动设置为28*28大小的)。
值得注意的是,需要将图片数据转化为
程序如下:
import tensorflow as tf
import numpy as np
from tensorflow import keras
import matplotlib.pyplot as plt
from tensorflow.keras import layers, optimizers, datasets
#%%
image_size = 28
x_image = tf.io.read_file('./my_models/number.png')
decode_img = tf.image.decode_png(x_image,channels=1) # 读取完成后需解码
print(decode_img.shape) # (28,28,1)
decode_img = tf.image.convert_image_dtype(decode_img, tf.float32) # 转换为float32格式
test_img = tf.image.resize(decode_img,[image_size,image_size])
test_img = tf.reshape(test_img,[-1,image_size,image_size,1])
test_img = tf.keras.utils.normalize(test_img, axis=1) # 归一化
test_img = test_img.numpy() # 需要转换为numpy类型
test_label = np.array([3]) # 需要转换为数组类型
print(decode_img.shape)
# 查看图片
plt.imshow(np.squeeze(decode_img),cmap=plt.cm.binary) # imshow只能打印出二维图像或第三维度是3和4的三维图像
plt.show()
#%%
# 重载模型
Saved_model = tf.keras.models.load_model('./my_models/MNIST_CNN_model.h5')
#%%
# 预测的权值
predictions = Saved_model.predict(test_img)
print(predictions)
print("预测结果为:{}".format(np.argmax(predictions[0])))