# OCR手写数字识别
**Repository Path**: code-liang/OCR-
## Basic Information
- **Project Name**: OCR手写数字识别
- **Description**: 为了应付你邑丧心病狂的讲座作业而赶工出来的
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-18
- **Last Updated**: 2025-05-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OCR-手写数字识别
由于某大学讲座丧心病狂的作业过于不当人,因而怒写下
C2动漫社专用(骗你的,不是也能用)
---
## 🧠 项目简介
这是一个基于 TensorFlow 和 CNN(卷积神经网络)的手写数字识别项目。你可以训练模型识别 MNIST 手写数字集,然后通过图形界面上传自己的数字图片,模型将预测你写的是哪个数字!
它包含了:
- 手写数字的训练模型(基于经典的 MNIST 数据集)
- 图形界面(Tkinter 实现)
- 支持图片上传和实时识别
---
## 📦 依赖安装
在运行此项目之前,请确保你已经安装了以下依赖(一行行,不要一口气粘贴):
```bash
pip install tensorflow
pip install pillow
pip install numpy
```
如果你不便使用VPN,请使用阿里云镜像
```bash
pip install tensorflow -i https://mirrors.aliyun.com/pypi/simple/
pip install pillow -i https://mirrors.aliyun.com/pypi/simple/
pip install numpy -i https://mirrors.aliyun.com/pypi/simple/
```
或者也可以用清华大学镜像
```bash
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://mirrors.aliyun.com/pypi/simple/
```
对于 Windows 或 macOS,通常在安装 Python 时会自动包含 Tkinter。
---
## 📁 文件结构说明
```plaintext
.
├── data/ # 可选:我从互联网收集的一组手写数字图片(非必须,模型训练不依赖)
│ └── ...
├── MNIST/ # 可选:本地 MNIST 数据集(第一次运行main.py后生成)
│ └── ...
├── mnist_cnn_model.h5 # 可选:已训练好的 CNN 模型(第一次运行main.py后生成)
├── main.py # 主程序文件(含模型训练 + GUI 界面)
```
### 📂 `data/` 文件夹
图片库,存放手写的数字图像方便寻找。格式应为 `.png` 或 `.jpg`,建议:
* 图像清晰
* 图片应该为黑底白字或者白底黑字
* 单个数字居中
### 📂 `MNIST/` 文件夹
如果你希望使用本地数据集进行训练,可以将数据放在此文件夹内。但项目默认会从 TensorFlow 自动下载数据,因此**不是必需的**。
### 📄 `mnist_cnn_model.h5`
* 模型训练完成后自动生成。
* 这是一个包含 CNN 权重和结构的模型文件。
* 后续运行将直接加载该模型,无需重复训练。
---
## 🛠️ 使用方法
1. 运行程序:
```bash
python main.py
```
3. 等待训练完毕后,GUI 界面将会弹出,点击 **“上传图像”** 按钮,选择你写的数字图片。
4. 模型将识别图片中的数字并显示预测结果。
---
## 🧪 模型结构简介
训练使用的是一个简洁但有效的卷积神经网络结构:
```text
Input: 28x28 grayscale image
↓ Conv2D (32 filters, 3x3, ReLU)
↓ MaxPooling2D (2x2)
↓ Flatten
↓ Dense (128, ReLU)
↓ Dense (10, Softmax)
Output: Probability of digits 0~9
```
* 使用 `ImageDataGenerator` 进行轻度数据增强(旋转、平移、缩放)
* 训练集划分 10% 作为验证集
* 使用 `Adam` 优化器,训练 10 个 epoch
---
## ✨ 展示效果
> ✅ 输入图像 → 🤖 模型识别 → 🎉 输出结果!
程序会自动对上传图片进行以下处理:
* 转换为灰度
* 二值化 + 反转(如有需要)
* 缩放至 28x28 尺寸
* 归一化输入数据
识别结果将在 GUI 界面上实时显示!
---
## 💡 小贴士
* 上传图像应尽量清晰、单个数字居中。
* 支持任意图片尺寸,程序会自动适配。
* 上传图片应该为黑底白字或者白底黑字
* 训练时间大概在十分钟以内