FlexLua单片机零基础实现LD3320A 离线语音识别

96 篇文章 0 订阅
32 篇文章 0 订阅

本教程来至 FlexLua 官网 ShineBlink 开发板教程,即使不懂单片机开发也可很容易用FlexLua零门槛开发各种 IoT 硬件。

基于 FlexLua 低代码单片机技术,脱离复杂单片机C语言开发正逐渐成为一种快速高效的 IoT 硬件开发方式。即使新手不懂单片机开发也可很快很容易用FlexLua零门槛开发各种 IoT 硬件,更多教程请参考 FlexLua 官网。

一、LD3320A语音识别模块介绍

LD3320A基于 ASR 语音识别技术,是基于关键词语列表识别的技术。只需要设定好要识别的关键词语列表,并把这些关键词语以字符的形式传送到 LD3320A 内部,就可以对用户说出的关键词语进行识别。不需要用户作任何地录音训练。

0c0e082640907ce711c3fcb15eab29a2.jpeg

1f3bea7f712db4ceee33983a1b0f43be.jpeg

二、本章节实现功能介绍

通过 LD3320 语音识别模块识别我们预定的短语。当说出“你好”时开发板上的 LED1 灯和 LED2 灯全部亮,说出“左边”时 LED1 灯亮,说出“右边”时 LED2 灯亮,说出“再见”时 LED1 灯和 LED2 灯都灭掉。

49c671b19aea10a3db80d5bfafc54d2b.jpeg

三、接线图

7ce6ddeedee01ad23f3cddebe9382a80.jpeg

四、材料清单

  • LD3320A语音识别模块

五、完整代码

Code = 0 --全局变量,识别到的短语的代号
--PhraseCode是需要识别的短语的代号,例如识别到用户说"右边"时,我们会得到短语的代号"3"
PhraseCode = {1, 2, 3, 4,} --注意: 元素个数不能超过50个!
--Phrase是需要识别的短语,每个短语的长度不能超过79个字节(包含拼音之间的空格)
Phrase = {"ni hao", "zuo bian", "you bian", "zai jian"} --注意: 短语数量不能超过50个!
--配置LD3320语音识别模块的引脚RST占用Core的D7引脚以及SPI接口,麦克风音量0x43
LIB_LD3320Config("D7",0x43,PhraseCode,Phrase)
--使能A0引脚的外部中断检测,A0引脚接语音识别模块的IRQ引脚用来接收语音识别结果通知
LIB_CompConfig("0.5Vdd", "Down")
--配置开发板上的LED1和LED2灯
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioOutputConfig("D9","STANDARD")
LIB_GpioWrite("D8",1) --LED1灭
LIB_GpioWrite("D9",1) --LED2灭
--当A0引脚的出现下降沿信号时,该函数会自动被调用
function LIB_CompCallBack()
Flag,CCC = LIB_LD3320GetResult()
if Flag == 1 then
Code = CCC
end
end
--开始大循环
while(GC(1) == true)
do
if Code > 0 then
if Code == 1 then --识别到"你好"
LIB_GpioWrite("D8",0) --LED1亮
LIB_GpioWrite("D9",0) --LED2亮
elseif Code == 2 then --识别到"左边"
LIB_GpioWrite("D8",0) --LED1亮
LIB_GpioWrite("D9",1) --LED2灭
elseif Code == 3 then --识别到"右边"
LIB_GpioWrite("D8",1) --LED1灭
LIB_GpioWrite("D9",0) --LED2亮
elseif Code == 4 then --识别到"再见"
LIB_GpioWrite("D8",1) --LED1灭
LIB_GpioWrite("D9",1) --LED2灭
else
print("Unknow state")
end
Code = 0 --清掉刚刚识别到的短语代号
end
end


如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

六、代码运行结果

(1)当说出“你好”时,绿色LED1和绿色LED2同时亮

805bb87bf0b1f6bc66a5d11aa06f4dc0.jpeg

(2)当说出“左边”时,LED1亮

25668e88622a03023878ce77a9f5a638.jpeg

(3)当说出“右边”时,LED2亮

0352c0821efcf821ff02e239ef51d969.jpeg

(4)当说出“再见”时,LED1和LED2都灭

27a4d27fa9d28d59dbed2b69b44fd5f5.jpeg

七、一些优化语音识别效果的建议

(1)调节麦克风音量

在上面的代码中调用 LIB_LD3320Config 函数初始化时,P2参数(麦克风音量)我们给的是0x43,这个值相对来说比较通用。不过用户可以结合自己的使用场景,根据下面这些原则来调整这个值,以达到最好的识别效果:

  • 值越大代表MIC音量越大,识别启动越敏感,但可能带来更多误识别。
  • 值越小代表MIC音量越小,需要近距离说话才能启动识别功能,好处是对远处的干扰语音没有反应
  • 在正常生活条件下的室内环境和比较安静的室外环境,建议设置值为 40H-55H;使用距离在 0.5 米以上为好,避免声音录入产生过激。
  • 在十分嘈杂的环境中,比如展览会现场,建议设置值为10H-2FH;此时需要使用者嘴巴距离MIC距离为 0~50 厘米以内。

--配置麦克风音量0x43
LIB_LD3320Config("D7",0x43,PhraseCode,Phrase)


(2) 在识别精度要求高的场景中,使用“触发识别”模式

这种方式目前市面上很多智能音箱都这么做,例如苹果手机的“Hey,Siri”,某某音箱的“小Du,小Du”等,需要人为的提供一个开始的信号,这些接下来这段时间(比如10秒内)识别到的后续的语音指令才算数,这种方式可以防止语音识别模块在平时误识别进而导致设备误动作的发生。

(3) 增添“垃圾关键词语” ——吸收错误识别

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

比如,某个应用场景中,需要识别的关键词语是 4 条,“前进”,“后退”,“开门”,“关门”。在把这 4 个关键词语设置进 LD3320 后,可以再另外设置 10~30 个词语进 LD3320,比如“前门”,“后门”,“阿阿阿”,“呜呜”等等。只有识别结果是 4 个关键词语之内的,才认为识别有效。如果识别结果是“垃圾关键词语”,则说明是其他的声音导致的误识别,这样就可以非常非常有效地降低误识别率。极大地提高终端用户的主观使用体验。“垃圾关键词语”的选取,最好可以选择一些字数和关键词语一样的词语,用来吸收可能发生的错误识别。

(4)更多

更多的语音识别优化技巧请参考上面提供的下载资料中的《语音识别芯片LD3320高阶秘籍》。

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值