基于 YOLOv8 目标检测框架的手势识别系统,支持图片、视频、摄像头实时检测,并提供训练、可视化与历史管理等功能。


一、项目概述

本系统采用 YOLOv8 作为检测骨干网络,对 18 类手势进行识别。系统包含完整的训练流程与桌面端应用,支持用户登录、多源检测、结果导出及训练指标可视化。


二、数据集

2.1 数据格式

数据集采用 YOLO 格式 组织:

  • 训练集gesture_datasets/train/images/(图片)、gesture_datasets/train/labels/(标注)
  • 验证集gesture_datasets/val/images/(图片)、gesture_datasets/val/labels/(标注)
  • 配置文件gesture_datasets/data.yaml

2.2 图片数量

划分 图片数量
训练集 34,723 张
验证集 8,132 张
合计 42,855 张

2.3 手势类别(18 类)

序号 类别名称 序号 类别名称
0 call(打电话) 9 peace(比耶)
1 dislike(不喜欢) 10 peace_inverted(倒比耶)
2 fist(握拳) 11 rock(摇滚手势)
3 four(四) 12 stop(停止)
4 like(点赞) 13 stop_inverted(倒停止)
5 mute(静音) 14 three(三)
6 ok(OK) 15 three2(三变体)
7 one(一) 16 two_up(二向上)
8 palm(手掌) 17 two_up_inverted(倒二向上)

2.4 支持图片格式

训练与检测均支持常见图像格式:JPG / JPEG / PNG / BMP


三、训练过程

3.1 训练流程

  1. 加载预训练模型(默认 yolov8n.pt
  2. 读取 gesture_datasets/data.yaml 配置的数据集路径
  3. 按配置进行训练(epoch、batch、数据增强等)
  4. 将结果保存至 runs/gesture_train/{时间戳}/

3.2 运行训练

python train.py

3.3 训练输出

训练完成后,在 runs/gesture_train/{时间戳}/ 下生成:

文件/目录 说明
weights/best.pt 验证集上表现最好的权重
weights/last.pt 最后一轮权重
results.csv 每轮训练指标(损失、mAP、精确率、召回率等)
*.png 训练曲线与指标可视化图

四、训练参数

4.1 模型参数

参数 默认值 说明
预训练模型 yolov8n.pt YOLOv8 nano 版本
输入尺寸 640×640 输入图像分辨率
类别数 18 手势类别数量

4.2 训练超参数

参数 默认值 说明
epochs 100 训练轮数
batch_size 16 批次大小
patience 20 早停耐心值(无提升则提前结束)
save_period 10 每 N 轮保存一次权重
workers 8 数据加载进程数
cache False 是否缓存图像到内存
device 自动 自动选择 CPU/GPU(支持 CUDA)

4.3 学习率与优化

  • 初始学习率:约 0.01
  • 最终学习率:约 0.0002(余弦退火)
  • 动量:0.937
  • 权重衰减:0.0005
  • 预热轮数:3

4.4 数据增强

  • Mosaic:1.0
  • 水平翻转:0.5
  • HSV 增强:H 0.015、S 0.7、V 0.4
  • 平移:0.1
  • 缩放:0.5
  • Auto-augment:randaugment
  • 随机擦除:0.4
  • close_mosaic:最后 10 轮关闭 Mosaic

4.5 推理参数(可配置)

参数 默认值 说明
置信度阈值 0.25 低于此值的检测框被过滤
IoU 阈值 0.45 NMS 时的 IoU 阈值
最大检测数 300 单张图最大保留检测框数量

五、可视化图含义

训练完成后会生成多张指标图,用于分析训练效果。

5.1 训练指标综合图(2×3 子图)

子图 含义
训练损失 box_loss(边界框)、cls_loss(分类)、dfl_loss(分布焦点)随 epoch 变化
验证损失 验证集上的 box_loss、cls_loss、dfl_loss
精确率与召回率 Precision、Recall 随 epoch 变化
mAP 指标 mAP@0.5、mAP@0.5:0.95 随 epoch 变化
学习率 学习率调度曲线
总损失对比 训练总损失与验证总损失对比,用于判断过拟合

5.2 单图说明

图表文件 含义
训练指标综合图.png 上述 6 个子图的综合展示
mAP曲线.png mAP@0.5 与 mAP@0.5:0.95 曲线
训练损失曲线.png box_loss、cls_loss、dfl_loss 三条训练损失曲线
精确率召回率曲线.png Precision、Recall 随 epoch 变化

5.3 指标含义

  • box_loss:边界框回归损失
  • cls_loss:分类损失
  • dfl_loss:分布焦点损失(DFL)
  • Precision:精确率
  • Recall:召回率
  • mAP@0.5:IoU=0.5 时的平均精度
  • mAP@0.5:0.95:IoU 从 0.5 到 0.95 的平均精度

六、系统功能

6.1 用户与入口

  • 用户登录 / 注册(密码加密存储)
  • 默认账号:admin / admin123
  • 启动入口:main.py

6.2 图片检测

  • 上传单张图片(支持 PNG、JPG、JPEG、BMP)
  • 显示检测框、类别、置信度
  • 统计:检测总数、各类别数量、平均/最大置信度
  • 类别分布表、检测详情表
  • 置信度分布直方图
  • 导出:检测结果图、CSV 明细

6.3 视频检测

  • 加载视频文件
  • 按帧间隔进行检测(可配置)
  • 每帧统计与累计统计
  • 导出指定帧

6.4 摄像头检测

  • 选择摄像头(ID 0–10)
  • 实时检测,可开关
  • 可配置检测间隔
  • 截图保存
  • 会话统计
  • 保存到检测历史

6.5 检测历史

  • 查看所有检测记录
  • 按类型筛选:图片 / 视频 / 摄像头
  • 按文件名、类别搜索
  • 查看记录详情
  • 导出历史为 CSV

6.6 模型管理

  • 选择并加载模型文件(.pt
  • 配置置信度、IoU、最大检测数
  • 显示模型信息
  • 设置持久化保存

6.7 训练指标

  • 训练曲线:损失、mAP、精确率、召回率
  • 指标摘要:mAP50、mAP50-95、Precision、Recall
  • 训练生成图表缩略图展示

七、项目技术栈

技术 版本 用途
Python 3.x 运行环境
Ultralytics ≥8.0.0 YOLOv8 训练与推理
PyQt6 ≥6.6.0 桌面 GUI
OpenCV ≥4.8.0 图像与视频处理
Pandas ≥1.5.0 数据处理与 CSV
Matplotlib ≥3.5.0 训练曲线与可视化

八、项目结构

c127/
├── config/
│   ├── __init__.py
│   └── train_config.py          # 训练配置(epoch、batch、路径等)
├── detection_app/               # 主应用包
│   ├── __init__.py
│   ├── config.py               # 应用路径与默认配置
│   ├── pages/                  # 功能页面
│   │   ├── __init__.py
│   │   ├── camera_page.py      # 摄像头检测
│   │   ├── history_page.py     # 检测历史
│   │   ├── image_page.py       # 图片检测
│   │   ├── metrics_page.py     # 训练指标展示
│   │   ├── model_page.py       # 模型管理
│   │   └── video_page.py       # 视频检测
│   ├── services/               # 业务逻辑
│   │   ├── __init__.py
│   │   ├── inference_service.py  # YOLO 推理封装
│   │   └── storage_service.py    # 用户、历史、设置存储
│   ├── utils/
│   │   ├── __init__.py
│   │   ├── qt_helpers.py       # PyQt 辅助函数
│   │   └── styles.py           # 界面样式
│   └── windows/
│       ├── __init__.py
│       ├── login_window.py     # 登录/注册窗口
│       └── main_window.py      # 主窗口
├── gesture_datasets/           # 数据集目录
│   ├── data.yaml               # 数据集配置
│   ├── train/
│   │   ├── images/             # 训练图片
│   │   └── labels/             # 训练标注
│   └── val/
│       ├── images/             # 验证图片
│       └── labels/             # 验证标注
├── runs/                       # 训练输出
│   └── gesture_train/
│       └── {时间戳}/           # 每次训练一个目录
│           ├── weights/
│           │   ├── best.pt
│           │   └── last.pt
│           ├── results.csv
│           └── *.png            # 可视化图
├── utils/
│   ├── __init__.py
│   └── visualize_metrics.py   # 训练指标可视化与报告
├── app_data/                   # 应用数据(自动创建)
│   ├── users.json              # 用户数据
│   ├── history.json            # 检测历史
│   └── settings.json           # 应用设置
├── main.py                     # 应用入口
├── train.py                    # 训练入口
├── generate_training_report.py # 训练报告生成
├── requirements.txt            # 依赖列表
└── README.md                   # 项目说明

九、环境与运行

9.1 安装依赖

pip install -r requirements.txt

9.2 启动应用

python main.py

9.3 生成训练报告

python generate_training_report.py [results.csv路径]

不指定路径时,使用默认 runs/gesture_train/20260225_163759/results.csv


十、说明

  • 模型路径:系统自动选择 runs/gesture_train/ 下最新的 best.pt 作为默认模型
  • 数据存储:用户、历史、设置保存在 app_data/ 目录
  • 窗口标题:基于最佳权重模型的手势识别系统


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐