Paraformer语音识别 语音识别模块怎么用_2d

LD3320是非特定人(不用针对指定人)语音识别芯片,即语音声控芯片。最多可以识别50条预先内置的指令。

工作模式:

LD3320(LDV7)语音模块可以工作在以下三种模式:普通模式:直接说话,模块直接识别;按键模式:按键触发开始ASR进程;口令模式:需要一级唤醒词(口令);推荐使用口令模式,这样避免嘈杂环境下误动作。

应用场景:

  • 家居智能控制
  • 智能小车DIY设计
  • 毕业设计创新功能
  • 个人DIY设计
  • 语音控制嵌入式产品设计

Paraformer语音识别 语音识别模块怎么用_语音识别_02

我购买的LDV7语音识别模块,内置单片机,LD3320语音识别芯片的驱动是靠模块上自带的STC11L08单片机驱动的,我们可以修改模块自带工程的Demo程序,修改里面的关键词,然后将识别的结果通过串口打印出来,我们使用另外一个MCU与该模块进行串口通信,解析收到的串口指令,进而做响应的指令动作。

例如

我们说口令:当前时间(dang qian shi jian)
》》 模块识别之后,串口输出:PrintCom("{\"VoiceCommandCode\":2}");
》》 MCU接收串口信息之后,对该串口指令进行解析(可以使用cJSON解析此字符串);
》》 然后通过TTS文字转语音模块播放当前时间,即完成本次语音识别控制过程。

识别原理:

就是你说一句话,然后模块用拼音去和你的发音做比较,在关键词中找出哪些预设值的词语与发音的接近程度大于多少的(假定50%),然后再从一堆大于(50% )里面输出一个最接近的。

这里就会造成一个问题,容易造成误识别太多。
如果你只有一个关键词:时间
然后你说了一句:‘时刻’,他识别到‘时’这个发音,所以有50% 以上的相似,但是候选词中没有‘时刻’这个比他更接近的关键词,所以他就会输出‘时间’的结果。这样子他就是错误了。
如果你设置一些拟声词,有可能随随便便就触发了。

解决方案:

在设定好要识别的关键词语后,为了进一步降低误识别率,可以再添加一些其他的任意词汇进识别列表,用来吸收错误识别,从而达到降低误识别率的目的。我们把这样一些关键词语称之为“垃圾关键词语”。

比如,某个应用场景中,需要识别的关键词语是 4 条,“前进”,“后 退”,“开门”,“关门”。在把这 4 个关键词语设置进 LD3320 后,可以再另外设置10~30个词语进LD3320,比如“前门”,“后门”,“阿阿阿”,“呜 呜”等等。所以最好把一些拟声词或者容易混淆的词语设置为垃圾关键词,即,识别后不进行输出。
只有识别结果是 4 个关键词语之内的,才认为识别有效。如果识别结果是 “垃圾关键词语”,则说明是其他的声音导致的误识别,产品应该重新开始一 次识别过程。这样,可以非常有效地降低误识别率。极大地提高终端用户的主观使用体验。

移植过程:

1、向LD模块中添加关键词

Paraformer语音识别 语音识别模块怎么用_Paraformer语音识别_03

2、用户执行函数User_handle(nAsrRes); 处理语音识别结果

Paraformer语音识别 语音识别模块怎么用_Paraformer语音识别_04

3、根据不同结果,串口打印不同的指令

Paraformer语音识别 语音识别模块怎么用_Paraformer语音识别_05

PrintCom("{\"VoiceCommandCode\":1}");

4、MCU根据指令不同,执行不同的动作

以JSON格式发送数据至串口,与语音识别模块相连的MCU接收此结果,然后对此字符串进行解析,进而得到当前识别的命令是什么,进而做相应的动作。

//LD3320if ( USART5_RX_STA & 0x8000){    uart5Len = USART5_RX_STA & 0x3f;    //得到此次接收到的数据长度    receive_json = cJSON_Parse(USART5_RX_BUF);    //创建JSON解析对象,返回JSON格式是否正确    if(!receive_json)    {        printf("JSON格式错误:%s \r\n", cJSON_GetErrorPtr());        //输出json格式错误信息    }    else    {        printf("JSON格式正确:%s \r\n", cJSON_Print(receive_json));        item_obj = receive_json->child;        //获取name键对应的值的信息        while (item_obj)        {                        char * string = item_obj->string;            if (!strcmp(string,"VoiceCommandCode"))            {                if (item_obj->valueint ==0)                {                    printf("收到一级口令 智能报时 ... \r\n");                }                else if (item_obj->valueint ==1)                {                    printf("“现在几点了”命令识别成功 \r\n");                    m_nCurrentVoicePlayTimes++;                    while (U5152_BSY)                    {                    }                    if (m_nCurrentVoicePlayTimes % 2 == 0)                    {                        sprintf(( char*)dtbuf,                                "[v5][s5][m3]当前时间为%02d时%02d分%02d秒 \r\n",                                NowHour,                                NowMinute,                                NowSecond);                    }                    else                    {                        sprintf((char *) dtbuf,                                "[v5][s5][m51]当前时间为%02d时%02d分%02d秒 \r\n",                                NowHour,                                NowMinute,                                NowSecond);                    }                    printf((char *) dtbuf);                    XFS_FrameInfo((char *) dtbuf);                    delay_ms(10);                    while (U5152_BSY)                    {                        delay_ms(500);                        printf("while(U5152_BSY) \r\n");                    }                }            }            item_obj = item_obj->next;            printf("while(item_obj) \r\n");        }    }    cJSON_Delete(receive_json);    USART5_RX_STA = 0;     memset( USART5_RX_BUF,0,sizeof(USART5_RX_BUF));    //清空数组}

LDV7模块固件下载:

1、打开编译后的.hex文件

Paraformer语音识别 语音识别模块怎么用_串口_06

2、选对串口号,芯片型号后,选择“下载/编程”按钮,然后给STC单片机上电或者复位。

Paraformer语音识别 语音识别模块怎么用_vb定义模块且使用模块_07

3、发出语音,测试语音识别结果

Paraformer语音识别 语音识别模块怎么用_Paraformer语音识别_08

然后其他与LDV7模块相连的MCU只要解析接收到的串口数据即可。