Files
NaviGlassServer/PROJECT_STRUCTURE.md
2025-12-31 15:42:30 +08:00

12 KiB
Raw Blame History

项目结构说明

本文档详细说明项目的目录结构和主要文件的作用。

📁 目录结构

rebuild1002/
├── 📄 主要应用文件
│   ├── app_main.py                    # 主应用入口FastAPI 服务)
│   ├── navigation_master.py           # 导航统领器(状态机)
│   ├── workflow_blindpath.py          # 盲道导航工作流
│   ├── workflow_crossstreet.py        # 过马路导航工作流
│   └── yolomedia.py                   # 物品查找工作流
│
├── 🎙️ 语音处理模块
│   ├── asr_core.py                    # 语音识别核心
│   ├── omni_client.py                 # Qwen-Omni 客户端
│   ├── qwen_extractor.py              # 标签提取(中文->英文)
│   ├── audio_player.py                # 音频播放器
│   └── audio_stream.py                # 音频流管理
│
├── 🤖 模型相关
│   ├── yoloe_backend.py               # YOLO-E 后端(开放词汇)
│   ├── trafficlight_detection.py      # 红绿灯检测
│   ├── obstacle_detector_client.py    # 障碍物检测客户端
│   └── models.py                      # 模型定义
│
├── 🎥 视频处理
│   ├── bridge_io.py                   # 线程安全的帧缓冲
│   ├── sync_recorder.py               # 音视频同步录制
│   └── video_recorder.py              # 视频录制(旧版)
│
├── 🌐 Web 前端
│   ├── templates/
│   │   └── index.html                 # 主界面 HTML
│   ├── static/
│   │   ├── main.js                    # 主 JS 脚本
│   │   ├── vision.js                  # 视觉流处理
│   │   ├── visualizer.js              # 数据可视化
│   │   ├── vision_renderer.js         # 渲染器
│   │   ├── vision.css                 # 样式表
│   │   └── models/                    # 3D 模型IMU 可视化)
│
├── 🎵 音频资源
│   ├── music/                         # 系统提示音
│   │   ├── converted_向上.wav
│   │   ├── converted_向下.wav
│   │   └── ...
│   └── voice/                         # 预录语音
│       ├── voice_mapping.json
│       └── *.wav
│
├── 🧠 模型文件
│   └── model/
│       ├── yolo-seg.pt                # 盲道分割模型
│       ├── yoloe-11l-seg.pt           # YOLO-E 开放词汇模型
│       ├── shoppingbest5.pt           # 物品识别模型
│       ├── trafficlight.pt            # 红绿灯检测模型
│       └── hand_landmarker.task       # MediaPipe 手部模型
│
├── 📹 录制文件
│   └── recordings/                    # 自动保存的视频和音频
│       ├── video_*.avi
│       └── audio_*.wav
│
├── 🛠️ ESP32 固件
│   └── compile/
│       ├── compile.ino                # Arduino 主程序
│       ├── camera_pins.h              # 摄像头引脚定义
│       ├── ICM42688.cpp/h             # IMU 驱动
│       └── ESP32_VIDEO_OPTIMIZATION.md
│
├── 🧪 测试文件
│   ├── test_recorder.py               # 录制功能测试
│   ├── test_traffic_light.py          # 红绿灯检测测试
│   ├── test_cross_street_blindpath.py # 导航测试
│   └── test_crosswalk_awareness.py    # 斑马线检测测试
│
├── 📚 文档
│   ├── README.md                      # 项目主文档
│   ├── INSTALLATION.md                # 安装指南
│   ├── CONTRIBUTING.md                # 贡献指南
│   ├── FAQ.md                         # 常见问题
│   ├── CHANGELOG.md                   # 更新日志
│   ├── SECURITY.md                    # 安全政策
│   └── PROJECT_STRUCTURE.md           # 本文件
│
├── 🐳 Docker 相关
│   ├── Dockerfile                     # Docker 镜像定义
│   ├── docker-compose.yml             # Docker Compose 配置
│   └── .dockerignore                  # Docker 忽略文件
│
├── ⚙️ 配置文件
│   ├── .env.example                   # 环境变量模板
│   ├── .gitignore                     # Git 忽略文件
│   ├── requirements.txt               # Python 依赖
│   ├── setup.sh                       # Linux/macOS 安装脚本
│   └── setup.bat                      # Windows 安装脚本
│
├── 📄 许可证
│   └── LICENSE                        # MIT 许可证
│
└── 🔧 GitHub 相关
    └── .github/
        ├── ISSUE_TEMPLATE/
        │   ├── bug_report.md
        │   └── feature_request.md
        └── pull_request_template.md

🔑 核心文件说明

主应用层

app_main.py

  • 作用: FastAPI 主服务,处理所有 WebSocket 连接
  • 主要功能:
    • WebSocket 路由管理(/ws/camera, /ws_audio, /ws/viewer 等)
    • 模型加载与初始化
    • 状态协调与管理
    • 音视频流分发
  • 依赖: 所有其他模块
  • 入口点: python app_main.py

navigation_master.py

  • 作用: 导航统领器,管理整个系统的状态机
  • 主要状态:
    • IDLE: 空闲
    • CHAT: 对话模式
    • BLINDPATH_NAV: 盲道导航
    • CROSSING: 过马路
    • TRAFFIC_LIGHT_DETECTION: 红绿灯检测
    • ITEM_SEARCH: 物品查找
  • 核心方法:
    • process_frame(): 处理每一帧
    • start_blind_path_navigation(): 启动盲道导航
    • start_crossing(): 启动过马路模式
    • on_voice_command(): 处理语音命令

工作流模块

workflow_blindpath.py

  • 作用: 盲道导航核心逻辑
  • 主要功能:
    • 盲道分割与检测
    • 障碍物检测
    • 转弯检测
    • 光流稳定
    • 方向引导生成
  • 状态机:
    • ONBOARDING: 上盲道
    • NAVIGATING: 导航中
    • MANEUVERING_TURN: 转弯
    • AVOIDING_OBSTACLE: 避障

workflow_crossstreet.py

  • 作用: 过马路导航逻辑
  • 主要功能:
    • 斑马线检测
    • 方向对齐
    • 引导生成
  • 核心方法:
    • _is_crosswalk_near(): 判断是否接近斑马线
    • _compute_angle_and_offset(): 计算角度和偏移

yolomedia.py

  • 作用: 物品查找工作流
  • 主要功能:
    • YOLO-E 文本提示检测
    • MediaPipe 手部追踪
    • 光流目标追踪
    • 手部引导(方向提示)
    • 抓取动作检测
  • 模式:
    • SEGMENT: 检测模式
    • FLASH: 闪烁确认
    • CENTER_GUIDE: 居中引导
    • TRACK: 手部追踪

语音模块

asr_core.py

  • 作用: 阿里云 Paraformer ASR 实时语音识别
  • 主要功能:
    • 实时语音识别
    • VAD语音活动检测
    • 识别结果回调
  • 关键类: ASRCallback

omni_client.py

  • 作用: Qwen-Omni-Turbo 多模态对话客户端
  • 主要功能:
    • 流式对话生成
    • 图像+文本输入
    • 语音输出
  • 核心函数: stream_chat()

audio_player.py

  • 作用: 统一的音频播放管理
  • 主要功能:
    • TTS 语音播放
    • 多路音频混音
    • 音量控制
    • 线程安全播放
  • 核心函数: play_voice_text(), play_audio_threadsafe()

模型后端

yoloe_backend.py

  • 作用: YOLO-E 开放词汇检测后端
  • 主要功能:
    • 文本提示设置
    • 实时分割
    • 目标追踪
  • 核心类: YoloEBackend

trafficlight_detection.py

  • 作用: 红绿灯检测模块
  • 检测方法:
    1. YOLO 模型检测
    2. HSV 颜色分类(备用)
  • 输出: 红灯/绿灯/黄灯/未知

obstacle_detector_client.py

  • 作用: 障碍物检测客户端
  • 主要功能:
    • 白名单类别过滤
    • 路径掩码内检测
    • 物体属性计算(面积、位置、危险度)

视频处理

bridge_io.py

  • 作用: 线程安全的帧缓冲与分发
  • 主要功能:
    • 生产者-消费者模式
    • 原始帧缓存
    • 处理后帧分发
  • 核心函数:
    • push_raw_jpeg(): 接收 ESP32 帧
    • wait_raw_bgr(): 取原始帧
    • send_vis_bgr(): 发送处理后的帧

sync_recorder.py

  • 作用: 音视频同步录制
  • 主要功能:
    • 同步录制视频和音频
    • 自动文件命名(时间戳)
    • 线程安全
  • 输出: recordings/video_*.avi, audio_*.wav

前端

templates/index.html

  • 作用: Web 监控界面
  • 主要区域:
    • 视频流显示
    • 状态面板
    • IMU 3D 可视化
    • 语音识别结果

static/main.js

  • 作用: 主 JavaScript 逻辑
  • 主要功能:
    • WebSocket 连接管理
    • UI 更新
    • 事件处理

static/vision.js

  • 作用: 视觉流处理
  • 主要功能:
    • WebSocket 接收视频帧
    • Canvas 渲染
    • FPS 计算

static/visualizer.js

  • 作用: IMU 3D 可视化Three.js
  • 主要功能:
    • 接收 IMU 数据
    • 实时渲染设备姿态
    • 动态灯光效果

🔄 数据流

视频流

ESP32-CAM 
  → [JPEG] WebSocket /ws/camera 
  → bridge_io.push_raw_jpeg() 
  → yolomedia / navigation_master 
  → bridge_io.send_vis_bgr() 
  → [JPEG] WebSocket /ws/viewer 
  → Browser Canvas

音频流(上行)

ESP32-MIC 
  → [PCM16] WebSocket /ws_audio 
  → asr_core 
  → DashScope ASR 
  → 识别结果 
  → start_ai_with_text_custom()

音频流(下行)

Qwen-Omni / TTS 
  → audio_player 
  → [PCM16] audio_stream 
  → [WAV] HTTP /stream.wav 
  → ESP32-Speaker

IMU 数据流

ESP32-IMU 
  → [JSON] UDP 12345 
  → process_imu_and_maybe_store() 
  → [JSON] WebSocket /ws 
  → visualizer.js (Three.js)

🎯 关键设计模式

1. 状态机模式

  • 位置: navigation_master.py
  • 作用: 管理系统状态转换
  • 状态: IDLE → CHAT / BLINDPATH_NAV / CROSSING / ...

2. 生产者-消费者模式

  • 位置: bridge_io.py
  • 作用: 解耦视频接收与处理
  • 实现: 线程 + 队列

3. 策略模式

  • 位置: 各 workflow_*.py
  • 作用: 不同导航策略的实现
  • 实现: 统一的 process_frame() 接口

4. 单例模式

  • 位置: 模型加载
  • 作用: 全局共享模型实例
  • 实现: 全局变量 + 初始化检查

5. 观察者模式

  • 位置: WebSocket 通信
  • 作用: 多客户端订阅视频流
  • 实现: camera_viewers: Set[WebSocket]

📦 依赖关系

app_main.py
├── navigation_master.py
│   ├── workflow_blindpath.py
│   │   ├── yoloe_backend.py
│   │   └── obstacle_detector_client.py
│   ├── workflow_crossstreet.py
│   └── trafficlight_detection.py
├── yolomedia.py
│   └── yoloe_backend.py
├── asr_core.py
├── omni_client.py
├── audio_player.py
├── audio_stream.py
├── bridge_io.py
└── sync_recorder.py

🚀 启动流程

  1. 初始化阶段 (app_main.py)

    • 加载环境变量
    • 加载导航模型YOLO、MediaPipe
    • 初始化音频系统
    • 启动录制系统
    • 预加载红绿灯模型
  2. 服务启动 (FastAPI)

    • 注册 WebSocket 路由
    • 挂载静态文件
    • 启动 UDP 监听IMU
    • 启动 HTTP 服务8081 端口)
  3. 运行阶段

    • 等待 ESP32 连接
    • 接收视频/音频/IMU 数据
    • 处理用户语音指令
    • 实时推送处理结果
  4. 关闭阶段

    • 停止录制(保存文件)
    • 关闭所有 WebSocket 连接
    • 释放模型资源
    • 清理临时文件

提示: 如需了解某个模块的详细实现,请查看相应源文件的注释和 docstring。