AI APPLICATION · 2026
Digit Lab
从 CNN 训练到 Web 应用的手写数字识别项目
Digit Lab 是一个手写数字识别项目:在浏览器画布上写一个数字,系统给出识别结果和 0–9 的概率分布。它是我的 Python 课程设计项目,从模型训练一直做到一个可以交互的 Web 应用。
LIVE DEMO
模型在浏览器本地运行,绘制内容不会上传。首次使用需要加载本地推理组件。
PREDICTION
–
训练与推理
模型是自己写的轻量 CNN:两层卷积,通道从 1 → 32 → 64,两次池化,最后进入 128 → 10 的全连接分类器,用 PyTorch 实现。
数据是 MNIST 体系:本地存在 train.csv / test.csv 就用本地 CSV,否则通过 torchvision 下载 MNIST;输入统一为 28×28 灰度图,用 MNIST 的 mean/std 归一化。
训练用 CrossEntropyLoss + Adam,每个 epoch 之后在测试集上算一次 accuracy,并保存模型权重。
当前公开 checkpoint 在 MNIST 官方测试集的 10,000 个样本上取得 99.0% 的准确率(9900/10000)。网页中的实际手写输入与 MNIST 数据分布并不完全相同,因此实际体验也会受到书写方式影响。
Web 端
Flask 后端负责加载模型和推理。浏览器里 Canvas 收集手写输入,前端把 28×28 的像素数组发给 /api/predict,识别在服务端完成,而不是在浏览器里。
识别结果包括预测数字和 0–9 概率。游客可以直接识别;注册/登录后还能保存识别历史,用户和历史记录存在 SQLite 里。
从模型到应用
从模型到应用,关键是把几段原本分开的流程接起来:浏览器里的手写轨迹要转换成模型接受的 28×28 灰度输入,预处理必须和训练时保持一致;模型推理、Web API、Canvas 交互、用户认证和历史记录,要连成一条真正能用的链路。
现状
项目目前以本地可运行的 Web 应用和公开源码形式保留,训练、推理、Web、账户与历史记录等部分均已完成。暂未提供公开在线 demo。
复盘
回看这个项目,训练模型其实只占了一小部分,真正决定体验的是前后那一圈:输入怎么处理、接口怎么设计、状态和记录怎么存。做完之后,我慢慢习惯把一个 AI 项目想成一条完整链路,而不是一个模型。