不好吃但很好玩的树莓派

这个作业属于哪个课程 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程序测试
第四步导入蓝牙创建指令
项目主要源码

  1. from aip import AipFace
  2. from picamera import PiCamera
  3. import urllib.request
  4. import RPi.GPIO as GPIO
  5. import base64
  6. import time
  7. #百度人脸识别API账号信息
  8. APP_ID = '18333248'
  9. API_KEY = 'HrfpWmTASGVQTGQ2UQO29IGY'
  10. SECRET_KEY ='7x8m9vuKWH5XeVV8GeLkly8OkqUpzfPz'
  11. client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云
  12. #图像编码方式
  13. IMAGE_TYPE='BASE64'
  14. camera = PiCamera()#定义一个摄像头对象
  15. #用户组
  16. GROUP = 'yusheng01'
  17. #照相函数
  18. def getimage():
  19. camera.resolution = (1024,768)#摄像界面为1024*768
  20. camera.start_preview()#开始摄像
  21. time.sleep(2)
  22. camera.capture('faceimage.jpg')#拍照并保存
  23. time.sleep(2)
  24. #对图片的格式进行转换
  25. def transimage():
  26. f = open('faceimage.jpg','rb')
  27. img = base64.b64encode(f.read())
  28. return img
  29. #上传到百度api进行人脸检测
  30. def go_api(image):
  31. result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸
  32. if result['error_msg'] == 'SUCCESS':#如果成功了
  33. name = result['result']['user_list'][0]['user_id']#获取名字
  34. score = result['result']['user_list'][0]['score']#获取相似度
  35. if score > 80:#如果相似度大于80
  36. if name == 'yusheng_02':
  37. print("欢迎%s !" % name)
  38. time.sleep(3)
  39. if name == 'xiaoming':
  40. print("欢迎%s !" % name)
  41. time.sleep(3)
  42. if name == "xiaoyu":
  43. print("欢迎%s !" % name)
  44. else:
  45. print("对不起,我不认识你!")
  46. name = 'Unknow'
  47. return 0
  48. curren_time = time.asctime(time.localtime(time.time()))#获取当前时间
  49. #将人员出入的记录保存到Log.txt中
  50. f = open('Log.txt','a')
  51. f.write("Person: " + name + " " + "Time:" + str(curren_time)+'\n')
  52. f.close()
  53. return 1
  54. if result['error_msg'] == 'pic not has face':
  55. print('检测不到人脸')
  56. time.sleep(2)
  57. return 0
  58. else:
  59. print(result['error_code']+' ' + result['error_code'])
  60. return 0
  61. #主函数
  62. if __name__ == '__main__':
  63. while True:
  64. print('准备')
  65. if True:
  66. getimage()#拍照
  67. img = transimage()#转换照片格式
  68. res = go_api(img)#将转换了格式的图片上传到百度云
  69. if(res == 1):#是人脸库中的人
  70. print("开门")
  71. else:
  72. print("关门")
  73. print('稍等三秒进入下一个')
  74. time.sleep(3)

总结

学习感想
1.了解了思路后对树莓派有了更多了解 发现树莓派可以做很多东西 重要的是它可以把自己学习的知识走向实践 真正的让代码实现起来 运行起来 我觉得这样才是有意思的学习体验
2.发现了很多很多大佬 在博客园中也找到了一些福大的学生 看了看他们做的项目 感觉自己差距十分大 因加油努力
3.习惯使用markdown格式了

posted @ 2020-09-23 00:59  xiaomingTX_China  阅读(64)  评论(2编辑  收藏