LD3320离线语音识别快速实现

本文记录了作者使用STM32控制LD3320语音识别模块的过程,从获取模块资料、代码编写、问题排查到自定义关键词及性能优化。遇到的问题包括SPI通信线反接,以及识别准确性依赖于发音细节。通过拼音标注英文唤醒词和录入多个发音,提高了识别成功率。后续计划对响应速度进行优化。
摘要由CSDN通过智能技术生成

从师弟那里获得了一块语音识别模块,查阅资料得知这是一款非特定语音识别芯片,有50个关键词条可以自定义,很cool的一个东西,摆脱了使用skainet只能“嗨,乐鑫”的苦恼。

一、获取资料

要获取这种模块的资料,我目前所知的最简单的方法是逛淘宝,哈哈。只要在淘宝上找到对应的商品链接,那么商品详情里就会有它的详尽资料,运气好一点的话,还可以获取示例代码的度盘链接。

总之,以下就是我从淘宝获取到的资料。

绿深-LD3320模块 SPI接口版资料 :https://pan.baidu.com/s/1KYOiYo8Gh1ZJq5EP7CUiCA

提取码:1764

解压一看,内容还真不少,原理图、布局图、例程一应俱全。

二、代码编写

我对stm32的开发比较熟悉,所以接下来依据stm32f1的例程作修改。

里面是一个io模拟spi通信控制ld3320的例程,修改应用起来也很简单,把它的引脚、延时、log都改成我们自己的就可以了。

首先,修改引脚的宏定义,根据自己的连线修改。

例程这边使用的是一个带参宏+位带操作的形式,我们直接把位带操作改成自己的api接口即可。

把delay的定义也换成我们自己的,由于上了操作系统,ms级别的延时直接使用osDelay即可。

至于串口通信就不赘述了,大家都有自己的库,导入+宏定义即可。

三、测试

然后,擦腚,开机,午安大电牛,测试!

喜闻乐见的收获了一个ASR_ERROR。

或许是刚上电不太稳定,我们在case error里加入一行语句,让它在进入error后,重新启动初始化流程。

喜闻乐见的收获了一群ASR_ERROR。

不慌,这种时候,我们先确认主控和ld3320有没有连接上,直接体现就是寄存器能不能正常读写。

根据官方调试文档,向这三个寄存器写数据再读取。

然后,不管写了什么,读出来的全都是0xff,这是什么原因?

直接祭出逻辑分析仪dslogic,配置协议为spi,配置好通道后解析数据。

通过逻辑分析仪的显示界面,在MISO(master in slave out)里看到了写入寄存器的信息,MOSI则一直保持高电平…

靠,原来是线接反了。

调转sdo与sdi,上电,一次成功。

四、自定义关键词

出于某些原因,我想将唤醒词设为Lucas,而ld3320仅支持标准普通话的识别,怎么办呢?

 ICRoute官方贴心地为我们提供了一本“葵花宝典”,即《语音识别芯片LD3320高阶秘籍》,里面给了我们一个解决方案。

没错,就是咱们小学背英语单词使用的伎俩,用拼音去标注英文。

将唤醒词Lucas,配置为“lu ke si”,我们就可以用英文来唤醒它啦。

五、优化

虽然成功实现了语音识别,但在使用模块的时候,还是发现了一些问题。

第一,如果将唤醒词设定为“lu ke si”,而在唤醒的时候没有把“si”这个音节明显地体现,就会导致识别不成功;又或者,将唤醒词设定为“lu ke”,而唤醒时又把“s”的尾音读得明显了一些,又会导致识别不成功。

怎么办呢?很简单,《高阶秘籍》里面为我们提供了解决方案:把每一个发音都录入即可。将几个可能的发音都对应到同一个id,只要关键词条目还够用,就可以获得更好的识别体验。

第二,这份代码仅仅是实现了识别功能,在响应速度上,还有很大的提升空间。

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值