本项目是一套基于 YOLOv8 的手势识别系统,以 18 类手势目标检测数据集 为数据基础,面向十八类手势的定位与识别完成模型训练、评估与系统应用。系统提供 Web 端和 PyQt6 桌面端,支持图片、视频和摄像头输入,并集成结果查看、历史查询、模型管理与训练指标展示,适用于项目设计、课程实践和答辩展示。
一、项目简介
使用十八类手势目标检测数据,完成手部位置与手势类别预测。系统将原图、手势框、坐标明细与人工复核关联,并提供批量任务、手势图鉴、历史备注、收藏与报告导出。
| 组成 | 项目内容 |
|---|---|
| 数据集 | 18 类手势目标检测数据集 |
| 模型 | YOLOv8n |
| 识别任务 | 十八类手势的定位与识别 |
| 实验资料 | 训练参数、日志、权重与已有图表 |
| 应用端 | 桌面界面与浏览器操作界面 |
二、系统功能设计
2.1 登录与数据总览
提供登录与注册,侧栏组织图片、批量、视频、摄像头、图鉴、历史、模型和指标。数据总览汇总现有任务,便于进入具体结果。

2.2 图片识别
检测页面展示手势框、类别、置信度、坐标与实际推理耗时,支持原图和标注结果对照,并可导出标注图片与目标明细。

2.3 批量与视频识别
单批最多处理 50 张图片,显示后台进度并支持取消;部分文件失败时保留其他已完成结果。视频通过采样画面检测,可导出标注视频和明细。

2.4 结果复核与收藏
识别完成后可以进行人工标记、填写备注和收藏记录,将模型输出与人工判断分别保留,便于筛选需要再次检查的样本。

2.5 手势图鉴与报告
图鉴展示 18 类真实验证集样图,可送入识别页继续检测;历史支持查询、人工标记、备注、收藏与筛选导出,并提供可打印报告。

2.6 模型与训练指标
模型管理支持既有权重切换和推理参数设置,训练指标读取真实 CSV,展示损失、Precision、Recall 与 mAP,分别标注峰值和最后一轮结果。

三、技术栈
| 类别 | 技术及用途 |
|---|---|
| 编程语言 | Python、JavaScript |
| 深度学习框架 | PyTorch |
| 模型训练与推理 | Ultralytics YOLOv8 |
| 桌面界面 | PyQt6 |
| Web 服务 | FastAPI |
| Web 前端 | HTML、CSS、JavaScript |
| 图像与视频处理 | OpenCV、NumPy |
| 训练日志与离线绘图 | Matplotlib;CSV 训练记录 |
| 结果保存 | Web 独立目录中的账号、任务、历史与结果文件 |
四、项目结构
项目将训练代码、界面、模型产物和 Web 服务分别组织,主要目录如下:
text
c127/
├─ app_data/
├─ config/
├─ data/
├─ detection_app/
├─ exports/
├─ generate_training_report.py
├─ main.py
├─ requirements.txt
├─ runs/
├─ train.py
├─ utils/
├─ 训练指标分析报告.md
├─ 项目说明文档.md
└─ web/
├─ backend/ # 服务接口与推理任务
├─ frontend/ # 页面与交互
└─ data/ # Web 独立运行数据
本文对应的训练日志位于 runs/gesture_train/20260225_163759/results.csv。 数据集按实际配置定位;浏览器端的运行结果独立保存在 Web 数据目录。
五、数据集说明
5.1 数据集与识别任务
项目使用 18 类手势目标检测数据集,面向十八类手势的定位与识别。每个目标由类别与边界框共同描述,模型输出位置及对应预测分数。

5.2 数据规模与划分
以下数量按当前本机配套数据目录统计;所列划分对应本项目的数据组织。
| 数据划分 | 图像数量 |
|---|---|
| 训练集 | 34,723 |
| 验证集 | 8,132 |
| 合计 | 42,855 |
5.3 类别与标注格式
| 类别编号 | 类别名称 | 中文含义 |
|---|---|---|
| 0 | call | 打电话 |
| 1 | dislike | 不喜欢 |
| 2 | fist | 握拳 |
| 3 | four | 四 |
| 4 | like | 点赞 |
| 5 | mute | 静音 |
| 6 | ok | OK |
| 7 | one | 一 |
| 8 | palm | 手掌 |
| 9 | peace | 比耶 |
| 10 | peace_inverted | 倒比耶 |
| 11 | rock | 摇滚手势 |
| 12 | stop | 停止 |
| 13 | stop_inverted | 倒停止 |
| 14 | three | 三 |
| 15 | three2 | 三变体 |
| 16 | two_up | 二向上 |
| 17 | two_up_inverted | 倒二向上 |
YOLO 标注按每行一个目标组织:
text
class_id center_x center_y width height
中心点坐标与宽高采用相对图像尺寸的归一化值,图像与 TXT 标注按文件名对应。

六、模型训练过程
6.1 训练流程
训练代码由 train.py 组织,先读取图像、类别与划分,再加载预训练模型进行训练,并保留逐轮日志与已有权重。
- 按当前数据目录读取图像及对应标签。
- 将输入调整为实验配置的尺寸,并应用训练预处理。
- 加载基础模型,在对应类别上进行训练。
- 在验证阶段计算指标并保存日志及权重。
- 使用已有训练图表分析结果,并在系统中加载权重开展推理。
6.2 模型与训练参数
| 参数 | 本次记录 |
|---|---|
| 基础模型 | YOLOv8n |
| 配置轮数 | 100 |
| 日志实际轮数 | 100 |
| 输入尺寸 | 640 × 640 |
| Batch Size | 16 |
| 优化器配置 | auto |
| 预热轮数 | 3.0 |
| DataLoader Workers | 8 |
日志最后一行累计耗时为 35,018.00 秒,约 583.6 分钟。 数据增强与学习率调度以本次参数记录和逐轮 CSV 为准;配置值与实际日志中的学习率分别读取。
6.3 训练产物
args.yaml:本次实验参数。results.csv:每一轮损失、检测指标和学习率。weights/:已保存的模型权重。- 训练图表:原始产物中的曲线、分布或评估图,见第八节。
七、训练结果与核心指标
7.1 最后一轮结果
以下为当前实验 CSV 的第 100 轮验证结果:
| 指标 | 日志数值 | 百分比 |
|---|---|---|
| Precision | 0.98303 | 98.303% |
| Recall | 0.97932 | 97.932% |
| mAP@0.5 | 0.99158 | 99.158% |
| mAP@0.5:0.95 | 0.9153 | 91.530% |
7.2 各指标最高值
| 指标 | 最高值 | 对应轮次 |
|---|---|---|
| Precision | 0.98742 | 第 83 轮 |
| Recall | 0.98028 | 第 92 轮 |
| mAP@0.5 | 0.99158 | 第 100 轮 |
| mAP@0.5:0.95 | 0.9153 | 第 100 轮 |
单项峰值可能出现在不同轮次;末轮表用于查看同一轮完整结果,峰值表用于查看各指标在本次训练中的最高记录。
7.3 结果分析
本次手势实验在 mAP@0.5 和严格定位指标上均取得较高日志结果。实际应用中仍应结合手部尺度、遮挡与背景差异查看具体预测,并使用复核与备注保存判断。
八、可视化图表说明
以下图片直接采用源码目录已有的训练产物,保留原始图表内容与数值。
8.1 训练结果总览
集中展示训练过程中的多项损失和评测指标,便于结合完整实验查看收敛变化。

8.2 训练与验证损失
展示图中对应的损失项随训练轮次的变化,结合训练与验证结果观察拟合情况。

8.3 检测指标变化
展示对应检测指标随训练轮次的变化,数值与本文列出的原始 CSV 结果按同一实验读取。

8.4 检测指标变化
展示对应检测指标随训练轮次的变化,数值与本文列出的原始 CSV 结果按同一实验读取。

本项目为个人原创项目,配套源码、模型权重、训练资料和项目说明,可用于毕业设计、课程实践、简历展示及个人学习。有项目成品或定制需求,可以通过主页联系作者。