语音活动检测模型
VADNet 是一个基于神经网络的语音活动检测模型,专为低功耗嵌入式MCU设计。
概述
VADNet 采用了与 WakeNet 相似的模型结构和数据处理流程,更多实现细节可参考 WakeNet 中的说明。
VADNet 训练数据包括了大约5000小时中文数据, 5000 小时英文数据,还有5000小时的多语言数据。
使用VADNet
选择VADNet模型
idf.py menuconfig ESP Speech Recognition -> Select voice activity detection -> voice activity detection (vadnet1 medium).
运行VADNet
VADNet 当前集成在 音频前端处理模块 中,默认处于启用状态,通过AFE的fetch接口返回检测结果。
常用VAD参数配置如下:
afe_config->vad_init = true // 是否在AFE流水线中初始化VAD,默认启用 afe_config->vad_min_noise_ms = 1000; // 噪声/静音段的最短持续时间(毫秒) afe_config->vad_min_speech_ms = 128; // 语音段的最短持续时间(毫秒) afe_config->vad_delay_ms = 128; // VAD首帧触发到语音首帧数据的延迟量 afe_config->vad_mode = VAD_MODE_1; // 模式值越大,语音触发概率越高
如需临时启用/禁用/重置VADNet,可使用以下接口:
afe_handle->disable_vad(afe_data); // 禁用VAD afe_handle->enable_vad(afe_data); // 启用VAD afe_handle->reset_vad(afe_data); // 重置VAD状态
VAD缓存与检测
VAD配置中的两个特性可能导致语音首帧触发延迟:
VAD算法固有延迟:VAD无法在首帧精准触发,可能有1-3帧延迟
防误触机制:需持续触发时间达到配置参数`vad_min_speech_ms`才会正式触发
为避免上述原因导致语音首字截断,AFE V2.0新增了VAD缓存机制。可通过检查vad_cache_size判断是否需要保存VAD缓存:
afe_fetch_result_t* result = afe_handle->fetch(afe_data); if (result->vad_cache_size > 0) { printf("vad cache size: %d\n", result->vad_cache_size); fwrite(result->vad_cache, 1, result->vad_cache_size, fp); } printf("vad state: %s\n", res->vad_state==VAD_SILENCE ? "noise" : "speech");
资源占用
本模型的资源占用情况请参考 资源占用说明。