项目介绍
图像识别在各行各业都得到了广泛地应用。医学影像、智能交通等领域伴随着图像识别技术的发展,出现在人们眼前。图像识别技术的应用场景之一,手写体数字识别技术,也一直在不断地发展前进。传统数字识别技术,依靠人工参与数字特征提取,识别的精度较低、速度慢。如果进一步优化手写体数字识别的精度和速度,那么工作效率就会得到极大地改善。使用深度学习技术提取图像特征不需要人工参与,而且具有更快的识别速度与更高的精度。本文使用深度学习技术,识别图像中的四则运算内容并加以判断批改,减轻了教师、家长批改作业的负担。
项目内容
制作数据集
本项目基于MNIST数据集,同时又扩充了“+、-、x、/、=”这五种识别对象的数据。在数据扩充时,可采用keras.preprocessing.image中的ImageDataGenerator模块进行数据集的扩充。
def ImageGenerate(soucrce_path,new_path,pre_name,num):
datagen = ImageDataGenerator(rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
img = load_img(soucrce_path)
x = img_to_array(img)
x = x.reshape(((1,)+x.shape))
i=0
for batch in datagen.flow(x, batch_size=1,save_to_dir=new_path, save_prefix=pre_name, save_format='png'):
i += 1
if i>num:
break
数据预处理
此过程主要包括图像灰度化、反相二值化、图像定位与分割、归一化处理等。
定义模型
定义卷积神经网络模型。
def model_conv():
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(15, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])
return model
训练模型
经过五次迭代训练后,识别正确率为99.67%。
搭建系统
系统通过Django开发框架搭建web系统。
项目总结
- 后续系统可采用Keras.js或者Tensorflow.js进行数据处理与模型搭建,客户端不需要再将图像传入服务端,而是在客户端直接进行图像识别处理与结果显示,减轻了服务端的压力,同时也加快了整个四则运算图像系统自动批改的速度。
- 在数据预处理阶段,可采用更好的方法进行图像的定位与分割,提高识别准确率。