目录

基于 openvela 的本地音频事件检测系统

本项目基于 openvela / NuttX 构建端侧音频事件检测系统,实现数字麦克风实时采集、预处理 / MFCC 特征提取、TFLite Micro INT8 本地推理、后处理确认和本地告警。系统在无云端依赖条件下识别 coughknock 两类音频事件,并通过 UART 串口日志和 GPIO LED 输出告警,满足初赛“采集 -> 识别 -> 告警”离线闭环要求。

初赛要求对应关系

初赛要求 本项目实现
离线本地闭环 DMIC 采集、预处理、MFCC、INT8 TFLite Micro 推理、串口 / LED 告警均在板端完成
至少 2 类事件 支持 coughknock 两类有效事件,另含 background 背景类
事件定义与触发口径 README 下方给出事件定义、串口输出、最终计数合并规则
可复现运行 提供 selftestfilelive 三种模式和对应日志
异常处理与稳定性 提供音频链路检查、常见异常处理建议和 30 分钟长测日志
开源合规 根目录包含 LICENSENOTICEPACKAGE_MANIFEST.md
演示材料 包含板端日志、演示视频、样例 WAV 和固件 SHA256

核心功能

  • 端侧实时音频采集:从 hw:snddmic 采集 48 kHz / 16-bit / stereo PCM。
  • 本地推理:板端完成立体声转单声道、重采样、滑动窗口、MFCC 特征提取和 INT8 TFLite Micro 推理。
  • 事件类别:backgroundcoughknock
  • 本地告警:串口输出 [AED] event=...,GPIO LED 提供可视化提示。
  • 复现模式:支持 selftestfilelive 三类运行方式。

硬件和固件环境

项目 配置
开发板 Dshan / T113S3 openvela 开发板
麦克风 板载或外接数字麦克风
音频设备 hw:snddmic
采集参数 48 kHz / 16-bit / stereo PCM
串口 UART0,115200 baud,8N1
告警输出 UART 串口日志 + GPIO LED
固件版本 v35
固件文件 firmware/v35.img
SHA256 1c0c34e39a78734ed7396bfff0209cb4bdb148c47b2ab9c63d988827ecb5d1c5

事件定义和触发口径

类别 定义 输出口径
background 安静背景、普通环境底噪或非目标音频 不触发 cough / knock 告警
cough 人声咳嗽事件 串口输出 [AED] event=cough score=...,LED0 状态变化
knock 敲击 / 敲门类短促冲击声 串口输出 [AED] event=knock score=...,LED1 状态变化

实时 [AED] event=... 串口输出用于展示事件触发过程,最终统计用于复现实验和评估记录。系统启动后会进行 2 秒噪声校准,安静背景测试应在启动阶段避免敲击、咳嗽和强噪声。

端到端链路

DMIC 采集
-> 立体声转单声道 / 重采样
-> 滑动窗口
-> MFCC 特征提取
-> TFLite Micro INT8 推理
-> 后处理确认 / 误报抑制
-> 串口日志和 LED 告警
-> 最终 emitted events 人类动作计数

快速复现

先检查录音链路:

arecord -D hw:snddmic -r 48000 -f 16 -c 2 -d 3 /tmp/aed_test.wav

如果系统支持回放,可继续检查 WAV 是否可播放:

aplay -D hw:audiocodec /tmp/aed_test.wav

selftest:

aed --mode selftest --backend tflm --no-led

通过标准:输出 SMOKE_OK,程序正常结束,对应日志为 demo/logs/selftest.log

安静背景测试:

aed --mode live -D hw:snddmic -r 48000 -c 2 -d 30 --backend tflm

通过标准:最终 emitted eventscough=0knock=0,对应日志为 demo/logs/live_background.log

实时事件演示:

aed --mode live -D hw:snddmic -r 48000 -c 2 -d 60 --backend tflm

通过标准:咳嗽时出现 [AED] event=cough,敲击时出现 [AED] event=knock,LED 状态同步变化。pure cough、pure knock 和 mixed 场景日志分别位于 demo/logs/live_cough.logdemo/logs/live_knock.logdemo/logs/live_mixed.log

WAV/file 复现:

aed --mode file --input /tmp/aed_test.wav --backend tflm --no-led

提交包提供样例 WAV:

demo/wav_samples/background_sample.wav
demo/wav_samples/cough_sample.wav
demo/wav_samples/knock_sample.wav

预期事件输出示例:

[AED] event=cough score=...
[AED] event=knock score=...

emitted events:
  cough: ...
  knock: ...

板端验证摘要

场景 目标 v35 板端日志结果 日志
selftest 冒烟测试通过,无崩溃 SMOKE_OKstopped ret=0 demo/logs/selftest.log
file/background 背景样本无 cough / knock 告警 background: 9,无 cough / knock 事件,stopped ret=0 demo/logs/file_background.log
live background 安静背景无误报 emitted events: cough=0, knock=0stopped ret=0 demo/logs/live_background.log
pure cough cough 可触发,knock 不误触发 emitted events: cough=5, knock=0stopped ret=0 demo/logs/live_cough.log
pure knock knock 可触发,cough 不误触发 emitted events: cough=0, knock=5stopped ret=0 demo/logs/live_knock.log
mixed cough / knock 均可触发 emitted events: cough=2, knock=2stopped ret=0 demo/logs/live_mixed.log
30 分钟长测 持续采集、推理和告警输出无崩溃 stopped ret=0 demo/logs/stability_30min.log.txt

说明:stability_30min.log.txt 是非静音压力 / 长时间运行记录,用于证明持续运行稳定性,不作为静音误报率统计。安静背景误报统计以 demo/logs/live_background.log 为准。

性能和资源摘要

项目 v35 实测 / 配置
支持事件类别 2 类:coughknock
实时窗口长度 1.0 s
检测步进 250 ms
噪声校准时长 2.0 s
模型类型 INT8 TFLite Micro
模型文件大小 10,032 B
Tensor arena 配置 128 KB
固件镜像大小 20,802,560 B
best validation accuracy 90.56%
test float accuracy 89.93%

详细评估数据见 docs/测试评估报告.md,端到端设计见 docs/端到端设计说明.md,告警映射见 docs/输出告警说明.md

异常处理和稳定运行

  • 音频设备打开失败:检查 hw:snddmic 是否存在,确认 AUDIO 配置已启用,并确认没有其他进程占用录音设备。
  • WAV 无法读取或 file 模式无结果:先用 arecord 重新采集 /tmp/aed_test.wav,确认录音不是全静音或严重削波。
  • 安静场景误报:启动后前 2 秒保持安静,等待噪声校准完成;测试时避免风扇、键盘、桌面震动等高冲击噪声。
  • 事件检测不到:检查麦克风增益、测试距离和事件强度,先确认 selftest 与 background 场景正常,再分别测试 cough 和 knock。
  • LED 不可用:可添加 --no-led 禁用 GPIO LED,串口 [AED] event=... 仍作为主要可验证告警输出。

提交包目录

以下为提交包根目录结构:

README.md
LICENSE
NOTICE
PACKAGE_MANIFEST.md
source/audio_event_detector/       源码、模型文件和 openvela/NuttX 构建配置
firmware/                          v35 固件镜像和 SHA256
docs/                              复现、技术、测试、数据和告警说明
demo/logs/                         构建日志和板端串口日志
demo/videos/                       演示视频
demo/wav_samples/                  file 模式样例 WAV
demo/dashboard/                    浏览器演示辅助页
scripts/                           板端测试命令和串口记录说明

详细文档

  • docs/初赛复现说明.md:硬件环境、固件信息、运行步骤、通过标准和常见问题。
  • docs/测试评估报告.md:功能验证表、训练摘要、性能和资源数据。
  • docs/初赛技术报告.md:系统设计、模型和工程实现说明。
  • docs/端到端设计说明.md:采集、特征、推理、后处理和输出链路。
  • docs/输出告警说明.md:UART 输出、LED 映射和 --no-led 行为。
  • docs/数据集说明.md:数据来源、类别和训练 / 验证 / 测试划分说明。
关于

基于 openvela/NuttX 的端侧离线音频事件检测系统,支持 cough/knock 两类事件,完成 DMIC 采集、MFCC、TFLite Micro INT8 推理与串口/LED 告警。

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

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