| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzzcxy/Freshman |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/Freshman/homework/11202 |
| 这个作业的目标 | <通过树莓派和python实现人机交互 实现学习代码的应用增添学习乐趣> |
今天要做的是一个树莓派的小案例(树莓派人脸识别门禁系统)
每次都有忘记带钥匙的尴尬,被锁在门外面,腰腿酸痛,精神不振,室友怎么还没有回来,累了一天感觉身体被掏空
别怕 高清人脸识别智能门 防火防盗防丢钥匙(妈妈再也不担心我没带钥匙了) 人脸一键解锁 开启品质生活
技术参考https://www.bilibili.com/video/BV1U741127yV?from=search&seid=12456660027579863219
这次本项目由两个部分构成
- 1.树莓派人脸识别
- 2.arduino舵机开门
这两个部分之间的通讯使用树莓派自带的蓝牙,arduino加上hc06蓝牙模块。设备外壳使用3D打印构造
树莓派人脸识别部分
- 1.首先我们先要打开百度智能云(创建一个人脸识别门禁的应用!)
下载python的SDK
点击人脸库的管理 新建用户组
记录下Appid API key secret key
(这时候我们的第一步就完成了,是不是如此简单) - 2.树莓派本地环境的搭建
材料准备 树莓派一个 csi接口摄像头一个
我们需要用到ssh连接到树莓派进行相关设置
Windows用户使用xshell mac直接使用terminal
连接上树莓派后 输入以下命令sudo raspi-config
开启树莓派的摄像头权限 开启VNC(树莓派没有接显示器的情况下也能通过电脑显示树莓派桌面)
我们需要将刚刚下载的sdk上传至树莓派
进入树莓派sdk目录
开始使用命令安装百度AI模块sudo pip install baidu-aip
安装好AI模块 接下来安装我们下载好的SDKsudo Python3 setup.py install
以上就把树莓派环境安装完成
接下来 来到了测试环节
把test.py文件保存在树莓派中
出现如下结果证明测试成功
arduino控制部分
硬件准备 树莓派 Arduino 蓝牙模块(Hc-05) 舵机(SG90) 杜邦线
安装蓝牙模块sudo apt-get install libbluetooth-dev
接下来pip pybluezpip install pybluez
第二步 将树莓派手动连接至HC-05
进入树莓派桌面 找到蓝牙add new device 记住HC-05的地址
点击配对 HC-05默认密码12345
打开test.2脚本测试蓝牙
第三步arduino控制部分
我们创建arduino程序测试
第四步导入蓝牙创建指令
项目主要源码
from aip import AipFacefrom picamera import PiCameraimport urllib.requestimport RPi.GPIO as GPIOimport base64import time#百度人脸识别API账号信息APP_ID = \'18333248\'API_KEY = \'HrfpWmTASGVQTGQ2UQO29IGY\'SECRET_KEY =\'7x8m9vuKWH5XeVV8GeLkly8OkqUpzfPz\'client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云#图像编码方式IMAGE_TYPE=\'BASE64\'camera = PiCamera()#定义一个摄像头对象#用户组GROUP = \'yusheng01\'#照相函数def getimage():camera.resolution = (1024,768)#摄像界面为1024*768camera.start_preview()#开始摄像time.sleep(2)camera.capture(\'faceimage.jpg\')#拍照并保存time.sleep(2)#对图片的格式进行转换def transimage():f = open(\'faceimage.jpg\',\'rb\')img = base64.b64encode(f.read())return img#上传到百度api进行人脸检测def go_api(image):result = client.search(str(image, \'utf-8\'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸if result[\'error_msg\'] == \'SUCCESS\':#如果成功了name = result[\'result\'][\'user_list\'][0][\'user_id\']#获取名字score = result[\'result\'][\'user_list\'][0][\'score\']#获取相似度if score > 80:#如果相似度大于80if name == \'yusheng_02\':print("欢迎%s !" % name)time.sleep(3)if name == \'xiaoming\':print("欢迎%s !" % name)time.sleep(3)if name == "xiaoyu":print("欢迎%s !" % name)else:print("对不起,我不认识你!")name = \'Unknow\'return 0curren_time = time.asctime(time.localtime(time.time()))#获取当前时间#将人员出入的记录保存到Log.txt中f = open(\'Log.txt\',\'a\')f.write("Person: " + name + " " + "Time:" + str(curren_time)+\'\n\')f.close()return 1if result[\'error_msg\'] == \'pic not has face\':print(\'检测不到人脸\')time.sleep(2)return 0else:print(result[\'error_code\']+\' \' + result[\'error_code\'])return 0#主函数if __name__ == \'__main__\':while True:print(\'准备\')if True:getimage()#拍照img = transimage()#转换照片格式res = go_api(img)#将转换了格式的图片上传到百度云if(res == 1):#是人脸库中的人print("开门")else:print("关门")print(\'稍等三秒进入下一个\')time.sleep(3)
总结
学习感想
1.了解了思路后对树莓派有了更多了解 发现树莓派可以做很多东西 重要的是它可以把自己学习的知识走向实践 真正的让代码实现起来 运行起来 我觉得这样才是有意思的学习体验
2.发现了很多很多大佬 在博客园中也找到了一些福大的学生 看了看他们做的项目 感觉自己差距十分大 因加油努力
3.习惯使用markdown格式了