Keras+Flask手写数字识别Web应用
Keras+Flask手写数字识别Web应用
一个基于Keras深度学习框架和Flask Web框架的手写数字识别Web应用,使用MNIST数据集训练,可以识别用户手写的数字(0-9)。
项目概述
本项目实现了一个Web界面,用户可以在画板上手写数字,系统会实时识别并返回预测结果。后端使用Keras构建的卷积神经网络(CNN)模型,前端使用HTML5 Canvas实现手写板功能。
功能特点
- 使用Keras构建的CNN模型进行手写数字识别
- 基于Flask的Web界面,支持用户手写输入
- HTML5 Canvas实现的手写板功能
- 实时数字识别和结果展示
- 使用Redis进行访问统计
- 响应式设计,适配不同设备
技术栈
-
后端:
- Flask:Web框架
- TensorFlow/Keras:深度学习框架
- Redis:访问统计和数据存储
-
前端:
- HTML5 Canvas:手写板实现
- jQuery:前端交互
- Bootstrap:UI框架
模型架构
该项目使用了一个卷积神经网络(CNN)模型,具有以下结构:
-
第一组卷积层
- 32个5x5卷积核,SAME填充,ReLU激活
- 32个5x5卷积核,SAME填充,ReLU激活
- 2x2最大池化
- 25%的Dropout
-
第二组卷积层
- 64个3x3卷积核,SAME填充,ReLU激活
- 64个3x3卷积核,SAME填充,ReLU激活
- 2x2最大池化,步长为2
- 25%的Dropout
-
全连接层
- Flatten层
- 256个神经元,ReLU激活
- 25%的Dropout
- 10个神经元输出层,Softmax激活
模型在MNIST数据集上训练,准确率超过99%。
安装指南
前置要求
- Python 3.7+
- Redis
安装步骤
1 创建并激活虚拟环境:
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
- 安装依赖:
pip install -r requirements.txt
-
确保Redis服务器正在运行
-
启动应用
python app.py
- 访问应用
在浏览器中打开 http://localhost:5000
使用方法
- 在画布上用鼠标或触控笔绘制一个数字(0-9)
- 点击"识别"按钮提交图像进行识别
- 系统将显示识别结果和置信度
- 使用"清除"按钮重置画布
项目结构
keras_mnist-flask/
├── app.py # Flask应用主文件
├── redis_util.py # Redis工具函数
├── requirements.txt # 项目依赖
├── model/
│ ├── model.json # 模型架构
│ ├── model.keras # 训练好的模型
│ ├── train.py # 模型训练脚本
│ └── __init__.py
├── static/
│ ├── index.js # 前端JavaScript
│ └── jquery-3.2.0.min.js
└── templates/└── index.html # 前端HTML模板
API接口
识别手写数字
- URL:
/api/mnist
- 方法: POST
- 请求体:
{"image": "base64编码的图像数据" }
- 响应:
{"code": 0,"data": {"num": "预测的数字","probability": "置信度"} }
获取访问统计
- URL:
/api/visit
- 方法: GET
- 响应:
{"code": 0,"data": {"all": "总访问次数","today": "今日访问次数"} }
自定义配置
Redis配置
在redis_util.py
文件中修改Redis连接配置:
REDIS_HOST = "127.0.0.1" # Redis服务器地址
REDIS_PASSWORD = "" # Redis密码,为空表示无密码
服务器配置
在app.py
文件中修改Flask服务器配置:
if __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=True)
训练自己的模型
如果你想重新训练模型,可以运行:
cd model
python train.py
训练完成后,模型将保存在model
目录中。
项目地址:https://github.com/yizhishiliu/keras_mnist-flask