# 数字识别 **Repository Path**: tufgjfcc/digit-recognition ## Basic Information - **Project Name**: 数字识别 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手写数字识别系统 基于LeNet-5卷积神经网络的手写数字识别项目,使用PyTorch框架实现,支持MNIST数据集的训练和测试,以及自定义手写数字图片的识别。 ## 项目概述 本项目是一个完整的机器学习课程设计项目,实现了从数据预处理、模型训练到实际应用的完整流程。系统能够识别0-9的手写数字,并提供图形化界面和Web界面两种使用方式。 ## 功能特性 - **模型训练**: 使用LeNet-5架构在MNIST数据集上训练 - **图片识别**: 支持上传手写数字图片进行实时识别 - **多种界面**: 提供Tkinter桌面应用和Web应用两种界面 - **模型管理**: 支持模型保存、加载和重新训练 - **可视化**: 提供训练过程可视化和预测结果展示 - **测试功能**: 包含自定义测试图片的批量测试 ## 项目结构 ``` 机器学习课程设计/ ├── app.py # 主应用程序(Tkinter界面) ├── model.py # 模型定义和训练脚本 ├── test.py # 测试脚本和可视化 ├── index.html # Web界面 ├── LeNet5.pth # 训练好的模型权重文件 ├── MNIST/ # MNIST数据集 │ ├── train-images-idx3-ubyte.gz │ ├── train-labels-idx1-ubyte.gz │ ├── t10k-images-idx3-ubyte.gz │ └── t10k-labels-idx1-ubyte.gz ├── mnist_jpg/ # 转换后的JPG格式图片 ├── 测试/ # 自定义测试图片 │ ├── *.png │ └── *.jpg └── uploads/ # 上传文件存储目录 ``` ## 技术栈 - **深度学习框架**: PyTorch - **图像处理**: PIL (Pillow) - **数据处理**: NumPy - **可视化**: Matplotlib - **GUI框架**: Tkinter - **Web框架**: Flask (通过HTML界面) - **数据集**: MNIST手写数字数据集 ## 模型架构 ### LeNet-5网络结构 ``` 输入层: 28×28×1 (灰度图像) ├── 卷积层1: 6个5×5卷积核 → 24×24×6 ├── 池化层1: 2×2最大池化 → 12×12×6 ├── 卷积层2: 16个5×5卷积核 → 8×8×16 ├── 池化层2: 2×2最大池化 → 4×4×16 ├── 全连接层1: 256 → 120 ├── 全连接层2: 120 → 84 └── 输出层: 84 → 10 (数字0-9) ``` ### 训练参数 - **优化器**: SGD (随机梯度下降) - **学习率**: 0.01 (model.py) / 0.001 (test.py) - **动量**: 0.9 - **批次大小**: 64 (model.py) / 32 (test.py) - **训练轮数**: 10 epochs - **损失函数**: CrossEntropyLoss ## 安装和运行 ### 环境要求 ```bash Python 3.7+ PyTorch 1.0+ PIL (Pillow) NumPy Matplotlib ``` ### 安装依赖 ```bash pip install torch torchvision pip install pillow numpy matplotlib ``` ### 运行方式 #### 1. 训练模型 ```bash python model.py ``` #### 2. 测试模型 ```bash python test.py ``` #### 3. 启动桌面应用 ```bash python app.py ``` ## 使用说明 ### 桌面应用 (app.py) 1. 运行 `python app.py` 启动图形界面 2. 点击"上传图片并预测"按钮 3. 选择手写数字图片文件 4. 查看预测结果和置信度 ### 测试脚本 (test.py) 1. 运行 `python test.py` 执行完整测试流程 2. 自动加载已训练模型或重新训练 3. 在测试集上评估模型性能 4. 可视化测试结果和自定义图片预测 ### 模型训练 (model.py) 1. 运行 `python model.py` 开始训练 2. 自动检查是否存在预训练模型 3. 如无预训练模型,则开始10轮训练 4. 训练完成后保存模型权重到 `LeNet5.pth` ## 数据集 ### MNIST数据集 - **训练集**: 60,000张28×28像素的手写数字图片 - **测试集**: 10,000张28×28像素的手写数字图片 - **类别**: 0-9共10个数字类别 - **格式**: 原始IDX格式,已转换为JPG格式存储 ### 数据预处理 ```python transform = transforms.Compose([ transforms.Resize((28, 28)), transforms.Grayscale(num_output_channels=1), transforms.ToTensor(), transforms.Normalize((0.1037,), (0.3081,)) ]) ``` ## 性能指标 - **测试集准确率**: 通常在95%以上 - **模型大小**: 约60KB (LeNet5.pth) - **推理速度**: 单张图片 < 1ms (GPU) - **内存占用**: 训练时约200MB ## 自定义测试 项目包含 `测试/` 目录,存放自定义手写数字图片: - 支持PNG和JPG格式 - 自动调整图片大小为28×28像素 - 转换为灰度图像进行预测 - 显示预测结果和可视化 ## 项目特色 1. **完整的ML流程**: 从数据加载到模型部署的完整实现 2. **多种使用方式**: 支持命令行、GUI和Web三种使用方式 3. **可视化功能**: 训练过程、测试结果和预测图片的可视化 4. **模块化设计**: 清晰的代码结构,便于理解和扩展 5. **实用性强**: 可直接用于实际的手写数字识别任务 ## 扩展功能 - 支持更多数字识别(如手写字母) - 添加数据增强技术提高模型鲁棒性 - 实现模型压缩和量化 - 添加Web API接口 - 支持批量图片处理 ## 注意事项 1. 确保MNIST数据集文件完整 2. 首次运行需要训练模型,可能需要几分钟时间 3. 建议使用GPU加速训练(如果可用) 4. 上传的图片应为清晰的手写数字,背景尽量简单 ## 作者信息 机器学习课程设计项目 - 实现时间: 2024年 - 技术栈: PyTorch + Python - 应用场景: 手写数字识别、机器学习教学 ## 许可证 本项目仅用于学习和研究目的。