270 lines
9.8 KiB
Bash
Executable File
270 lines
9.8 KiB
Bash
Executable File
#!/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 ""
|