语音唤醒功能篇

语音唤醒功能

语音唤醒使得系统中的各个功能模块能够很好的分隔开来。用户通过唤醒词“依米”唤醒系统,发送语音指令,系统检测到语音指令中的关键词,然后去执行相对应的功能。当系统执行完成后,便进入等待下一次被唤醒状态,即等待信号状态。简而言之,用户需要使用某种功能的时候只需唤醒系统后发送语音指令即可。

语音唤醒这一功能不仅大大提升了智能家居人机交互的效率,用户还可以通过制定特定的唤醒词,让智能家居更加个性化。具体实现流程如下图所示。

在这里插入图片描述
首先需要在snowboy官网注册账号,录音并训练自己的模型,然后下载下来。这里提到一点,snowboy是开源的,可以从GitHub下载文件,文件夹目录结构如图所示:
在这里插入图片描述
图中的snowboy.umdl是官方的唤醒词文件,我们只需要把它换成自己训练好后的唤醒词文件,然后在程序中调用即可实现特定唤醒词唤醒功能。
值得注意的一点是:由于我的树莓派是3B型号的——没有声音输入模块,因此,我的树莓派还需要接入声卡和麦克风,后期的语音输入都是通过麦克风进行采集,所以当我们训练自己的唤醒词文件的时候注意把麦克风接入电脑,通过麦克风输入对唤醒词进行训练,以提高树莓派系统唤醒的精准度。

关键代码如下:

1.	global interrupted  
2.	model = '/home/pi/sheji/robot/resources/yimi.pmdl'  
3.	signal.signal(signal.SIGINT, signal_handler)  
4.	detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)  
5.	print('说出"依米"即可唤醒')      
6.	detector.start(detected_callback=callbacks,interrupt_check=interrupt_callback,sleep_time=0.03)  
7.	detector.terminate()  

其中detector.start(detected_callback=callbacks,interrupt_check=interrupt_callback,sleep_time=0.03)是开启snowboy功能,如果检测到唤醒词则执行callbacks函数,如果检测到中断则执行interrupt_callback函数,反之,则处于等待信号状态。

callbacks()函数的代码:

def callbacks():
    global detector  
    # 语音唤醒后,提示ding
    snowboydecoder.play_audio_file()
    #  关闭snowboy功能
    detector.terminate()
    #  开启语音识别
    main()
    # 打开snowboy功能
    wake_up()    # wake_up —> main —> wake_up

我们会发现callbacks()函数里边还包含了main()函数,记住这个重要的函数,本系统很多功能都封装在了main()函数里边。

由于本系统的语音唤醒功能和访客功能是两个不同的检测信号,因此,需要对以上代码进行改进:

1.	global interrupted  
2.	    while True:          
3.	        detector.start(detected_callback=callbacks,interrupt_check=interrupt_callback,sleep_time=0.03)  
4.	        interrupted=False  
5.	detector.terminate()  

本系统把访客功能写入中断函数,系统通过检测不同的外部信号来决定所执行的功能,并在执行完后继续等待信号。
通过中断函数我们可以让系统同时检测两个不同的外部信号,并及时对检测到的外部信号做出相应的反映。
从某种意义上来说,这种改进使得snowboy可以同时检测多种信号,而不仅限于语音信号,可以是硬件的状态等。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值