🛸 手势控制无人机
基于计算机视觉的实时手势识别无人机控制系统
支持本地 3D 仿真 & AirSim 模拟器 · 集成深度学习 & 传统机器学习
📋 目录
✨ 功能特性
🎯 核心控制
| 功能 | 说明 |
|---|---|
| 🖐 实时手势识别 | MediaPipe / OpenCV 双模式,自动降级切换 |
| 🎚️ 动态灵敏度调节 | LOW / MEDIUM / HIGH 三档可调,界面实时显示 |
| 🤲 双手控制模式 | 左手控制方向 + 右手控制高度 |
| 🔄 滑动手势控制 | 支持上下左右滑动控制飞行 |
| 🔁 摄像头镜像切换 | 一键翻转画面(M 键) |
| ✊ 握拳起飞检测 | 握拳松手自动起飞,智能降落检测 |
🧭 飞行辅助
| 功能 | 说明 |
|---|---|
| 🎬 轨迹录制与回放 | 完整记录飞行路径,支持回放复盘(R / P 键) |
| 📍 航点标记导航 | 一键标记航点,自动导航到目标位置(N 键) |
| 📊 飞行统计面板 | 实时展示飞行时长、距离、速度、手势频率、电池消耗(V 键) |
🤖 AI 能力
| 功能 | 说明 |
|---|---|
| 🧬 传统 ML 分类 | SVM / 随机森林 / MLP 三种模型可选 |
| 🧠 深度学习分类 | CNN / Transformer / 深度 MLP,支持对比训练 |
| 📈 实时可视化 | 置信度折线图、手势统计柱状图、3D 关键点投影 |
📁 项目结构
drone_hand_gesture/
│
├── 🎯 主程序
│ ├── main.py # 主程序(本地仿真模式)
│ ├── main_airsim.py # AirSim 真实模拟器版本
│ └── main_deep_learning.py # 深度学习演示版本
│
├── 🛸 控制与仿真
│ ├── drone_controller.py # 无人机控制器
│ ├── airsim_controller.py # AirSim 控制器
│ ├── simulation_3d.py # 3D OpenGL 仿真渲染
│ └── physics_engine.py # 物理仿真引擎
│
├── 🖐 手势识别
│ ├── gesture_detector.py # 基础手势检测器
│ ├── gesture_detector_enhanced.py # 增强手势检测器(MediaPipe)
│ ├── gesture_detector_cv.py # OpenCV 肤色检测器
│ ├── gesture_classifier.py # 传统 ML 手势分类器
│ ├── deep_gesture_classifier.py # 深度学习手势分类器
│ ├── deep_gesture_detector.py # 深度学习手势检测器
│ └── gesture_visualizer.py # 手势可视化器
│
├── 📊 数据与统计
│ ├── gesture_data_collector.py # 手势图像数据收集
│ └── flight_statistics.py # 飞行统计数据收集与展示
│
├── 🏋️ 模型训练
│ ├── train_gesture_model.py # 训练传统 ML 模型
│ └── train_deep_gesture.py # 训练深度学习模型
│
└── 📦 配置文件
└── requirements.txt # Python 依赖列表
🚀 快速开始
环境要求
- Python:3.8+
- 摄像头:USB 摄像头或内置摄像头
- GPU(可选):训练深度学习模型推荐使用 CUDA
1. 安装依赖
# 进入项目目录
cd src/drone_hand_gesture
# 安装依赖
pip install -r requirements.txt
2. 运行本地仿真
python main.py
启动后将打开 3D 仿真窗口和摄像头画面,使用手势或键盘控制无人机。
3. 运行 AirSim 模拟器
前提条件:
1. 安装 AirSim:pip install airsim
2. 启动 AirSim 模拟器(如 Blocks.exe)
python main_airsim.py
4. 运行深度学习演示
# 训练深度学习模型
python train_deep_gesture.py --model_type cnn --epochs 100
# 运行演示
python main_deep_learning.py --model_path dataset/models/gesture_deep_cnn.pth --show_charts
🎮 控制指南
⌨️ 键盘快捷键
| 类别 | 按键 | 功能 |
|---|---|---|
| 🛫 飞行控制 | 空格 |
起飞 / 降落 |
T |
起飞 | |
L |
降落 | |
H |
悬停 | |
| 🧭 方向移动 | W S |
前进 / 后退 |
A D |
左移 / 右移 | |
Q E |
左转 / 右转 | |
↑ ↓ |
上升 / 下降 | |
| 🎚️ 灵敏度 | 1 |
低灵敏度 |
2 |
中灵敏度 | |
3 |
高灵敏度 | |
| 🎬 录制回放 | R |
开始 / 停止录制飞行轨迹 |
P |
回放飞行轨迹 | |
| 📍 航点 | N |
标记当前航点 |
| 🔄 显示 | M |
摄像头镜像切换 |
V |
飞行统计面板 开/关 | |
| ❌ 退出 | Q / ESC |
退出程序 |
🖐 手势控制
| 手势 | 命令 | 示意图 |
|---|---|---|
| 🖐 张开手掌 | 起飞 | 五指张开 |
| ✊ 握拳 | 降落 | 握紧拳头 |
| ☝️ 食指向上 | 上升 | 食指朝上 |
| 👇 食指向下 | 下降 | 食指朝下 |
| ✌️ V 字手势 | 前进 | 胜利手势 |
| 👍 大拇指向上 | 后退 | 拇指朝上 |
| 👎 大拇指向下 | 停止 | 拇指朝下 |
| 👌 OK 手势 | 悬停 | 拇指食指圈起 |
| 🤘 摇滚手势 | 左转 | 食指小指伸出 |
| ✌️ 和平手势 | 右转 | 食指中指伸出 |
🖐 手势映射
技术层面对应关系
| 手势标识 | 对应命令 | 描述 |
|---|---|---|
open_palm |
起飞 | 手掌完全张开 |
closed_fist |
降落 | 手指完全握紧 |
pointing_up |
上升 | 仅食指伸出朝上 |
pointing_down |
下降 | 仅食指伸出朝下 |
victory |
前进 | V 字形(食指+中指) |
thumb_up |
后退 | 拇指朝上,其余握拳 |
thumb_down |
停止 | 拇指朝下,其余握拳 |
ok_sign |
悬停 | 拇指与食指成圈 |
rock |
左转 | 摇滚手势(食指+小指) |
peace |
右转 | 和平手势(食指+中指背面) |
📊 飞行统计面板
按 V 键打开实时飞行统计面板,显示以下数据:
| 统计类别 | 具体指标 |
|---|---|
| ⏱️ 时间 | 飞行时长、会话时长 |
| 📏 距离 | 累计飞行距离、离起飞点最远距离 |
| ⚡ 速度 | 当前速度、最大速度、平均速度 |
| 🏔️ 高度 | 当前高度、最大高度 |
| 🔋 电池 | 当前电量、最低电量、耗电率 |
| 🖐 手势 | 各手势触发次数与频率排行 |
| 🎮 命令 | 各命令执行次数与频率排行 |
| 🛫 起降 | 起飞次数、降落次数 |
程序退出时自动打印完整的飞行统计报告到控制台。
🧠 深度学习
模型对比
| 模型 | 架构特点 | 适用场景 |
|---|---|---|
| CNN | 1D 卷积神经网络 | 捕捉局部特征,计算效率高,适合实时场景 |
| Transformer | 注意力机制模型 | 建模长距离依赖关系,准确率更高 |
| 深度 MLP | 多层全连接网络 | 结构简单,训练快速,适合小规模数据 |
训练命令
# 训练单一模型
python train_deep_gesture.py --model_type cnn --epochs 100 --batch_size 32
# 对比训练所有模型
python train_deep_gesture.py --compare
可视化功能
- 📊 实时置信度折线图
- 📈 手势分类统计柱状图
- 🏷️ 手势信息面板
- 👆 手势图标叠加显示
- 📐 3D 手部关键点投影
🔧 环境兼容性
Windows + Python 3.11 特别优化
本项目针对 Windows + Python 3.11 环境做了专项适配:
| 方案 | 检测器 | 说明 |
|---|---|---|
| 🥇 优先方案 | MediaPipe | 完整手部 21 关键点检测,精度最高 |
| 🥈 降级方案 | OpenCV 肤色检测 | 纯 OpenCV 实现(YCrCb 色彩空间),零额外依赖 |
- 自动切换:MediaPipe 不可用时自动降级为 OpenCV 方案,无需手动配置
- 跨平台:核心功能支持 Windows、macOS、Linux
📦 依赖
opencv-python>=4.5.0
numpy>=1.21.0
mediapipe>=0.10.0 # 可选,自动降级
scikit-learn>=1.0.0 # 传统 ML 模型
torch>=1.10.0 # 深度学习模型
matplotlib>=3.5.0 # 可视化
airsim # AirSim 模式(可选)
PyOpenGL>=3.1.0 # 3D 仿真渲染
Made with ❤️ | 手势控制无人机项目