目录

openvela-audio-event-detect

基于 openvela / Apache NuttX 的本地音频事件检测系统。在 K210 (maix-bit) 上离线识别玻璃破碎咳嗽两类音频事件。

快速复现

0. 前置条件

  • openvela 工作区(repo init + repo sync)
  • riscv64-unknown-elf-gcc 工具链
  • genromfs 和 kflash (pip install kflash)

1. 应用增量

git clone https://gitlink.org.cn/aurasuisui/openvela-audio-event-detect
cd openvela-audio-event-detect
./apply.sh /path/to/your/openvela

2. 编译

cd /path/to/your/openvela/nuttx
./tools/configure.sh maix-bit:audio_detect
make -j$(nproc)

3. 烧录运行

# 进入 ISP 模式:按住 BOOT → 按 RST → 松 BOOT
kflash -p /dev/ttyACM0 -b 115200 nuttx.bin
minicom -D /dev/ttyACM0 -b 115200
nsh> audio_detect

输出示例:

[SOURCE] ROMFS: /mnt/audio/glass_0.wav, 24000 samples @ 16000Hz
[CLASSIFY] d_g=21 d_c=35 → GLASS_BREAK (conf=0.26)
[ALERT] GLASS_BREAK

[SOURCE] ROMFS: /mnt/audio/cough_0.wav, 24000 samples @ 16000Hz
[CLASSIFY] d_g=25 d_c=20 → COUGH (conf=0.11)
[ALERT] COUGH

[CLASSIFY] (silent) → NONE

项目结构

src/apps/examples/audio_detect/    — 应用源码
src/nuttx/boards/.../audio_detect/ — K210 板级配置
tools/                             — 数据管线与构建脚本
docs/                              — 性能数据与合规

技术栈

  • RTOS: openvela / Apache NuttX
  • MCU: K210 (RISC-V 64-bit, 416 MHz)
  • 算法: MFCC (13维, 浮点) + 欧氏距离模板匹配
  • 数据集: ESC-50 (glass_breaking + coughing 类)
  • libm: openlibm 0.8.1 (riscv64 后端)

性能

指标
PC 基线准确率 50.6%
端侧演示准确率 3/3 正确
单片段延迟 ~55 ms

详情见 docs/perf.md

音频源说明

本系统使用的音频来自 ESC-50 公开数据集,以内嵌 ROMFS 文件系统或 PCM 数组的形式存储在 K210 固件中。K210 上游缺乏 I2S 驱动,真实麦克风采集规划在复赛 ESP32-S3-BOX 上完成(NuttX 上游已有 esp32s3-box 板级 + I2S 音频驱动)。

许可证

本项目代码使用 Apache License 2.0。依赖:

  • Apache NuttX (Apache-2.0)
  • CMSIS-DSP v5.8.0 (Apache-2.0)
  • openlibm v0.8.1 (MIT/BSD-2-Clause)
  • ESC-50 数据集 (CC BY-NC-SA 4.0, 仅用于模板训练,不包含在仓库中)

LICENSENOTICE

邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号