基于树莓派的智能镜

本文将详细介绍智能镜的设计过程,包括软件的编写、硬件的购买和设计。

镜面显示部分

镜面材料及显示效果

欲完成即能照镜又能显示图片文字的效果,需要用到的材料有:LCD屏幕、原子镜、数据线、充电头、HDMI线。本设计中用到的是7寸的LCD屏幕和10寸的原子镜、13cm18cm的原子镜。根据最后的呈现效果,选用了10寸的原子镜。LCD屏幕使用HDMI线与树莓派连接,同时需要数据线和充电头进行供电。必须直接接电源,而不是用电脑等其他设备供电,否则有可能会导致供电不足,LCD不能正常显示。
所用的材料如下图所示:
原子镜
LCD屏幕
13cm
18cm原子镜+7寸LCD屏幕显示效果如下图:
13cm*18cm原子镜+7寸LCD
10寸原子镜+7寸LCD屏幕显示效果如下图:
10寸原子镜+7寸LCD
显然,10+7的呈现效果更佳,人像照得更为清晰。由于LCD屏幕的亮度较低,且原子镜的折射率也不是非常好,导致在白天很难看清屏幕上的字和图片;本设计在夜晚使用效果较好。

网页部分

页面样式

镜面上呈现的文字、图片信息是使用了网页技术。网页的样式如下图所示:
页面样式
基本都是常规的CSS设置。在CSS的设计中,为了实现自适应屏幕的尺寸,对元素块的设置均使用了百分比的形式。

内容填充

页面呈现的内容包括:天气预报、新闻热搜、每日一句、日期、时间、城市。其中,日期和时间使用jquery自带的函数即可获取当前时刻的信息,这部分的内容封装在main.js的gettoday()和gettime()函数中。而其余的信息需要通过接口获取。本设计选用的接口是https://www.tianapi.com/中的https://www.tianapi.com/apiview/72https://www.tianapi.com/apiview/100https://www.tianapi.com/apiview/129https://www.tianapi.com/apiview/43
这些接口的调用本设计是使用jquery的get方法,获取接口信息,进而进行内容的填充。
注意:使用本设计的代码时,需要将项目中的magicmirror2/js/main.js中天行数据的密钥改成自己的密钥。
密钥修改

语音识别及硬件控制

这部分实现用户语音输入指令控制室内设备的状态。包括录制音频、上传音频、语音识别、调用子函数。由于树莓派没有音频输入只有音频输出,因此需要外接声卡和麦克风。在淘宝上买一个USB接口的声卡和麦克风即可。

音频录入

在主程序中使用while循环,实时检测环境的音量大小。其原理是不断地录制一小段音频判断该音频的音量大小,当超过阈值时,则认为有用户进行语音输入。for循环的次数(与用于检测的音频大小有关)以及阈值(此处为5000)的大小影响程序判断的正确度。如果录制的音频太小,则由于噪声的存在,系统会频繁的进行语音识别操作。如果阈值过大,则用户距离较远时,无法成功进行音频的录入。

1
2
3
4
5
6
7
8
9
10
for i in range(0, 20):
data = stream.read(CHUNK)
frames.append(data)
audio_data = np.fromstring(data, dtype=np.short)
large_sample_count = np.sum( audio_data > 800 )
temp = np.max(audio_data)
#设置阈值为5000,如果阈值超过5000,则表明检测到声音
if temp > 5000 :
print("检测到信号")
print('当前阈值:',temp)

语音识别接口

本设计使用的是https://cloud.baidu.com/product/speech。该接口只提供了API的形式,并提供了示例代码,只需要将代码中的API_KEY和SECRET_KEY改成自己的密钥即可。

1
2
API_KEY = '5zxxxxxxxx'
SECRET_KEY = 'LsWxxxxxx'

事实上前期在选接口的时候,我分别测试了百度、腾讯以及阿里的语音识别接口,其中识别准确度最高的是腾讯的,准确度最低的是阿里的。一开始我尝试使用腾讯的接口,但是腾讯的接口文档实在是写得……github上的示例代码也不能用,会报错。花了两三个星期对这个报错进行解决无果之后,我尝试使用百度的接口。不得不说百度的接口文档写得实在是详细,甚至提供了符合格式的录音文件!
由于进行音频检测时,我截取了一小段音频,会造成音频信息的缺失,因此设定的控制指令为“小镜xx”,而实际判断用户是否有进行音频录入时,则只对后面的有效指令进行判断。例如,用户输入“小镜开门”,只搜索文字中是否含有“开门”这个关键词。

硬件控制部分

使用两个LED灯模拟照明设备和住宅大门,烟雾传感器模块和蜂鸣器模块模拟警报系统。购买清单如下图所示:
硬件清单
硬件接线图如下图所示
电路图
实物接线图
实物接线图
对LED灯的控制程序在led.py文件中。对蜂鸣器的控制程序是bee.py文件。

封装

购买雪糕棒、酒精胶等手工制作一个镜框。购买清单如下:
制作清单

如果任何问题欢迎交流!
QQ:497014168

您的支持将鼓励我继续创作!