4.3.30.2. 语音休眠唤醒示例

示例功能概述

A core侧的示例,通过tinyalsa录音,使用HIFI5中间件定义的不同device节点,获取DSP侧处理的音频。 共有四个pipeline,满足原始音频、降噪后3通道唤醒音频、降噪后单通道asr音频的使用需求。

搭配A core智能语音唤醒算法,能够实现低功耗唤醒二次校验、正常功耗降噪唤醒、asr音频vad裁剪等功能。

示例源码结构

sample_wakeup目录结构如下所示:

.
├── CMakeLists.txt                      # 编译所需cmake文件
├── hobot_speech_x5_sdk                 # 算法目录
│   ├── example                         # 算法示例
│   ├── hrsc                            # 配置文件
│   ├── include                         # 算法头文件
│   │   └── horizonspeechsdk
│   │       └── hrsc_sdk.h
│   ├── lib                             # 算法库文件
│   │   ├── libhisf.so
│   │   ├── libhisfvad.so
│   │   └── libhrsc.so
│   └── ReadMe.txt
├── i2c_control.sh                      # 音频版配置脚本
├── include                             # 示例头文件
│   ├── HrscAudioRecorder.h
│   └── HrscDemo.h
├── README.md
├── src                                 # 示例源文件
│   ├── hobot_speech_device_test.cpp    # 音频device测试
│   ├── HrscAudioRecorder.cpp           # tinyalsa封装实现
│   ├── HrscDemo.cc                     # 通用函数和回调函数实现
│   ├── hrsc_sdk_demo_files.cc          # 文件测试实现
│   ├── hrsc_sdk_demo_lp_to_normal.cc   # 进入低功耗,语音唤醒并进入正常功耗唤醒实现
│   ├── hrsc_sdk_demo_pipeline0.cc      # 原生音频送入A core,在A core处理降噪和唤醒实现
│   ├── hrsc_sdk_demo_pipeline1.cc      # 低功耗asr音频获取实现(废弃)
│   ├── hrsc_sdk_demo_pipeline2.cc      # 低功耗唤醒词音频获取实现,唤醒后可获取asr音频
│   └── hrsc_sdk_demo_pipeline4.cc      # 正常功耗下,DSP进行降噪前处理,A core进行唤醒实现
├── x5audio_init.sh                     # 环境搭建脚本
└── xbuild.sh                           # 编译脚本

编译依赖

首先要编译SDK的bsp源码,选择相应开发板的版本。详情见环境搭建及编译说明,并刷机。

其次编译adspfirmware,详情见快速开始

之后在/adsp/sample_wakeup目录下运行

./xbuild.sh

即可在当面目录下打包out目录,结构如下:

.
├── adsp                                            # firmware
├── hrsc                                            # 算法配置文件目录
│   ├── asr_vad
│   │   ├── DGRU_ECNR.meanvar
│   │   ├── DGRU_ECNR.params
│   │   └── hisf_config.ini
│   ├── CRGRU_SUBBAND_HIOK_reset_hx_-1.meanvar
│   ├── CRGRU_SUBBAND_HIOK_reset_hx_-1.params
│   ├── hesr_conf.txt
│   ├── hisf_config_encrypt.ini
│   ├── hrsc_config.cfg                             # Log打印及保存、音频保存等
│   ├── libmono.so
│   ├── meanvar_prior
│   ├── mxfeats_v36_okyiko.pack
│   ├── phone_strs
│   ├── tree-out2
│   └── wakeup_graph.bin
├── hobot_speech_device_test                        # 音频device测试可执行文件
├── hrsc_sdk_demo_files                             # 音频文件离线测试可执行文件
├── hrsc_sdk_demo_lp_to_normal                      # 低功耗->正常功耗全通路测试可执行文件
├── hrsc_sdk_demo_pipeline0                         # pipeline0语音唤醒测试可执行文件
├── hrsc_sdk_demo_pipeline1                         # pipeline1语音唤醒测试可执行文件
├── hrsc_sdk_demo_pipeline2                         # pipeline2语音唤醒测试可执行文件
├── hrsc_sdk_demo_pipeline4                         # pipeline4语音唤醒测试可执行文件
├── i2c_control.sh                                  # 音频版配置脚本
├── lib                                             # 算法库
│   ├── libhisf.so
│   ├── libhisfvad.so
│   └── libhrsc.so
└── x5audio_init.sh                                 # 环境配置脚本

语音唤醒步骤

环境配置

环境部署

可以通过asound命令录音,即表示环境正确。

测试命令

-i:音频文件测试时,音频文件地址。

-ch:音频文件测试时,测试音频通道数的设置。当测试4通道原始音频时,ch需要设置为4。

-switch:音频保存开关,1为开,0为关。

-o:输出路径,包括switch置为1后输出的经过vad裁剪后的asr音频、唤醒词音频等。示例给出在可执行文件上级目录的log文件夹中。

-cfg:配置文件路径。

注意:测试demo无设定运行时长,需要手动Ctrl+C结束运行

# device 0测试。可选0、1、2、4,对应四个pipeline
chmod 777 hobot_speech_device_test
export LD_LIBRARY_PATH=./lib
./hobot_speech_device_test  0

chmod 777 hrsc_sdk_demo_files
export LD_LIBRARY_PATH=./lib
./hrsc_sdk_demo_files  -i ./audio.pcm  -o ../log -cfg ./hrsc -ch 2 -switch 1

chmod 777 hrsc_sdk_demo_pipeline0
export LD_LIBRARY_PATH=./lib
./hrsc_sdk_demo_pipeline0  -o ../log -cfg ./hrsc  -switch 1

chmod 777 hrsc_sdk_demo_pipeline1
export LD_LIBRARY_PATH=./lib
./hrsc_sdk_demo_pipeline1  -o ../log -cfg ./hrsc  -switch 1

chmod 777 hrsc_sdk_demo_pipeline2
export LD_LIBRARY_PATH=./lib
./hrsc_sdk_demo_pipeline2  -o /mnt/log -cfg ./hrsc  -switch 1

chmod 777 hrsc_sdk_demo_pipeline4
export LD_LIBRARY_PATH=./lib
./hrsc_sdk_demo_pipeline4  -o ../log -cfg ./hrsc  -switch 1

chmod 777 hrsc_sdk_demo_lp_to_normal
export LD_LIBRARY_PATH=./lib
./hrsc_sdk_demo_lp_to_normal  -o ../log -cfg ./hrsc  -switch 1

hobot_speech_device_test为音频device测试程序,将指定的device音频进行录音,并保存到同级目录。录音测试使用。

hrsc_sdk_demo_files为离线音频测试程序,将指定的音频作为输入源,对算法准确性进行验证。

hrsc_sdk_demo_pipeline0为纯A core算法验证程序,从i2s获取原始3+1音频到A core,在A core进行降噪前处理和语音唤醒算法。

hrsc_sdk_demo_pipeline1dsp端低功耗算法输出的单通道asr音频测试程序。将此音频录音到A core后,进行vad裁剪。

hrsc_sdk_demo_pipeline2dsp端低功耗算法输出的双通道enhance唤醒词音频,音频的前2秒中包含低功耗唤醒的唤醒词音频。用以二级唤醒校验。

hrsc_sdk_demo_pipeline4dsp正常功耗算法输出的四通道音频测试程序,前三通道为enhance唤醒词音频,用以3麦语音识别算法,第四通道为asr音频,给vad进行裁剪,保存到本地。

hrsc_sdk_demo_lp_to_normal为正常业务通路测试。A core进入litesleep状态,进行在dsp侧进行一级唤醒。唤醒后的唤醒词音频通过pipeline2传给A core做二级校验。校验成功后获取单通道ASR音频进行vad裁剪,并保存到本地(业务上,可能为送到云端或端侧ASR引擎进行语音识别)。当前ASR音频是复用pipeline2第二通道,以节省带宽和存储空间。

算法调试说明

sample_wakeup/hobot_speech_x5_sdk/hrsc/hrsc_config.cfg文件中,修改如下参数可进行log保存和音频保存。 以下为一个示例,保存log和音频文件,到可执行目录上层目录同级的log目录下:

[HRSC_CONFIG]
# HRSC SDK CONFIG FILE
[LOG]
LOG_LEVEL=2                                     # log等级,1:debug,2:info,3:warning,4:error,一般建议3
SAVE_LOG_PATH="/mnt/log/log.txt"                # log保存路径,绝对路径
SAVE_LOG_FLAG=1                                 # log保存开关,1为开,0为关
[DATA]
# save data mode, 0 is new mode, 1 is previous mode
SAVE_DATA_MODE=0                                # 音频保存模式,无需修改
# switch flag 1
SAVE_DATA_FLAG1="./hobot_speech_device_test"    # 任意存在的文件的路径,例如可执行文件的路径,包含文件名
# file name 1
SAVE_DATA_PATH1="../log"                        # 音频保存路径,绝对路径或者可执行文件的相对路径
# switch flag 2
SAVE_DATA_FLAG2=""
# file name 2
SAVE_DATA_PATH2=""
# valid if only SAVE_DATA_MODE is 1
SAVE_AUDIO_FLAG=""
# valid if only SAVE_DATA_MODE is 1
SAVE_AUDIO_PATH=""
# limit file size, support G,M,K, default K
PER_FILE_LIMIT_SIZE=0K
[ASR]
SAVE_ASR_FLAG=""
SAVE_ASR_PATH=""
[CPU]
CPU_THRESHOLD_FREQ="1008000"
[TCP TEST]
TCP_TEST_FLAG=0
TEST_IP=""
TEST_PORT=""
[WAKERESULT]
SAVE_WAKE_RESULT_FLAG=0
SAVE_WAKE_RESULT_PATH=""
[THREAD_ID]
THREAD_ID_FILE=""
[AUTH]
ACTIVATE_DEVICE_SN=""
AUTH_PATH="/data/"
AUTH_CHECK_TIME=5
[VERSION]
VERSION="x5-0.0.5"                     # 算法版本号

运行结果展示

测试pipeline4,且log_level为3结果如图所示:

Test_result

log及音频保存如图所示:

log_save

wkp_x.pcmasr_x.pcm分别为单通道唤醒词音频和裁剪后的ASR音频,x数字代表第几次唤醒。

hrsc_asr.pcm是保存的单通道asr音频。

hrsc_enhance.pcm是三通道降噪后音频,用以语音唤醒。

hrsc_raw.pcm是四通道音频,根据输入的音频不同,内容会有所差异,为送入算法的所有音频的集合,不满四通道的音频会补充到四通道。例如,送入单通道ASR音频,则raw文件的第一通道是送入的单通道音频数据,后三通道补0。

hrsc_vad.vadvad标识,0和1,算法效果调试使用。

log_xxx.txtlog.txt为log保存配置设置的文件名,xxx为系统时间戳。

process.pcm音频为处理音频,即送入算法处理的源音频。