一直在留意关于离线式语音识别的新方案,一次偶然的机会发现esp出了ASR的架构就忍不住想要测试它的效果到底如何。在某宝上买了块安信可的ESP32-A1S AudioKit,然后ESP-ADF开发环境搭建,最终成功烧录到了开发板。开始测试了。。。可是死活只能识别“HI乐鑫”的唤醒词,默认添加的如“打开空调”等命令词怎么都不能识别。
一开始一直认为是配置问题,make menuconfig各种操作,因为我想官方给的例子怎么会不行呢?Read me写的很清楚呀,唤醒后就可以识别“打开空调”,”打开电灯“的命令呀。然后各种搜索,最终决定静下心来看乐鑫官网的资料。终于功夫不负有心人,唤醒词和命令词不是用的同一个模型。ASR的例子只是实现了wakenet唤醒词模型,multinet才是实现其他命令的模型。
找到问题就加上这些个代码。最终实现了一个语音识别控制的蓝牙播放器的程序。连上手机后播放音乐,然后可以实现“上一曲”,“下一曲”,“音量加”,“音量减”语音控制。核心代码如下:
raw_stream_read(raw_read, (char *)buff_for_asr, audio_chunksize * sizeof(short));
if(wakeUpFlag){
//other commands
wakeUpTimeCount++;
if(wakeUpTimeCount >= chunk_num){
wakeUpTimeCount = 0;
wakeUpFlag = false;
ESP_LOGI(TAG, "Sleep again!");
}
command_id = multinet->detect(model_data_mn, buff_for_asr)