shineblink LD3320A语音识别

LD3320A语音识别

    • 一、LD3320A语音识别模块介绍
    • 二、本章节实现功能介绍
    • 三、接线图
    • 四、完整代码
    • 五、代码运行结果
    • 六、一些优化语音识别效果的建议

一、LD3320A语音识别模块介绍

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

二、本章节实现功能介绍

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

三、接线图

shineblink LD3320A语音识别_第2张图片

四、完整代码

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

五、代码运行结果

(1)当说出“你好”时,绿色LED1和绿色LED2同时亮
shineblink LD3320A语音识别_第3张图片
(2)当说出“左边”时,LED1亮
shineblink LD3320A语音识别_第4张图片
(3)当说出“右边”时,LED2亮
shineblink LD3320A语音识别_第5张图片
(4)当说出“再见”时,LED1和LED2都灭
shineblink LD3320A语音识别_第6张图片

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

(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 个关键词语之内的,才认为识别有效。如果识别结果是“垃圾关键词语”,则说明是其他的声音导致的误识别,这样就可以非常非常有效地降低误识别率。极大地提高终端用户的主观使用体验。“垃圾关键词语”的选取,最好可以选择一些字数和关键词语一样的词语,用来吸收可能发生的错误识别。
更多详情请参看 shineblink.com官网链接

你可能感兴趣的:(物联网,单片机)