3842| 6
|
[教程] 语音自助打印出入证 |
本案例采用的是树莓派、古德微平台、全向麦、热敏打印机、小音箱。实现的功能是语音唤醒、语音识别,自助拍照,生成打印出入证。 先上两张热敏打印机的小图: 设备完整连接图: 一、主程序: 首先开启语音提示,开启takePhoto拍照子线程,开启printPass打印子线程,最后开启语音唤醒Wakeup函数。 程序开始后,三个线程都在等待中。takePhoto和printPass两个线程因为不满足开关变量的要求,一直在等待。Wakeup函数则在等待语音信号输入。 我们的程序设计思想是,先通过阻塞式的wakeup运行,满足语音条件,改变photo变量的值来启动takePhoto子线程。拍照结束后,再改变print变量来启动printPass子线程,最终实现自助打印出入证的效果。 二、语音唤醒:Wakeup函数 通过全向麦开始:“小度、小度”的语音唤醒。唤醒成功后,通过音箱播放清脆的提示音“叮”,进行拍照准备,完成后下达命令“请拍照”,程序开启麦克风录音,将录取的3秒音频文件转换为文字,从文字字符串中查找字符“拍”的位置。如果查找结果不等于0,说明查找成功,赋开关变量photo为1。这时takePhoto子线程的条件满足了,子线程开始运行。如果查找结果等于0,说明是查找失败,赋值开关变量photo为0,不进行拍照程序。 三、takePhoto:拍照子线程 拍照子线程是在接收到拍照开关变量photo的值后,拍一张照片,然后关闭摄像头。然后把照片保存到文件中,输出相应的语音提示。最后把photo变量设为0,防止重复拍照。同时把print变量设为1,准备开启打印子线程。 四、printPass:打印子线程 printPass子线程用是来控制热敏打印机打印出入证的。其中print是一个开关变量,控制子线程是否工作。当print值为1的时候,开启子线程,程序运行完成后,print开关变量重新赋值为0,防止重复打印。 程序中设计了一些空行,主要实现文字内容的排版空间的调整。有的是大空行,有的是小空行。最行为了方便撕票,打印了两个空行。 程序中的照片,是上一个子线程takePhoto中采集的照片。 至此,我们的语音自助打印出入证的功能全部实现。 由于拍照的主人是一只小熊,所以最终我们获取的是一张小熊的出入证。 视频地址: |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed