logo
0
0
WeChat Login

🌱 Seedling

ESP32-S3 AI 宠物原型系统

在 100 元级硬件上实现完整 AI 宠物能力边界验证

License Python ESP-IDF

English | 简体中文


✨ 亮点特性

  • 🎯 极致轻量 - Tiny CNN 仅 8KB,远低于 60KB 限制
  • 🔄 双路推理 - 帧差法快速响应 + CNN 精确分类
  • 🖥️ PC 仿真 - 无需硬件即可验证算法
  • 📱 一键部署 - 提供完整 ESP32-S3 C 代码模板
  • 📊 实时监控 - 完整的内存/性能分析工具
  • 🎨 GUI调试界面 - 低延迟可视化监控(< 5ms开销)
  • 🧠 事件驱动 - 防抖机制 + 状态机架构

🎬 效果演示

[帧0001] IDLE      (ー_ー)    视觉:[██░░░░]静 音频:🔇[░░░░]--
[帧0002] CURIOUS   (・o・)    视觉:[████░░]动 音频:🔊[██░░]人
[帧0003] HAPPY     (◕‿◕)    视觉:[██████]大 音频:🗣[████]人

🏗️ 系统架构

┌─────────────────────────────────────────────────────────┐
│                      物理世界                            │
│               摄像头 / 麦克风 / 触摸传感器                │
└─────────────────────────┬───────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│              感知降级层 (Perception)                     │
│         视觉: 160×120 灰度 @ 5 FPS                      │
│         音频: 16kHz 单声道 @ 100ms 分块                  │
└─────────────────────────┬───────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│                 推理层 (Inference)                       │
│    ┌────────────────┐    ┌────────────────┐            │
│    │ 帧差法运动检测  │    │ RMS + 频段分析  │  ← 规则    │
│    └───────┬────────┘    └───────┬────────┘            │
│            │                     │                      │
│    ┌───────▼────────┐    ┌───────▼────────┐            │
│    │  MotionNet CNN │    │  AudioNet CNN  │  ← 神经网络│
│    │   32×24 → 3类  │    │   16×10 → 4类  │            │
│    └───────┬────────┘    └───────┬────────┘            │
└────────────┼─────────────────────┼──────────────────────┘
             │                     │
             ↓                     ↓
┌─────────────────────────────────────────────────────────┐
│                事件生成层 (Events)                       │
│     MOTION_STARTED / SOUND_DETECTED / VOICE_DETECTED    │
│                    + 防抖处理                            │
└─────────────────────────┬───────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│                  状态机层 (FSM)                          │
│    IDLE → CURIOUS → LISTENING → ALERT → HAPPY          │
│      └──────────────→ SLEEPY (10秒无事件)               │
└─────────────────────────┬───────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│                   输出层 (Output)                        │
│            表情代码 / LED 颜色 / 声音播放                 │
└─────────────────────────────────────────────────────────┘

📋 硬件约束

约束项ESP32-S3 限制原型实现状态
视觉分辨率160×120 灰度强制降级
视觉帧率≤5 FPS200ms 间隔
音频采样率16kHz 单声道模拟/真实
单块时长100ms1600 样本
模型大小≤60KB~8KB
推理延迟≥20mssleep 模拟
SRAM 使用512KB~50KB (10%)

🧠 Tiny CNN 规格

模型输入输出参数量float32int8
MotionNet32×24 灰度3 类1,1074.3KB1.1KB
AudioNet16×10 mel4 类9963.9KB1.0KB
合计2,1038.2KB2.1KB

🚀 快速开始

方式一:PC 仿真(推荐)

# 克隆仓库
git clone https://github.com/quyangminddock/esp32_simulate_platform.git
cd seedling

# 安装依赖
pip install -r requirements.txt

# 运行(终端模式)
python main.py

# 运行(GUI监控界面)⭐ 新功能
python main.py --gui

# 可选参数
python main.py --gui --no-cnn      # GUI + 禁用 CNN(最低延迟)
python main.py --gui --no-audio    # GUI + 禁用音频
python main.py --no-audio          # 终端 + 禁用音频

# 退出
# 按 Ctrl+C 或关闭 GUI 窗口

GUI 功能预览

  • 📹 实时摄像头画面 + 运动检测叠加
  • 🎵 音频波形 + 频谱可视化
  • 🎭 状态机状态 + 表情显示
  • 📋 事件时间线(最近10条)
  • ⚡ 8个性能指标实时监控

详见 GUI使用文档快速启动指南

方式二:ESP32-S3 部署

# 前置条件:安装 ESP-IDF v5.1+
cd esp32_template
idf.py set-target esp32s3
idf.py build
idf.py flash monitor

📊 性能测试

# 完整测试
python -m tests.benchmark

# 指定测试类型
python -m tests.benchmark --test model
python -m tests.benchmark --test inference
python -m tests.benchmark --test memory

# 压力测试(30秒)
python -m tests.benchmark --stress --duration 30

📁 项目结构

seedling/
├── main.py                     # 主入口
├── requirements.txt            # Python 依赖
├── GUI_QUICKSTART.md          # GUI 快速启动指南 ⭐
│
├── perception/                 # 感知降级层
│   ├── vision.py              # 视觉(160×120 灰度)
│   └── audio.py               # 音频(16kHz 单声道)
│
├── inference/                  # 推理层
│   ├── motion_detector.py     # 帧差法运动检测
│   ├── audio_analyzer.py      # 音频能量分析
│   ├── motion_classifier.py   # CNN 运动分类
│   └── audio_classifier.py    # CNN 音频分类
│
├── models/                     # 模型定义
│   └── tiny_cnn.py            # Tiny CNN 框架
│
├── events/                     # 事件系统
│   └── event_bus.py           # 事件生成 + 防抖
│
├── fsm/                        # 状态机
│   └── state_machine.py       # 情绪状态管理
│
├── gui/                        # GUI 监控界面 ⭐
│   ├── __init__.py            # 模块导出
│   └── monitor.py             # 实时可视化界面
│
├── simulator/                  # 硬件约束模拟器
│   └── constraints.py         # ESP32-S3 限制模拟
│
├── tests/                      # 测试套件
│   └── benchmark.py           # 极限性能测试
│
├── esp32_template/             # ESP32-S3 C 代码模板
│   ├── CMakeLists.txt         # 项目配置
│   ├── sdkconfig.defaults     # SDK 默认配置
│   ├── partitions.csv         # 分区表
│   ├── main/                   # 主代码
│   └── models/                 # 模型头文件
│
└── docs/                       # 文档
    ├── architecture.md        # 系统架构
    ├── modules.md             # 模块说明
    ├── state-machine.md       # 状态机设计
    ├── tiny-cnn.md            # CNN 设计
    ├── deployment.md          # 部署指南
    ├── gui-usage.md           # GUI 使用文档 ⭐
    ├── esp32-peripherals.md   # 外设驱动详解
    └── freertos-tasks.md      # FreeRTOS 任务设计

📚 文档

文档说明
GUI快速启动⭐ GUI监控界面快速上手
GUI使用文档⭐ GUI完整功能和调试技巧
系统架构整体设计和数据流
模块说明各模块详细说明
状态机设计情绪状态转换规则
Tiny CNN轻量级神经网络设计
部署指南ESP32-S3 硬件部署概览
外设驱动GPIO/I2C/I2S/SPI 详解
FreeRTOS 任务双核任务设计

💾 内存使用

ESP32-S3 SRAM 使用(~50KB / 512KB = 10%)

视觉帧缓冲 ×2        38,400 B   当前帧 + 上一帧
运动检测工作区        1,024 B   临时变量
音频块缓冲            3,200 B   100ms @ 16kHz
FFT 工作区            1,536 B   complex + 频谱
mel 滤波器组          8,256 B   预计算
mel 帧缓冲              640 B   10 帧特征
CNN 工作区            3,840 B   视觉 + 音频
事件+状态机             768 B   防抖器 + 状态
────────────────────────────────
总计                  ~58 KB

🛠️ 推荐硬件

组件推荐型号价格参考
主控ESP32-S3-WROOM-1¥25
摄像头OV2640 (QCIF 模式)¥15
麦克风INMP441 I2S¥8
显示屏0.96" OLED SSD1306¥10
喇叭MAX98357 I2S 功放¥5
总计~¥63

🤝 贡献

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送分支 (git push origin feature/amazing-feature)
  5. 提交 Pull Request

📄 许可证

本项目基于 MIT 许可证开源 - 查看 LICENSE 文件了解详情。


Made with ❤️ for Makers

如果这个项目对你有帮助,请给一个 ⭐ Star!

About

在 100 元级硬件上实现完整 AI 宠物能力边界验证

194.00 KiB
0 forks0 stars1 branches0 TagREADMEMIT license
Language
Python77%
C22.7%
CMake0.3%