Skip to content

About

ESP32在线AI识别算法

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DeafGuardian

基于ESP32-S3的声音识别系统,作为听障人士关护系统的核心感知模块。使用Edge Impulse机器学习模型实现多种声音的实时识别,并通过WiFi将识别结果传输给星火一号(STM32F407)中枢处理器。

系统架构

本项目是听障人士关护系统的声音识别模块,整体系统架构如下:

系统组成:

  • ESP32-S3 声音识别模块(本项目)

    • 功能:声音采集、AI识别、WiFi通信
    • 输入:环境声音(门铃、敲门声、电话、警报等)
    • 输出:识别结果通过WiFi发送
  • 星火一号(STM32F407)中枢处理器

    • 功能:数据汇总处理、多模态融合、告警通知
    • 输入:接收ESP32-S3的识别结果
    • 输出:驱动输出设备
  • 输出设备

    • 振动器、LED指示灯、语音播报

数据流向:

环境声音 → ESP32-S3声音识别 → WiFi传输 → 星火一号中枢处理 → 输出设备告警

本项目展示的是系统中的声音识别部分(ESP32-S3模块)。

功能特性

  • 实时音频采集与处理
  • 支持7种声音分类识别
  • I2S接口麦克风输入(如INMP441)
  • 基于TensorFlow Lite Micro的边缘推理
  • 16kHz采样率,高精度识别
  • WiFi通信,远程数据传输
  • 低功耗设计,适合长时间运行

硬件要求

  • ESP32-S3开发板
  • I2S接口麦克风模块(如INMP441)
  • OLED屏幕(SSD1306,128x32分辨率)
  • USB数据线
  • WiFi路由器或热点

引脚连接

I2S麦克风模块(INMP441)

ESP32-S3引脚 麦克风模块引脚 说明
GPIO 5 SCK (或 CLK) I2S 串行时钟线(位时钟)
GPIO 6 WS I2S 帧时钟线(声道选择时钟)
GPIO 7 SD (或 DATA) I2S 串行数据线(音频数据推入内核)
3.3V VDD (或 3V3) 电源
GND GND 接地
GND L/R 致命关键:必须死死连接到地线!强行激活麦克风的左声道发射逻辑,使其数据精准落在算法解包的偶数索引上。若悬空,模型会因接收空数据而冰封。

OLED屏幕(SSD1306)

ESP32-S3引脚 OLED屏幕引脚 说明
GPIO 11 SCK (或 CLK) I2C 串行时钟总线
GPIO 12 SDA (或 DATA) I2C 串行数据总线
3.3V VCC 屏幕供电正极
GND GND 信号参考地线

注意事项

  • 麦克风模块使用I2S接口进行音频采集
  • OLED屏幕使用I2C接口进行通信,I2C地址为0x3C
  • 所有模块均使用3.3V电源,请勿使用5V供电
  • 确保所有GND引脚正确连接,避免信号干扰

软件环境配置

步骤1:安装VS Code

下载并安装最新版本的Visual Studio Code: https://code.visualstudio.com/

步骤2:安装PlatformIO插件

  1. 打开VS Code
  2. 点击左侧活动栏的"扩展"图标(或按 Ctrl+Shift+X)
  3. 在搜索框中输入 PlatformIO IDE
  4. 点击"安装"按钮
  5. 等待安装完成后重启VS Code

步骤3:克隆项目

git clone https://github.com/CyberX0725/DeafGuardian.git
cd DeafGuardian

步骤4:打开项目

  1. 在VS Code中点击"文件" → "打开文件夹"
  2. 选择 DeafGuardian 文件夹
  3. PlatformIO会自动加载项目配置

步骤5:配置开发板

  1. 点击左下角的"PIO Home"图标
  2. 在"Devices"选项卡中确认ESP32-S3已正确连接
  3. 检查 platformio.ini 文件中的配置:
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200

编译与上传

编译项目

点击左下角的 ✅ 图标,或使用快捷键 Ctrl+Alt+B 编译项目。

上传到开发板

  1. 将ESP32-S3通过USB连接到电脑
  2. 点击右下角的 ⬆️ 图标上传固件
  3. 等待上传完成

查看串口输出

  1. 点击左下角的"串口监视器"图标
  2. 选择正确的串口端口
  3. 波特率设置为 115200
  4. 即可看到声音识别结果和WiFi连接状态

项目结构

DeafGuardian/
├── lib/
│   └── Acoustic_Sentry_inferencing/     # Edge Impulse推理库
│       ├── src/
│       │   ├── edge-impulse-sdk/        # Edge Impulse SDK
│       │   ├── model-parameters/        # 模型参数
│       │   └── Acoustic_Sentry_inferencing.h
│       └── examples/                    # 示例代码
├── src/                                 # 主程序源码
├── include/                             # 头文件
├── platformio.ini                       # PlatformIO配置
└── README.md                            # 项目说明

模型参数

  • 项目名称:Acoustic_Sentry
  • 输入频率:16000 Hz
  • 采样点数:16000
  • 分类类别:7种
  • 推理引擎:TensorFlow Lite
  • 量化类型:INT8

工作流程

  1. 音频采集:通过I2S接口实时采集麦克风数据
  2. 信号处理:使用DSP算法提取音频特征(MFCC)
  3. 模型推理:基于TensorFlow Lite Micro运行预训练模型
  4. 结果判断:分析置信度,确定识别结果
  5. 数据传输:通过WiFi将识别结果发送到中枢处理器
  6. 持续监测:循环执行,实时监测环境声音

WiFi配置

虽然本项目最初是为与星火一号(STM32F407)中枢处理器配合使用而设计的,但该项目可以独立运行,并通过WiFi向特定的WiFi热点传输声音识别信号。其他开发者可以根据需要修改目标IP地址和端口,实现与不同设备的通信。

默认WiFi配置

参数 值
WiFi名称(SSID) AcousticNet
WiFi密码 12345678
目标IP地址 192.168.169.1
目标端口 8888
心跳间隔 10秒

修改WiFi配置

若需要连接不同的WiFi热点或目标设备,请修改 src/main.cpp 文件中的 Config 命名空间:

namespace Config
{
  const char *SSID = "你的WiFi名称";
  const char *PASSWORD = "你的WiFi密码";
  const char *TARGET_IP = "目标设备IP地址";
  const int TARGET_PORT = 目标端口号;
}

通信协议

ESP32-S3通过WiFi使用UDP协议与目标设备进行通信。

通信方式

  • 协议类型:UDP(用户数据报协议)
  • 端口号:8888
  • 通信频率:心跳包每10秒发送一次,识别到声音时立即发送事件包

数据包格式

每个UDP数据包长度为8字节,格式如下:

+--------+--------+------------------------------+
| Byte 0 | Byte 1 | Byte 2-7                     |
| EventID|Confidence| MAC Address (6 bytes)      |
+--------+--------+------------------------------+
  1字节    1字节           6字节

Event ID 定义

Event ID 十六进制值 声音类型
心跳包 0x10 Heartbeat
火警 0x01 Fire Alarm
门铃 0x02 Doorbell
敲门声 0x03 Door Knock
碎玻璃 0x05 Glass Broken
电话铃声 0x06 Phone Ring
漏水声 0x07 Water Leak

数据示例

当识别到火警(置信度85%)时,发送的UDP数据包为:

0x01 0x55 0xAA 0xBB 0xCC 0xDD 0xEE 0xFF
│    │    └────────────────────────────┘
│    │           MAC地址
│    └─ 置信度 85% (0x55 = 85)
└─ Event ID 火警 (0x01)

心跳包

系统每10秒发送一次心跳包,用于确认设备在线状态:

  • Event ID: 0x10
  • Confidence: 0x00
  • MAC Address: 设备的MAC地址

使用说明

  1. 确保麦克风模块和OLED屏幕正确连接
  2. 根据需要修改WiFi配置(SSID、密码、目标IP和端口)
  3. 上传固件后等待WiFi连接成功(OLED屏幕显示"Connecting WiFi...")
  4. 系统开始持续采集音频并进行识别
  5. 识别到声音时,自动通过UDP协议发送识别结果到目标设备
  6. 在串口监视器中查看识别结果和通信状态
  7. 目标设备(如星火一号或其他UDP服务器)接收并处理识别结果

技术原理

声音识别流程

麦克风输入 → I2S采集 → 数据缓存 → DSP处理(MFCC) → 特征提取
                                                    │
                                                    v
                                    TensorFlow Lite推理 → 分类结果
                                                    │
                                                    v
                                            置信度判断 → WiFi传输 → 中枢处理

关键技术

  • I2S音频采集:高效的数字音频接口,支持高保真采样
  • MFCC特征提取:梅尔频率倒谱系数,适合语音识别
  • TensorFlow Lite Micro:轻量级机器学习推理引擎
  • WiFi通信:低延迟、稳定的数据传输

许可证

本项目基于MIT开源协议。

注意事项

  • 需要Edge Impulse订阅才能使用此模型
  • 确保开发板有足够的内存(至少64KB RAM)
  • 建议在安静环境下测试以获得最佳识别效果
  • 确保WiFi网络稳定,以保证数据传输可靠性
  • 本项目仅包含声音识别模块,完整系统需配合星火一号中枢处理器使用

About

ESP32在线AI识别算法

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages