first commit

This commit is contained in:
douboer
2025-10-30 15:40:56 +08:00
parent fe4a3e7cbf
commit 2fb4b22328
344 changed files with 8595 additions and 567 deletions

269
run.sh Executable file
View File

@@ -0,0 +1,269 @@
#!/bin/bash
# ============================================================================
# YOLO数字识别系统 - 快速运行脚本
# ============================================================================
#
# 功能: 提供交互式菜单,简化常用操作
# 作者: Gavin Chan
# 日期: 2025-10-30
#
# 使用方法:
# ./run.sh # 交互式菜单
#
# 注意事项:
# - 需要先激活虚拟环境(脚本会自动尝试)
# - 确保最佳模型文件存在
# - 识别结果保存在 results/ 目录
# ============================================================================
set -e # 遇到错误立即退出
# ----------------------------------------------------------------------------
# 颜色定义(用于美化输出)
# ----------------------------------------------------------------------------
GREEN='\033[0;32m' # 绿色:成功信息
YELLOW='\033[1;33m' # 黄色:警告或进行中
RED='\033[0;31m' # 红色:错误信息
NC='\033[0m' # 无颜色:重置
# ----------------------------------------------------------------------------
# 标题
# ----------------------------------------------------------------------------
echo "=================================================="
echo "🚀 YOLO数字识别系统 - 快速运行脚本"
echo "=================================================="
# ----------------------------------------------------------------------------
# 1. 激活虚拟环境
# 尝试多个可能的虚拟环境位置,找到第一个存在的就使用
# ----------------------------------------------------------------------------
echo -e "\n${GREEN}1. 激活虚拟环境${NC}"
if [ -d ~/venv ]; then
# 方式1: 用户主目录下的 venv
source ~/venv/bin/activate
echo "✓ 虚拟环境已激活: ~/venv"
elif [ -d venv ]; then
# 方式2: 当前目录下的 venv
source venv/bin/activate
echo "✓ 虚拟环境已激活: ./venv"
else
# 未找到虚拟环境使用系统Python可能缺少依赖
echo "⚠️ 未找到虚拟环境使用系统Python"
fi
# 显示当前工作目录
echo "✓ 工作目录: $(pwd)"
# ----------------------------------------------------------------------------
# 2. 检查依赖包
# 验证必需的Python包是否已安装如果缺少则自动安装
# ----------------------------------------------------------------------------
echo -e "\n${GREEN}2. 检查依赖包${NC}"
if python -c "import ultralytics, cv2, numpy" 2>/dev/null; then
echo "✓ 所有依赖包已安装"
else
echo -e "${RED}✗ 缺少依赖包,正在安装...${NC}"
pip install ultralytics opencv-python numpy
fi
# ----------------------------------------------------------------------------
# 3. 显示操作菜单
# 提供常用功能的快捷入口
# ----------------------------------------------------------------------------
echo -e "\n${GREEN}3. 请选择操作${NC}"
echo "=================================="
echo "1) 识别数字 (使用最佳模型) ⭐推荐"
echo "2) 低阈值识别 (conf=0.15,更多检测)"
echo "3) 高清识别 (imgsz=640更精确)"
echo "4) 查看已有结果和模型信息"
echo "0) 退出"
echo "=================================="
read -p "请输入选项 [0-4]: " choice
# ----------------------------------------------------------------------------
# 配置:最佳模型路径
# 这是训练好的最佳模型使用CLAHE预处理 + 150轮训练
# mAP50 = 0.995,在训练集上接近完美
# ----------------------------------------------------------------------------
BEST_MODEL="runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt"
# ----------------------------------------------------------------------------
# 4. 执行选择的操作
# ----------------------------------------------------------------------------
case $choice in
# ------------------------------------------------------------------------
# 选项1: 标准识别(最常用)
# 使用最佳模型置信度0.2,保存可视化结果
# 适合大多数场景,速度和准确率平衡
# ------------------------------------------------------------------------
1)
echo -e "\n${YELLOW}运行改进版识别(使用最佳模型)...${NC}"
# 检查模型文件是否存在
if [ ! -f "$BEST_MODEL" ]; then
echo -e "${RED}❌ 错误: 模型文件不存在${NC}"
echo " 路径: $BEST_MODEL"
echo " 请先训练模型或检查路径"
exit 1
fi
# 执行识别
python scripts/predict_digits_improved.py \
--model "$BEST_MODEL" \
--source valid \
--conf 0.2 \
--save-vis
# 显示结果位置
echo -e "\n${GREEN}✓ 识别完成!${NC}"
echo "📄 结果文件: results/predictions_improved.txt"
echo "🖼️ 可视化: results/visualizations_improved/"
;;
# ------------------------------------------------------------------------
# 选项2: 低阈值识别
# 降低置信度到0.15,可以检测出更多数字
# 适合图片模糊或数字不清晰的情况
# 可能会有更多误检
# ------------------------------------------------------------------------
2)
echo -e "\n${YELLOW}运行低阈值识别(更敏感)...${NC}"
python scripts/predict_digits_improved.py \
--model "$BEST_MODEL" \
--source valid \
--conf 0.15 \
--output results/predictions_conf015.txt \
--save-vis
echo -e "\n${GREEN}✓ 识别完成!${NC}"
echo "📄 结果文件: results/predictions_conf015.txt"
;;
# ------------------------------------------------------------------------
# 选项3: 高清识别
# 使用更大的输入尺寸(640),提高识别精度
# 适合需要高精度的场景
# 处理速度会变慢约2倍时间
# ------------------------------------------------------------------------
3)
echo -e "\n${YELLOW}运行高清识别(更精确)...${NC}"
python scripts/predict_digits_improved.py \
--model "$BEST_MODEL" \
--source valid \
--imgsz 640 \
--output results/predictions_640.txt \
--save-vis
echo -e "\n${GREEN}✓ 识别完成!${NC}"
echo "📄 结果文件: results/predictions_640.txt"
;;
# ------------------------------------------------------------------------
# 选项4: 查看结果和模型信息
# 显示已有的模型、识别结果和可视化文件
# 不执行任何识别操作
# ------------------------------------------------------------------------
4)
echo -e "\n${YELLOW}查看已有结果和模型信息...${NC}"
echo "=================================="
# 显示最佳模型信息
echo "📦 最佳模型:"
if [ -f "$BEST_MODEL" ]; then
ls -lh "$BEST_MODEL" | awk '{printf " 大小: %s\n", $5}'
echo " 路径: $BEST_MODEL"
else
echo " ⚠️ 模型不存在"
fi
echo ""
# 显示识别结果文件
echo "📄 识别结果文件:"
if ls results/*.txt 1> /dev/null 2>&1; then
ls -lh results/*.txt | awk '{printf " %s (%s)\n", $9, $5}'
else
echo " 暂无结果文件"
fi
echo ""
# 显示可视化目录
echo "🖼️ 可视化结果:"
if ls -d results/visualizations* 1> /dev/null 2>&1; then
ls -d results/visualizations* | sed 's/^/ /'
else
echo " 暂无可视化结果"
fi
echo ""
# 显示所有训练模型
echo "🎯 所有训练模型:"
if ls runs/digit_yolo/*/weights/best.pt 1> /dev/null 2>&1; then
for model in runs/digit_yolo/*/weights/best.pt; do
exp_name=$(dirname $(dirname "$model"))
exp_name=$(basename "$exp_name")
size=$(ls -lh "$model" | awk '{print $5}')
echo " [$exp_name] $size"
done
else
echo " 暂无模型文件"
fi
echo "=================================="
;;
# ------------------------------------------------------------------------
# 选项0: 退出程序
# ------------------------------------------------------------------------
0)
echo -e "\n${GREEN}👋 再见!${NC}"
exit 0
;;
# ------------------------------------------------------------------------
# 无效选项处理
# ------------------------------------------------------------------------
*)
echo -e "\n${RED}❌ 无效选项: $choice${NC}"
echo "请输入 0-4 之间的数字"
exit 1
;;
esac
# ----------------------------------------------------------------------------
# 5. 显示后续操作提示
# ----------------------------------------------------------------------------
echo ""
echo "=================================================="
echo -e "${GREEN}✓ 操作完成!${NC}"
echo "=================================================="
echo ""
# 常用命令提示
echo "📊 查看结果的命令:"
echo " cat results/predictions*.txt # 查看识别结果"
echo " open results/visualizations*/ # 打开可视化图片macOS"
echo ""
# 更多操作提示
echo "🔧 更多操作:"
echo " python scripts/predict_digits_improved.py --help # 查看完整参数说明"
echo " python scripts/preprocess_images.py --help # 图片预处理帮助"
echo ""
# 文档链接
echo "📚 项目文档:"
echo " cat README.md # 完整文档"
echo " cat QUICKSTART.md # 快速开始指南"
echo " cat FINAL_REPORT.md # 项目完成报告"
echo ""