基于flask+TensorFlow的手写数字识别模型Web应用开发

2019-01-06 06:38张磊李斌李臻
新一代 2019年22期

张磊 李斌 李臻

摘 要:手写数字识别是研究图像识别、深度学习技术的典型案例,本文中以手写数字识别Web应用程序开发为例,介绍了基于flask框架的TensorFlow+Python Web开发技术和相关的编程方法。

关键词:flask框架;Python Web开发;手写数字识别

一、引言

图像识别是深度学习技术最广泛的应用之一,手写数字识别是学习和研究深度学习、图像识别的典型案例,本文中使用TensorFlow(以下简称TF)框架训练手写数字识别模型、Python语言作为Web开发工具,基于flask框架实现了一款手写数字识别Web应用程序,为TF模型在Web中部署和开发应用提供参考。

二、模型训练和保存

手写数字识别采用LeNet-5 CNN模型。LeNet-5由INPUT层、2个卷积层、2个池化层、3个全连接层构成。INPUT层的输入尺寸为32×32像素手写数字图像,手写数字包含数字“0~9”,OUTPUT层输出One-Hot格式的10分类结果。

训练模型的MNIST数据集中图片尺寸为28×28像素,像素点用8位灰度值表示。由于LeNet-5模型INPUT层的输入尺寸为32×32像素,MNIST数据集中原始图像尺寸并不符合模型输入要求,使用numpy库(简称为np)中的数组填充函数np.pad()將原始图像四周填充两圈数字“0”,得到尺寸32×32像素的新图像。MNIST数据集类别标签默认是One-Hot格式。

TF是基于计算图的框架,使用TF框架训练LeNet-5模型,根据模型结构定义的神经网络前向传播过程构造出计算图,计算图中描述张量在节点之间从前到后的流动过程。训练模型在会话进行,调用tf.Session()可生成会话,并创建默认计算图。在会话中不断喂入数据,反复执行反向传播优化算法,确定最优的模型参数。

模型训练完,将模型保存成TF检查点。检查点可在Web服务器端由程序调用,在TF中,tf.train.Saver对象的save()和restore()方法分别用于保存和恢复模型参数。

三、Web应用程序中使用TF模型

将手写数字识别的TF模型部署到Web中,前端负责获取用户在页面上手写数字图像并预处理,再向服务器发出AJAX请求,请求内容为待识别的图像。服务器端程序生成TF会话并加载训练好的模型,调用相应的视图函数将请求数据送入TF会话中计算,最后将识别结果异步回传到前端。

(一)前端页面功能实现

页面文件中主要包括绘制画布、预览画布、提交按钮、清除按钮和用于显示分类结果的表格等界面元素。

绘制画布是一个用canvas标签实现的320×320像素的画布。使用canvas对象的getContext()方法可得到一个绘图环境,该环境提供了在画布上绘图的方法和属性。绘制画布绑定鼠标事件的监听器,当用户按下并拖动鼠标时,可将鼠标移动的路径(经过的像素点)呈现到绘制画布上,这样用户可在绘制画布上使用鼠标书写数字。手写数字图像存储为uint8类型的像素矩阵,每一个位置的像素点包括R、G、B、A四个通道值。

模型INPUT层输入图像为尺寸32×32像素的灰度图,尺寸为320×320像素原始手写数字图像应在前端完成尺寸调整和灰度化等预处理,再发送给服务器,以便减少向服务器传输的图像数据量。

预处理后的手写数字图像存储在JavaScript数组中,并在预览画布(canvas标签对象)中显示。使用JSON.stringify()方法将JavaScript数组中图像数据转换为JSON字符串形式的数据,再将这些数据以POST方式向服务器特定URL发送AJAX请求。

(二)服务器端程序功能实现

服务器程序主要功能:一是生成TF会话并载入模型(模型结构和模型参数);二是渲染前端页面、响应前端请求、处理数据以及返回识别的结果。

服务程序生成会话并将模型结构导入至会话的默认图,调用tf.train.import_meta_graph()函数导入模型结构,再还原模型参数。利用tf.get_default_graph().get_tensor_by_name()函数可通过节点名称获取到模型INPUT层的输入变量x与keep_prob、OUTPUT层的输出变量y。

flask中路由解析模块Werkzeug可将URL请求映射至相应的处理函数中完成业务逻辑和数据的处理。手写数字识别前端页面请求的数据传入服务器端flask实例程序,由Werkzeug对URL进行路由解析,找到分类识别视图函数。视图函数中使用flask.request.json获取手写数字图像数据,对数据做归一化处理后喂入模型,可返回手写数字的分类识别结果。

四、结语

本文以手写数字识别Web应用程序为例,介绍了TF机器学习模型应用到基于flask框架的Python Web开发中的关键技术和编程方法,在TF+Web的应用场景下,Web后端和TF程序统一使用Python语言开发,编程简单高效。

参考文献:

[1]李超,徐云龙,华中伟,等.一种基于Python Flask的Web服务器端设计[J].信息与电脑(理论版),2019,8:87-88.

[2]马旭,王淑.基于Flask框架的展示型网站的设计与实现[J].数字技术与应用,2018(11):137-138.