Desmond-Dong commited on
Commit
01429cd
·
1 Parent(s): bf8cf17

docs: update PROJECT_PLAN.md with gesture detection (Phase 21)

Browse files
Files changed (1) hide show
  1. 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
- - 阈值: 2.0g (可配置)
618
  - 冷却时间: 1.0s (防止重复触发)
619
  - 仅限无线版本 (Wireless) 可用
620
 
@@ -644,7 +644,75 @@ def _tts_finished(self):
644
  | 倾斜/倒下 | 播放求助动作 + 语音 "我倒了,帮帮我" | ❌ 未实现 |
645
  | 长时间静止 | 进入休眠动画 | ❌ 未实现 |
646
 
647
- ### Phase 21 - Home Assistant 场景联动 (未实现) ❌
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
648
 
649
  **目标**: 根据 Home Assistant 的场景/自动化触发机器人动作。
650
 
@@ -673,16 +741,20 @@ def _tts_finished(self):
673
  - **音频处理** - AGC、噪声抑制、回声消除
674
  - **摄像头流** - MJPEG 实时预览
675
 
676
- #### 部分实现功能 (Phase 14-21)
 
 
 
 
 
 
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 21** - Home Assistant 场景联动
696
 
697
  ---
698
 
@@ -702,42 +774,40 @@ def _tts_finished(self):
702
  - ✅ **Phase 1-12**: 基础 ESPHome 实体 (45+ 个)
703
  - ✅ 核心语音助手功能
704
  - ✅ 基础运动反馈 (点头、摇头、注视)
 
 
 
705
 
706
  ### 高优先级 (部分实现 🟡)
707
- - 🟡 **Phase 13**: 情感动作反馈系统
708
  - ✅ Emotion Selector 实体与 API 基础设施
709
  - ❌ 自动根据语音助手响应触发情感动作
710
  - ❌ 意图识别与情感匹配
711
  - ❌ 舞蹈动作库集成
712
 
713
- ### 高优先级 (未实现 ❌)
714
- - ❌ **Phase 14**: 智能���源追踪增强
715
- - ✅ 唤醒时转向声源
716
- - ❌ 持续声源追踪
717
- - ❌ 多人对话切换
718
- - ❌ 声源可视化
719
-
720
  ### 中优先级 (部分实现 🟡)
721
- - 🟡 **Phase 15**: 卡通风格运动模式
722
- - ✅ 20Hz 统一控制循环架构 (优化以防止 daemon 崩溃)
723
  - ✅ 姿态变化检测 + 状态查询缓存 (减少 daemon 负载)
724
  - ✅ 平滑插值动作 + 呼吸动画
725
  - ❌ 动态插值技术切换 (CARTOON 等)
726
- - 🟡 **Phase 16**: 说话时天线同步
727
  - ✅ 语音驱动头部摆动 (SpeechSwayGenerator)
728
  - ❌ 天线随音频节奏摆动
729
 
730
  ### 中优先级 (未实现 ❌)
731
- - ❌ **Phase 17**: 视觉注视交互 - 眼神交流
732
 
733
  ### 低优先级 (部分实现 🟡)
734
- - 🟡 **Phase 18**: 重力补偿互动模式
735
  - ✅ 重力补偿模式切换
736
  - ❌ 教学式交互 (录制/播放功能)
 
 
 
737
 
738
  ### 低优先级 (未实现 ❌)
739
- - ❌ **Phase 19**: 环境感知响应 - IMU 触发
740
- - ❌ **Phase 20**: Home Assistant 场景联动 - 智能家居整合
741
 
742
  ---
743
 
@@ -745,17 +815,19 @@ def _tts_finished(self):
745
 
746
  | 阶段 | 状态 | 完成度 | 说明 |
747
  |------|------|--------|------|
748
- | Phase 1-12 | ✅ 完成 | 100% | 40 个 ESPHome 实体已实现(Phase 11 LED 已禁用) |
749
- | Phase 13 | 🟡 部分完成 | 30% | API 基础设施就绪,缺自动触发 |
750
- | Phase 14 | 完成 | 20% | 仅实现唤醒时转向 |
751
- | Phase 15 | 🟡 部分完成 | 70% | 20Hz控制循环+姿态变化检测+状态缓存+呼吸动画已实现 |
752
- | Phase 16 | 🟡 部分完成 | 50% | 语音驱头部摆动已实现 |
753
- | Phase 17 | 完成 | 10% | 摄像头已实现,缺人脸检测 |
754
- | Phase 18 | 🟡 部分完成 | 40% | 模式切换已实现,缺教学 |
755
- | Phase 19 | 完成 | 10% | IMU 数据暴露,缺触发逻辑 |
756
- | Phase 20 | 完成 | 0% | 完全未实现 |
757
-
758
- **总体完成度**: **Phase 1-12: 100%** | **Phase 13-20: ~35%**
 
 
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