下:树莓派人脸识别控制蜂鸣器

    科技2022-08-18  106

    树莓派python环境搭建

    a)硬件需求

    1.树莓派开发板 2.CSI接口摄像头 3.蜂鸣器 4.若干杜邦线

    b)软件搭建

    1.开启树莓派偏好设置,开启树莓派摄像头权限

    sudo raspi-config

    2.上传人脸识别SDK文件到树莓派里 3.进入SDK目录 4.安装百度ai模块

    sudo pip install baidu-aip

    5 .安装已下载的SDK

    sudo python3 setup.py install

    python控制树莓派GPIO

    1. 目前树莓派上常用的三种GPIO控制方式

    python GPIO

    【开发语言】——python 【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。 python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。 但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外, 还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

    wiringPi

    【开发语言】——C语言 【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。 wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码, 这些示例代码也包括UART设备,I2C设备和SPI设备等,毫无疑问地说wiringPi功能非常强大。

    BCM2835 C Library

    【开发语言】——C语言 【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动, 它给我的感觉更像STM32的库函数,BCM2835 C Library的驱动库包括GPIO、SPI和UART等, 可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动, 或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。

    2.GPIO的编号方式

    树莓派的软件扩展库虽然很多,但也导致了扩展库“碎片化”的问题,例如操作树莓派的GPIO端口,GPIO的编号便存在三种不同的方式。

    【1】插座编号方式 编号侧重P1插座侧,从上到下,从左到右。正如图3的Header一栏。 【2】BCM2835编号方式 编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号。正如图3 BCM GPIO一栏。 【3】wiringPi编号方式 编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。正如图3 WiringPi一栏。 【举例说明】 插座编号方式 11 = BCM2835编号方式 17 = wiringPi编号方式 GPIO0

    Python GPIO实现

    环境配置 sudo apt-get install python-dev sudo apt-get install python-rpi.gpio sudo apt-get install python-serial

    GPIO常用方法的用法

    import RPi.GPIO as GPIO #引脚编号方式设置 GPIO.setmode(GPIO.BORD)#采用树莓派插座引脚编号方式 GPIO.setmode(GPIO.BCM)#BCM编号 #设置引脚输入输出 GPIO.setup(11, GPIO.OUT) GPIO.setup(11, GPIO.IN) #引脚高低电平设置 GPIO.output(11, GPIO.LOW)或GPIO.output(11, 0)或GPIO.output(11, False) GPIO.output(11, GPIO.HIGH)或GPIO.output(11, 1)或GPIO.output(11, True) #检测输入引脚电平 GPIO.input(11)#为真或==1,表示高电平;为假或==0,表示低电平 示例代码 import RPi.GPIO as GPIO import time # BOARD编号方式,基于插座引脚编号 GPIO.setmode(GPIO.BOARD) # 输出模式 GPIO.setup(11, GPIO.OUT) while True:  GPIO.output(11, GPIO.HIGH)  ptime.sleep(1)  GPIO.output(11, GPIO.LOW)  time.sleep(1)

    树莓派控制代码

    from aip import AipFace from picamera import PiCamera import urllib.request import RPi.GPIO as GPIO import base64 import time #百度人脸识别API账号信息 APP_ID = '22784983' API_KEY = 'CAKC2lX3MeXFhgogxVwSicsz' SECRET_KEY = 'kRgBG79BDFo8YPxnl5eWDB8KkbGet0Vo' client = AipFace(APP_ID,API_KEY,SECRET_KEY)#创建一个客户端用以访问百度云 #图像编码方式 IMAGE_TYPE = 'BASE64' camera = PiCamera()#定义一个摄像头对象 #用户组 GROUP = '01' GPIO.setmode(GPIO.BCM) GPIO.setup(17,GPIO.OUT) GPIO.output(17,GPIO.HIGH) #照相函数 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 == 'liangzai': print("欢迎%s !" % name) GPIO.output(17,GPIO.LOW) time.sleep(3) GPIO.output(17,GPIO.HIGH) 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(str(result['error_code'])+' ' + str(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)

    运行:python3 xxx.py

    本文python 控制GPIO参考博主:https://blog.csdn.net/hu7850/article/details/51785594

    Processed: 0.009, SQL: 9