人脸识别宿舍门禁

第一步(准备材料)
树莓派3b+,摄像头,减速电机,电机驱动模块,拖把棍、杜邦线若干

树莓派3b+闲鱼上淘的200多块
摄像头淘宝买的亚博智能的88块红外的晚上也可以识别在这里插入图片描述
减速电机和电机驱动模块也是淘宝买的
在这里插入图片描述
在这里插入图片描述

第二步(百度智能云注册)
注册百度智能云api
在这里插入图片描述
找到人脸识别打开并创建应用
在这里插入图片描述
在这里插入图片描述
创建完下载SDK文档,下载python HTTP SDK
在这里插入图片描述
查看应用详情,记录下AppID、API Key和Secret Key,在后面的代码中会用到。

点击可视化人脸库
点击所创建的库进去
创建用户组
在这里插入图片描述
然后就可以上传照片创建用户了
在这里插入图片描述

第三步(连接电机和摄像头)

连接树莓派和摄像头网上教程很多这里就不展示了

连接减速电机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接好后 就能用树莓派控制电机了

第五步(树莓派配置)
硬件层面已经连接完了 下面进行树莓派上的配置

打开摄像头(此操作只进行一次)并测试摄像头是否正常
在这里插入图片描述

sudo raspi-config
在这里插入图片描述
选择interface options
在这里插入图片描述
选择 camera
在这里插入图片描述
选是
然后完成就行了
sudo reboot 重启
在这里插入图片描述
测试摄像头是否能运行
在这里插入图片描述
这里有个1.jpg看来能拍摄照片 摄像头运行正常

一切正常的话就可以运行代码了

# -*- 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

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值