时光如白驹过隙,转眼间拿到米尔MYC-C8MMX物联网开发板已经1月有余,目前,渐渐地对此开发板有了更加深入的了解!接下来分享一下我的测评案例【智能语音控制LED灯】。
首先,上个【智能语音控制LED灯】应用的图片先:
应用图.jpg
看到此图伙伴耳边是不是响起熟悉的客服声音:
“喂!先生,有什么需要帮助您的!”o(* ̄︶ ̄*)o!
当然,这里的耳机并未使用,而仅用到了其中的话筒,作为语音控制的输入端。
说起笔者为啥要在此米尔MYC-C8MMX物联网开发板上开发此应用,原因有三:
首先,笔者手头的LCD液晶显示屏无法与此开发板兼容,因此,就无法开发窗口应用程序,只能通过QT的控制台应用程序来开发应用;
其次,注意到此米尔MYC-C8MMX物联网开发板上具有录音功能,且支持全面的Linux 音频架构ALSA,因此,萌生了做一款语音识别的应用;
第三,语音识别后如何体现其功能,由于时间有限,因此,想到用识别后的语音命令去控制板载的两个LED灯的亮灭,于是乎就有了笔者现在的【智能语音控制LED灯】应用o(* ̄︶ ̄*)o。
说到这,伙伴们可能好奇到底是个什么应用,这里笔者就不卖关子了,直接上个笔者体验此应用的视频,让伙伴们一睹为快o(* ̄︶ ̄*)o!
好了,接下来剖析一下此应用的结构,上个结构图先:
应用结构.png
为了更加快速地开发【语音智能控制LED灯】应用,笔者在此QT应用中采用大量调用【system()】函数,通过system函数来直接执行Linux命令行指令,如此可以大大降低硬件驱动的开发,可以直接利用板载嵌入式Linux自带的命令行来完成一个完整应用的开发,当然,如此方法势必会带来性能上的降低,但对于我这个嵌入式Linux小白来说已经很不容易了,伙伴们凑合看吧o(* ̄︶ ̄*)o,不喜勿喷,如果大佬们有更加高效的方法,欢迎评论留言,先谢过了!
伙伴们肯定会问了,system函数调用后返回的结果那可是直接显示在控制台里的,QT控制台应用程序如何获取这些返回值呢?
笔者尝试了两种方法:
第一种:采用popen的方式,其可以非常简单地处理调用shell,而shell的输出可以采用读取文件的方式获得,但经过测试,发现该方法处理延时太长,极大地降低了语音识别返回值的处理速度,同时用户体验度也差,所以笔者果断放弃此方法o(* ̄︶ ̄*)o!
第二种:采用shell输出重定向的方式,采用pipe建立一个匿名管道,在system命令执行前先通过dup保护现场,然后通过dup2将shell输出重定向到一个文件中,待system命令执行完毕后,再通过dup2恢复现场,经测试该方法获取shell返回值速度快,用户几乎觉察不到处理延时,噢啦!
好了,说到这,笔者就不卖关子了,给伙伴们分享一下代码吧!
1.png
2.png
3.png
各位大佬,目前上述程序我仅实现了按下按键然后触发约5s的录音,如何能实现按下按钮录音,松开按钮即开始语音识别,还请有知道的伙伴们指点,在此谢过了!o(* ̄︶ ̄*)o!
--------------------------------------------