1、申 请 I D:tmxu
2、个人邮箱:3105674895@qq.com
3、原创技术文章:第一步(准备材料)
树莓派3b+,摄像头,减速电机,电机驱动模块,拖把棍、杜邦线若干
树莓派3b+闲鱼上淘的200多块
摄像头淘宝买的亚博智能的88块红外的晚上也可以识别
减速电机和电机驱动模块也是淘宝买的
第二步(百度智能云注册)
注册百度智能云api
找到人脸识别打开并创建应用
创建完下载SDK文档,下载python HTTP SDK
查看应用详情,记录下AppID、API Key和Secret Key,在后面的代码中会用到。
点击可视化人脸库
点击所创建的库进去
创建用户组
然后就可以上传照片创建用户了
第三步(连接电机和摄像头)
连接树莓派和摄像头网上教程很多这里就不展示了
连接减速电机
连接好后 就能用树莓派控制电机了
第五步(树莓派配置)
硬件层面已经连接完了 下面进行树莓派上的配置
打开摄像头(此操作只进行一次)并测试摄像头是否正常
sudo raspi-config
选择interface options
选择 camera
选是
然后完成就行了
sudo reboot 重启
测试摄像头是否能运行
这里有个1.jpg看来能拍摄照片 摄像头运行正常
一切正常的话就可以运行python代码了
[Python] 纯文本查看 复制代码 # -*- codeing=utf-8 -*-
# @Time: 2021/1/29 20:40
# @Author:xu
# @File:main.py
# @Software: PyCharm
# @人生苦短,我用Python
# !/usr/bin/env python3
from aip import AipFace
from picamera import PiCamera
import urllib.request
import RPi.GPIO as gpio
import base64
import time
# 百度人脸识别API账号信息
APP_ID = '填入之前保存的ID(下面两个同理)'
API_KEY = ''
SECRET_KEY = ''
client = AipFace(APP_ID, API_KEY, SECRET_KEY) # 创建一个客户端用以访问百度云
# 图像编码方式
IMAGE_TYPE = 'BASE64'
camera = PiCamera() # 定义一个摄像头对象
# 用户组
GROUP = 's_01'
# 控制电机
def dianji():
# 定义输出引脚
IN1 = 37
IN2 = 38
# 定义使能引脚
ENA = 31
# 设置编码规范
gpio.setmode(gpio.BOARD)
# 无视警告,开启引脚
gpio.setwarnings(False)
# 设置引脚为输出
gpio.setup([IN1, IN2, ENA], gpio.OUT)
# 对使能引脚开启pwm控制
pwm1 = gpio.PWM(ENA, 100)
# 启动pwm
pwm1.start(0)
# 开门
gpio.output([IN1], gpio.LOW)
gpio.output([IN2], gpio.HIGH)
print("开门!")
pwm1.ChangeDutyCycle(100)
time.sleep(5)
gpio.output([IN1, IN2], gpio.LOW)
time.sleep(5)
# 关门
gpio.output([IN1], gpio.HIGH)
gpio.output([IN2], gpio.LOW)
print("关门!")
pwm1.ChangeDutyCycle(100)
time.sleep(5)
print("完毕")
gpio.output([IN1, IN2], gpio.LOW)
# 释放资源
gpio.cleanup()
pwm1.stop()
# 照相函数
def getimage():
camera.resolution = (1024, 768) # 摄像界面为1024*768
camera.start_preview() # 开始摄像
camera.capture('faceimage.jpg') # 拍照并保存
# 对图片的格式进行转换
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
dianji()#调用电机函数开门
if name == '001_pengyuyan':#
print("欢迎 彭于晏!")
# 获取当前时间
# 将人员出入的记录保存到Log.txt中
curren_time = time.asctime(time.localtime(time.time()))
f = open('Log.txt', 'a+')
f.write("Person: " + name + " " + "Time:" + str(curren_time) + '\n')
f.close()
return 1
else:
print("对不起,我不认识你!")
name = 'Unknow'
return 0
if result['error_msg'] == 'pic not has face':
print('检测不到人脸')
time.sleep(0.1)
return 0
# 主函数
if __name__ == '__main__':
while True:
try:
print('准备')
if True:
getimage() # 拍照
img = transimage() # 转换照片格式
res = go_api(img)
print('进入下一个')
except:
pass
展示视频 :https://www.bilibili.com/video/BV1vK4y1P7hv?t=3 |