# 项目结构说明 ## 📁 目录结构 ``` digit_cracker/ ├── README.md # 完整项目文档 ├── QUICKSTART.md # 快速开始指南 ├── FINAL_REPORT.md # 项目完成报告 ├── PROJECT_STRUCTURE.md # 本文件 ├── run.sh # 交互式运行脚本 ├── .gitignore # Git忽略文件配置 │ ├── scripts/ # Python脚本目录 │ ├── prepare_yolo_dataset.py # [1] COCO→YOLO数据集转换 │ ├── train_yolo.py # [2] YOLO模型训练 │ ├── predict_digits.py # [3] 基础数字识别 │ ├── predict_digits_improved.py # [4] 改进版数字识别 ⭐推荐 │ ├── preprocess_images.py # [5] 图片预处理工具 │ ├── train_with_preprocessing.py # [6] 预处理+训练流程 │ ├── compare_results.py # [7] 结果对比工具 │ └── run_all.py # [8] 完整流程自动化 │ ├── digit-validation/ # 原始训练数据(COCO格式) │ ├── coco.json # COCO标注文件 │ └── images/ # 训练图片(49张) │ ├── valid/ # 待识别图片(15张) │ ├── YZM.jpeg │ ├── YZM-2.jpeg │ └── ... │ ├── yolo_dataset/ # YOLO格式数据集 │ ├── dataset.yaml # 数据集配置文件 │ ├── images/ # 图片(训练集+验证集) │ │ ├── train/ # 训练集图片(39张) │ │ └── val/ # 验证集图片(10张) │ └── labels/ # YOLO格式标注 │ ├── train/ # 训练集标注(.txt) │ └── val/ # 验证集标注(.txt) │ ├── runs/ # 训练输出目录 │ └── digit_yolo/ # YOLO训练实验 │ ├── exp1/ # 基础模型(100轮,无预处理) │ │ ├── weights/ │ │ │ ├── best.pt # 最佳权重 │ │ │ └── last.pt # 最后权重 │ │ ├── results.csv # 训练指标 │ │ └── args.yaml # 训练参数 │ │ │ └── exp_preprocessed_color_150/ # 优化模型(150轮,CLAHE预处理)⭐最佳 │ ├── weights/ │ │ ├── best.pt # 最佳权重(5.9MB)⭐⭐⭐ │ │ └── last.pt # 最后权重(5.9MB) │ ├── results.csv # 训练指标 │ └── args.yaml # 训练参数 │ ├── results/ # 识别结果目录 │ ├── predictions.txt # 最新识别结果 │ ├── predictions_improved.txt # 改进版识别结果 │ └── visualizations/ # 可视化标注图片 │ └── yolov8n.pt # YOLOv8n预训练模型(6.2MB) ``` ## 📝 文件说明 ### 核心脚本 #### 1. `prepare_yolo_dataset.py` - 数据集准备 **功能**: 将COCO格式数据集转换为YOLO格式 **输入**: `digit-validation/coco.json` **输出**: `yolo_dataset/` (包含images和labels) **用法**: ```bash python scripts/prepare_yolo_dataset.py ``` #### 2. `train_yolo.py` - 模型训练 **功能**: 训练YOLO模型 **参数**: - `--data`: 数据集配置文件(dataset.yaml) - `--model`: 预训练模型(yolov8n.pt) - `--epochs`: 训练轮数 - `--batch`: 批次大小 - `--name`: 实验名称 **用法**: ```bash python scripts/train_yolo.py --epochs 150 --name my_experiment ``` #### 3. `predict_digits.py` - 基础识别 **功能**: 基础版数字识别(无智能过滤) **参数**: - `--model`: 模型路径 - `--source`: 图片目录 - `--conf`: 置信度阈值(默认0.25) - `--save-vis`: 保存可视化结果 **用法**: ```bash python scripts/predict_digits.py --model runs/digit_yolo/exp1/weights/best.pt ``` #### 4. `predict_digits_improved.py` - 改进版识别 ⭐ **功能**: 带智能过滤的数字识别(推荐使用) **特性**: - 置信度过滤 - 位置异常检测 - 数量异常处理(<4或>4个数字) - 从左到右排序 **用法**: ```bash python scripts/predict_digits_improved.py \ --model runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt \ --source valid \ --conf 0.2 \ --save-vis ``` #### 5. `preprocess_images.py` - 图片预处理 **功能**: 对图片进行预处理以提升识别效果 **预处理方法**: - `auto`: 自动增强(去噪+锐化) - `clahe`: 对比度限制自适应直方图均衡化 ⭐推荐 - `binary`: 自适应二值化 - `denoise`: 去噪 - `sharpen`: 锐化 - `combined`: 组合方法 **参数**: - `--input-dir`: 输入图片目录 - `--output-dir`: 输出目录 - `--method`: 预处理方法 - `--keep-color`: 保持彩色(重要!) **用法**: ```bash python scripts/preprocess_images.py \ --input-dir digit-validation/images \ --output-dir digit-validation-processed \ --method clahe \ --keep-color ``` #### 6. `train_with_preprocessing.py` - 完整训练流程 ⭐ **功能**: 自动化预处理+训练+测试流程 **流程**: 1. 预处理训练图片 2. 准备YOLO数据集 3. 训练模型 4. 测试识别效果 **用法**: ```bash python scripts/train_with_preprocessing.py \ --preprocess-method clahe \ --keep-color \ --epochs 150 \ --exp-name my_experiment ``` #### 7. `compare_results.py` - 结果对比 **功能**: 对比不同模型的识别效果 **输出**: Markdown格式的对比报告 **用法**: ```bash python scripts/compare_results.py \ --original results/predictions_improved.txt \ --preprocessed results/predictions_exp_preprocessed_150.txt ``` #### 8. `run_all.py` - 完整流程自动化 **功能**: 一键运行完整训练+识别流程 **用法**: ```bash python scripts/run_all.py --epochs 100 ``` ### 配置文件 #### `yolo_dataset/dataset.yaml` YOLO数据集配置文件,定义了: - 数据集路径 - 类别数量(10个,0-9) - 类别名称 #### `runs/digit_yolo/*/args.yaml` 每次训练的参数记录 ### 输出文件 #### 训练输出 - `runs/digit_yolo/*/weights/best.pt`: 最佳模型权重 - `runs/digit_yolo/*/weights/last.pt`: 最后轮次权重 - `runs/digit_yolo/*/results.csv`: 训练指标(loss, mAP等) #### 识别输出 - `results/predictions*.txt`: 识别结果(制表符分隔) - `results/visualizations*/`: 带标注的可视化图片 ## 🚀 使用流程 ### 场景1: 直接使用最佳模型识别 ```bash # 1. 激活环境 source ~/venv/bin/activate # 2. 运行识别 python scripts/predict_digits_improved.py \ --model runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt \ --source valid \ --conf 0.2 \ --save-vis # 3. 查看结果 cat results/predictions_improved.txt ``` ### 场景2: 重新训练模型 ```bash # 使用CLAHE预处理 + 150轮训练 python scripts/train_with_preprocessing.py \ --preprocess-method clahe \ --keep-color \ --epochs 150 \ --exp-name my_retrain ``` ### 场景3: 使用交互式脚本 ```bash ./run.sh # 然后根据菜单选择操作 ``` ## 📊 数据流向 ``` 原始COCO数据 ↓ [prepare_yolo_dataset.py] ↓ YOLO格式数据 (yolo_dataset/) ↓ [preprocess_images.py] (可选) ↓ 预处理数据 ↓ [train_yolo.py] ↓ 训练好的模型 (runs/digit_yolo/) ↓ [predict_digits_improved.py] ↓ 识别结果 (results/) ``` ## 🎯 关键文件 1. **最佳模型**: `runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt` 2. **推荐脚本**: `scripts/predict_digits_improved.py` 3. **完整流程**: `scripts/train_with_preprocessing.py` 4. **快速运行**: `run.sh` ## 💡 文件命名规范 - **训练实验**: `exp_<方法>_<轮数>` (如 `exp_preprocessed_color_150`) - **识别结果**: `predictions_<配置>.txt` (如 `predictions_improved.txt`) - **可视化**: `visualizations_<配置>/` (如 `visualizations_improved/`) ## 🧹 已清理文件 以下文件已被清理(不再需要): - ❌ 失败的灰度预处理实验数据 - ❌ 早期验证实验(exp1_val, exp1_valid) - ❌ 过时的预测结果 - ❌ 临时预处理文档 - ❌ 初始待办清单 ## 📦 依赖安装 ```bash pip install ultralytics opencv-python numpy tqdm matplotlib ``` ## 🔗 相关文档 - [完整文档](README.md) - [快速开始](QUICKSTART.md) - [项目报告](FINAL_REPORT.md) --- *最后更新: 2025-10-30*