不好吃但很好玩的树莓派
这个作业属于哪个课程 | 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模块 接下来安装我们下载好的SDK
sudo Python3 setup.py install
以上就把树莓派环境安装完成
接下来 来到了测试环节
把test.py文件保存在树莓派中
出现如下结果证明测试成功
arduino控制部分
硬件准备 树莓派 Arduino 蓝牙模块(Hc-05) 舵机(SG90) 杜邦线
安装蓝牙模块
sudo apt-get install libbluetooth-dev
接下来pip pybluez
pip install pybluez
第二步 将树莓派手动连接至HC-05
进入树莓派桌面 找到蓝牙add new device 记住HC-05的地址
点击配对 HC-05默认密码12345
打开test.2脚本测试蓝牙
第三步arduino控制部分
我们创建arduino程序测试
第四步导入蓝牙创建指令
项目主要源码
from aip import AipFace
from picamera import PiCamera
import urllib.request
import RPi.GPIO as GPIO
import base64
import 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*768
camera.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:#如果相似度大于80
if 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 0
curren_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 1
if result['error_msg'] == 'pic not has face':
print('检测不到人脸')
time.sleep(2)
return 0
else:
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格式了