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%