Commit ·
01429cd
1
Parent(s): bf8cf17
docs: update PROJECT_PLAN.md with gesture detection (Phase 21)
Browse files- PROJECT_PLAN.md +105 -33
PROJECT_PLAN.md
CHANGED
|
@@ -614,7 +614,7 @@ VAD_DB_OFF = -45 # 停止检测阈值
|
|
| 614 |
**技术实现**:
|
| 615 |
- `tap_detector.py` - IMU 加速度突变检测
|
| 616 |
- `satellite.py:_tap_conversation_mode` - 持续对话模式标志
|
| 617 |
-
- 阈值:
|
| 618 |
- 冷却时间: 1.0s (防止重复触发)
|
| 619 |
- 仅限无线版本 (Wireless) 可用
|
| 620 |
|
|
@@ -644,7 +644,75 @@ def _tts_finished(self):
|
|
| 644 |
| 倾斜/倒下 | 播放求助动作 + 语音 "我倒了,帮帮我" | ❌ 未实现 |
|
| 645 |
| 长时间静止 | 进入休眠动画 | ❌ 未实现 |
|
| 646 |
|
| 647 |
-
### Phase 21 -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 648 |
|
| 649 |
**目标**: 根据 Home Assistant 的场景/自动化触发机器人动作。
|
| 650 |
|
|
@@ -673,16 +741,20 @@ def _tts_finished(self):
|
|
| 673 |
- **音频处理** - AGC、噪声抑制、回声消除
|
| 674 |
- **摄像头流** - MJPEG 实时预览
|
| 675 |
|
| 676 |
-
####
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 677 |
- **Phase 14** - 情感动作 API 基础设施 (手动触发可用)
|
| 678 |
- **Phase 19** - 重力补偿模式切换 (教学流程未实现)
|
| 679 |
|
| 680 |
### ❌ 未实现功能
|
| 681 |
|
| 682 |
#### 高优先级
|
| 683 |
-
- ~~**Phase 13** - Sendspin 音频播放支持~~ ✅ **已完成**
|
| 684 |
- **Phase 14** - 自动情感动作反馈 (需与语音助手事件关联)
|
| 685 |
-
- **Phase 15** - 持续声源追踪 (仅唤醒时转向)
|
| 686 |
|
| 687 |
#### 中优先级
|
| 688 |
- **Phase 16** - 卡通风格运动模式 (需动态插值切换)
|
|
@@ -691,8 +763,8 @@ def _tts_finished(self):
|
|
| 691 |
|
| 692 |
#### 低优先级
|
| 693 |
- **Phase 19** - 教学模式录制/播放功能
|
| 694 |
-
- **Phase 20** - IMU 环境感知响应
|
| 695 |
-
- **Phase
|
| 696 |
|
| 697 |
---
|
| 698 |
|
|
@@ -702,42 +774,40 @@ def _tts_finished(self):
|
|
| 702 |
- ✅ **Phase 1-12**: 基础 ESPHome 实体 (45+ 个)
|
| 703 |
- ✅ 核心语音助手功能
|
| 704 |
- ✅ 基础运动反馈 (点头、摇头、注视)
|
|
|
|
|
|
|
|
|
|
| 705 |
|
| 706 |
### 高优先级 (部分实现 🟡)
|
| 707 |
-
- 🟡 **Phase
|
| 708 |
- ✅ Emotion Selector 实体与 API 基础设施
|
| 709 |
- ❌ 自动根据语音助手响应触发情感动作
|
| 710 |
- ❌ 意图识别与情感匹配
|
| 711 |
- ❌ 舞蹈动作库集成
|
| 712 |
|
| 713 |
-
### 高优先级 (未实现 ❌)
|
| 714 |
-
- ❌ **Phase 14**: 智能���源追踪增强
|
| 715 |
-
- ✅ 唤醒时转向声源
|
| 716 |
-
- ❌ 持续声源追踪
|
| 717 |
-
- ❌ 多人对话切换
|
| 718 |
-
- ❌ 声源可视化
|
| 719 |
-
|
| 720 |
### 中优先级 (部分实现 🟡)
|
| 721 |
-
- 🟡 **Phase
|
| 722 |
-
- ✅
|
| 723 |
- ✅ 姿态变化检测 + 状态查询缓存 (减少 daemon 负载)
|
| 724 |
- ✅ 平滑插值动作 + 呼吸动画
|
| 725 |
- ❌ 动态插值技术切换 (CARTOON 等)
|
| 726 |
-
- 🟡 **Phase
|
| 727 |
- ✅ 语音驱动头部摆动 (SpeechSwayGenerator)
|
| 728 |
- ❌ 天线随音频节奏摆动
|
| 729 |
|
| 730 |
### 中优先级 (未实现 ❌)
|
| 731 |
-
- ❌ **Phase
|
| 732 |
|
| 733 |
### 低优先级 (部分实现 🟡)
|
| 734 |
-
- 🟡 **Phase
|
| 735 |
- ✅ 重力补偿模式切换
|
| 736 |
- ❌ 教学式交互 (录制/播放功能)
|
|
|
|
|
|
|
|
|
|
| 737 |
|
| 738 |
### 低优先级 (未实现 ❌)
|
| 739 |
-
- ❌ **Phase
|
| 740 |
-
- ❌ **Phase 20**: Home Assistant 场景联动 - 智能家居整合
|
| 741 |
|
| 742 |
---
|
| 743 |
|
|
@@ -745,17 +815,19 @@ def _tts_finished(self):
|
|
| 745 |
|
| 746 |
| 阶段 | 状态 | 完成度 | 说明 |
|
| 747 |
|------|------|--------|------|
|
| 748 |
-
| Phase 1-12 | ✅ 完成 | 100% |
|
| 749 |
-
| Phase 13 |
|
| 750 |
-
| Phase 14 |
|
| 751 |
-
| Phase 15 |
|
| 752 |
-
| Phase 16 | 🟡 部分完成 |
|
| 753 |
-
| Phase 17 |
|
| 754 |
-
| Phase 18 |
|
| 755 |
-
| Phase 19 |
|
| 756 |
-
| Phase 20 |
|
| 757 |
-
|
| 758 |
-
|
|
|
|
|
|
|
| 759 |
|
| 760 |
---
|
| 761 |
|
|
|
|
| 614 |
**技术实现**:
|
| 615 |
- `tap_detector.py` - IMU 加速度突变检测
|
| 616 |
- `satellite.py:_tap_conversation_mode` - 持续对话模式标志
|
| 617 |
+
- 阈值: 0.5g (可配置,默认最敏感)
|
| 618 |
- 冷却时间: 1.0s (防止重复触发)
|
| 619 |
- 仅限无线版本 (Wireless) 可用
|
| 620 |
|
|
|
|
| 644 |
| 倾斜/倒下 | 播放求助动作 + 语音 "我倒了,帮帮我" | ❌ 未实现 |
|
| 645 |
| 长时间静止 | 进入休眠动画 | ❌ 未实现 |
|
| 646 |
|
| 647 |
+
### Phase 21 - 手势识别 ✅ **已完成**
|
| 648 |
+
|
| 649 |
+
**目标**: 使用 MediaPipe Hands 检测手势,实现非语音交互。
|
| 650 |
+
|
| 651 |
+
**技术方案**:
|
| 652 |
+
- 使用 MediaPipe Hands(完全本地运行,无云端依赖)
|
| 653 |
+
- 与 YOLO 人脸检测并行运行(每隔一帧处理手势,节省 CPU)
|
| 654 |
+
- 手势需保持 0.5 秒才触发,1.5 秒冷却期
|
| 655 |
+
|
| 656 |
+
**已实现手势**:
|
| 657 |
+
|
| 658 |
+
| 手势 | 英文值 | 含义 | 检测逻辑 |
|
| 659 |
+
|------|--------|------|---------|
|
| 660 |
+
| 👍 | `thumbs_up` | 确认/点赞 | 拇指向上,其他手指握拳 |
|
| 661 |
+
| 👎 | `thumbs_down` | 拒绝/不喜欢 | 拇指向下,其他手指握拳 |
|
| 662 |
+
| ✋ | `open_palm` | 停止 | 所有手指伸展 |
|
| 663 |
+
| ✊ | `fist` | 暂停/保持 | 所有手指握拳 |
|
| 664 |
+
| ✌️ | `peace` | 胜利/和平 | 食指和中指伸展,其他握拳 |
|
| 665 |
+
| 👌 | `ok` | OK | 拇指和食指形成圆圈,其他伸展 |
|
| 666 |
+
| ☝️ | `pointing_up` | 注意/一 | 仅食指伸展 |
|
| 667 |
+
|
| 668 |
+
**Home Assistant 实体**:
|
| 669 |
+
|
| 670 |
+
| ESPHome 实体类型 | 名称 | 说明 |
|
| 671 |
+
|-----------------|------|------|
|
| 672 |
+
| `Text Sensor` | `detected_gesture` | 当前检测到的手势 (英文) |
|
| 673 |
+
| `Switch` | `gesture_detection_enabled` | 手势检测开关 |
|
| 674 |
+
|
| 675 |
+
**代码位置**:
|
| 676 |
+
- `gesture_detector.py` - MediaPipe 手势检测器
|
| 677 |
+
- `camera_server.py` - 集成手势检测到摄像头处理循环
|
| 678 |
+
- `entity_registry.py` - Home Assistant 实体注册
|
| 679 |
+
|
| 680 |
+
**技术细节**:
|
| 681 |
+
```python
|
| 682 |
+
# gesture_detector.py - 手势分类
|
| 683 |
+
class Gesture(Enum):
|
| 684 |
+
NONE = "none"
|
| 685 |
+
THUMBS_UP = "thumbs_up"
|
| 686 |
+
THUMBS_DOWN = "thumbs_down"
|
| 687 |
+
OPEN_PALM = "open_palm"
|
| 688 |
+
FIST = "fist"
|
| 689 |
+
PEACE = "peace"
|
| 690 |
+
OK = "ok"
|
| 691 |
+
POINTING_UP = "pointing_up"
|
| 692 |
+
|
| 693 |
+
# 手势检测参数
|
| 694 |
+
min_detection_confidence = 0.6
|
| 695 |
+
min_tracking_confidence = 0.5
|
| 696 |
+
gesture_hold_threshold = 0.5 # 保持 0.5 秒触发
|
| 697 |
+
gesture_cooldown = 1.5 # 触发后 1.5 秒冷却
|
| 698 |
+
gesture_clear_delay = 2.0 # 手势消失 2 秒后清除
|
| 699 |
+
```
|
| 700 |
+
|
| 701 |
+
**回调支持**:
|
| 702 |
+
```python
|
| 703 |
+
# 可为每种手势设置回调
|
| 704 |
+
camera_server.set_gesture_callbacks(
|
| 705 |
+
on_thumbs_up=lambda: print("确认"),
|
| 706 |
+
on_thumbs_down=lambda: print("拒绝"),
|
| 707 |
+
on_open_palm=lambda: print("停止"),
|
| 708 |
+
on_fist=lambda: print("暂停"),
|
| 709 |
+
on_peace=lambda: print("和平"),
|
| 710 |
+
on_ok=lambda: print("OK"),
|
| 711 |
+
on_pointing_up=lambda: print("注意"),
|
| 712 |
+
)
|
| 713 |
+
```
|
| 714 |
+
|
| 715 |
+
### Phase 22 - Home Assistant 场景联动 (未实现) ❌
|
| 716 |
|
| 717 |
**目标**: 根据 Home Assistant 的场景/自动化触发机器人动作。
|
| 718 |
|
|
|
|
| 741 |
- **音频处理** - AGC、噪声抑制、回声消除
|
| 742 |
- **摄像头流** - MJPEG 实时预览
|
| 743 |
|
| 744 |
+
#### 扩展功能 (Phase 13-21)
|
| 745 |
+
- **Phase 13** - Sendspin 多房间音频支持 ✅
|
| 746 |
+
- **Phase 15** - YOLO 人脸追踪 ✅
|
| 747 |
+
- **Phase 20** - 拍一拍唤醒 ✅
|
| 748 |
+
- **Phase 21** - 手势识别 (7 种手势) ✅
|
| 749 |
+
|
| 750 |
+
#### 部分实现功能
|
| 751 |
- **Phase 14** - 情感动作 API 基础设施 (手动触发可用)
|
| 752 |
- **Phase 19** - 重力补偿模式切换 (教学流程未实现)
|
| 753 |
|
| 754 |
### ❌ 未实现功能
|
| 755 |
|
| 756 |
#### 高优先级
|
|
|
|
| 757 |
- **Phase 14** - 自动情感动作反馈 (需与语音助手事件关联)
|
|
|
|
| 758 |
|
| 759 |
#### 中优先级
|
| 760 |
- **Phase 16** - 卡通风格运动模式 (需动态插值切换)
|
|
|
|
| 763 |
|
| 764 |
#### 低优先级
|
| 765 |
- **Phase 19** - 教学模式录制/播放功能
|
| 766 |
+
- **Phase 20** - IMU 环境感知响应 (摇晃/倾斜检测)
|
| 767 |
+
- **Phase 22** - Home Assistant 场景联动
|
| 768 |
|
| 769 |
---
|
| 770 |
|
|
|
|
| 774 |
- ✅ **Phase 1-12**: 基础 ESPHome 实体 (45+ 个)
|
| 775 |
- ✅ 核心语音助手功能
|
| 776 |
- ✅ 基础运动反馈 (点头、摇头、注视)
|
| 777 |
+
- ✅ **Phase 13**: Sendspin 多房间音频
|
| 778 |
+
- ✅ **Phase 15**: YOLO 人脸追踪
|
| 779 |
+
- ✅ **Phase 21**: 手势识别 (7 种手势)
|
| 780 |
|
| 781 |
### 高优先级 (部分实现 🟡)
|
| 782 |
+
- 🟡 **Phase 14**: 情感动作反馈系统
|
| 783 |
- ✅ Emotion Selector 实体与 API 基础设施
|
| 784 |
- ❌ 自动根据语音助手响应触发情感动作
|
| 785 |
- ❌ 意图识别与情感匹配
|
| 786 |
- ❌ 舞蹈动作库集成
|
| 787 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 788 |
### 中优先级 (部分实现 🟡)
|
| 789 |
+
- 🟡 **Phase 16**: 卡通风格运动模式
|
| 790 |
+
- ✅ 10Hz 统一控制循环架构 (优化以防止 daemon 崩溃)
|
| 791 |
- ✅ 姿态变化检测 + 状态查询缓存 (减少 daemon 负载)
|
| 792 |
- ✅ 平滑插值动作 + 呼吸动画
|
| 793 |
- ❌ 动态插值技术切换 (CARTOON 等)
|
| 794 |
+
- 🟡 **Phase 17**: 说话时天线同步
|
| 795 |
- ✅ 语音驱动头部摆动 (SpeechSwayGenerator)
|
| 796 |
- ❌ 天线随音频节奏摆动
|
| 797 |
|
| 798 |
### 中优先级 (未实现 ❌)
|
| 799 |
+
- ❌ **Phase 18**: 视觉注视交互 - 眼神交流
|
| 800 |
|
| 801 |
### 低优先级 (部分实现 🟡)
|
| 802 |
+
- 🟡 **Phase 19**: 重力补偿互动模式
|
| 803 |
- ✅ 重力补偿模式切换
|
| 804 |
- ❌ 教学式交互 (录制/播放功能)
|
| 805 |
+
- 🟡 **Phase 20**: 环境感知响应
|
| 806 |
+
- ✅ 拍一拍唤醒 (IMU 加速度检测)
|
| 807 |
+
- ❌ 摇晃/倾斜检测
|
| 808 |
|
| 809 |
### 低优先级 (未实现 ❌)
|
| 810 |
+
- ❌ **Phase 22**: Home Assistant 场景联动 - 智能家居整合
|
|
|
|
| 811 |
|
| 812 |
---
|
| 813 |
|
|
|
|
| 815 |
|
| 816 |
| 阶段 | 状态 | 完成度 | 说明 |
|
| 817 |
|------|------|--------|------|
|
| 818 |
+
| Phase 1-12 | ✅ 完成 | 100% | 45 个 ESPHome 实体已实现(Phase 11 LED 已禁用) |
|
| 819 |
+
| Phase 13 | ✅ 完成 | 100% | Sendspin 多房间音频支持 |
|
| 820 |
+
| Phase 14 | 🟡 部分完成 | 30% | API 基础设施就绪,缺自动触发 |
|
| 821 |
+
| Phase 15 | ✅ 完成 | 100% | YOLO 人脸追踪 |
|
| 822 |
+
| Phase 16 | 🟡 部分完成 | 70% | 10Hz控制循环+姿态变化检测+状态缓存+呼吸动画已实现 |
|
| 823 |
+
| Phase 17 | 🟡 部分完成 | 50% | 语音驱动头部摆动已实现 |
|
| 824 |
+
| Phase 18 | ❌ 未完成 | 10% | 摄像头已实现,缺眼神交流 |
|
| 825 |
+
| Phase 19 | 🟡 部分完成 | 40% | 模式切换已实现,缺教学流程 |
|
| 826 |
+
| Phase 20 | 🟡 部分完成 | 50% | 拍一拍唤醒已实现,缺摇晃/倾斜检测 |
|
| 827 |
+
| Phase 21 | ✅ 完成 | 100% | 手势识别 (7 种手势) |
|
| 828 |
+
| Phase 22 | ❌ 未完成 | 0% | 完全未实现 |
|
| 829 |
+
|
| 830 |
+
**总体完成度**: **Phase 1-12: 100%** | **Phase 13-22: ~60%**
|
| 831 |
|
| 832 |
---
|
| 833 |
|