首页 » Web前端 » 引入aipfacephp技巧_树莓派人脸识别实际应用人脸识别门禁

引入aipfacephp技巧_树莓派人脸识别实际应用人脸识别门禁

duote123 2024-12-19 0

扫一扫用手机浏览

文章目录 [+]

在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的根本环境配置,人脸识别功能也测试成功了,现在我们做一个小小的案例来实际运用一下,我们想树莓派人脸识别成功后,发送蓝牙串口数据给Arduino的HC-05模块,让Arduino掌握舵机开门。

准备设备材料树莓派3bArduino UNO R3HC-05舵机SG90(或者MG995)杜邦线多少连接图

引入aipfacephp技巧_树莓派人脸识别实际应用人脸识别门禁

一、树莓派端配置

树莓派自带蓝牙功能,我们可以调用系统指令发送蓝牙旗子暗记,

引入aipfacephp技巧_树莓派人脸识别实际应用人脸识别门禁
(图片来自网络侵删)
1.1安装树莓派蓝牙模块pybluez

安装完成后再连续下一步操作; 若想让树莓派利用bluetooth,必须给树莓派安装pybluez模块

sudo apt-get install libbluetooth-dev //安装蓝牙开拓库python3 -m pip install pybluez //安装pybluez1.2 将树莓派手动连接至HC-05

打开树莓派桌面端,点击蓝牙图标后点击add device

选择HC-05模块,配对密码是1234;

配对成功后,后面程序就可以直接运行了

1.3 定义树莓派蓝牙掌握功能

创建一个bluetooth_test.py文件,分别定义初始化指令、开门指令、关门指令,分别发送字符串’1‘,’2’,‘3’;

import bluetooth def servo_init():#初始化指令bd_addr = "20:16:08:08:39:75" #arduino连接的蓝牙模块的地址port = 1 sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )sock.connect((bd_addr, port)) #创建连接 sock.send("1") #发送数据sock.close() #关闭连接def bt_open():#开门指令bd_addr = "20:16:08:08:39:75" port = 1 sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )sock.connect((bd_addr, port)) sock.send("2") sock.close() def bt_close():#关门指令bd_addr = "20:16:08:08:39:75" port = 1 sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )sock.connect((bd_addr, port)) sock.send("3") sock.close()

二、Arduino连接办法2.1 Arduino与HC-05蓝牙模块的连接

由于我们用的是Arduino UNO R3没有蓝牙模块,要吸收蓝牙数据,可以通过外接HC-05蓝牙模块办理。

HC-05===Arduino

RXD<==>TX TXD<==>RX VCC<==>5v GND<==>GND

把稳:HC-05的vcc一定要接5v,如果接3.3v,虽然可以亮灯事情,但是吸收一次数据后会自动断开连接,刚开始我找半天没找到缘故原由,原来是电压给低了,这是一个小细节要把稳一下。

2.2 Arduino与舵机模块的连接

SG90 舵机导线三种颜色,含义分别是: 棕色:GND 赤色:VCC

黄色:DATA

舵机SG90===Arduino

DATA<==>D9VCC<==>5vGND<==>GND三、Arduino掌握代码

创建工程烧录到Arduino开拓板中即可

#include <Servo.h>Servo myservo; void setup() { mySerial.begin(9600); //监听软串口 myservo.attach(9); //舵机掌握 myservo.write(0);// delay(10000); }void loop() { while(Serial.available()) { char c; c = Serial.read(); //读取串口数据 Serial.println(c); switch(c) { case '1':servo_init(); break; case '2':open_the_door(); break; case '3':close_the_door(); } }}void open_the_door() //舵机开门{ myservo.write(170);}void close_the_door() //舵机关门{ myservo.write(0);}void servo_init() //舵机初始化{ myservo.write(10);}

四、树莓派掌握代码

按照上一篇文章,我们的树莓派已经准备妥当了,在test.py的根本上,我们再修正一下:

# 2020-3-16改动版本from aip import AipFacefrom picamera import PiCameraimport urllib.requestimport RPi.GPIO as GPIOimport base64import timeimport bluetoothfrom bluetooth_test import bt_open,servo_init,bt_close#百度人脸识别API账号信息APP_ID = '18332624'API_KEY = '2QoqxCzAsZGT9k5CMeaIlPBs'SECRET_KEY ='9wOlqd4sPvLc7ZKtLxMlBVkcikXHZ4rz'client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云#图像编码办法IMAGE_TYPE='BASE64'camera = PiCamera()#定义一个摄像头工具#用户组GROUP = 'yusheng01' #摄影函数def getimage(): camera.resolution = (1024,768)#摄像界面为1024768 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 == 'yin_danli': print("欢迎%s !" % name) time.sleep(1) if name == 'danli': print("欢迎%s !" % name) time.sleep(3) if name == "yusheng_02": print("欢迎%s !" % name) time.sleep(3) 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(3) return -1 else: print(result['error_code']+' ' + result['error_code']) return 0#主函数if __name__ == '__main__': servo_init() #舵机复位,初始化一次就够了 while True: print('准备开始,请面向摄像头 ^_^') if True: getimage()#拍照 img = transimage() #转换照片格式 res = go_api(img) #将转换了格式的图片上传到百度云 if(res == 1): #是人脸库中的人 bt_open() print("欢迎回家,门已打开") elif(res == -1): print("我没有瞥见你,我要关门了") time.sleep(3) bt_close() else: print("关门") bt_close() time.sleep(3) print('好了') time.sleep(5)

把稳:

运行程序后,如果报错

bluetooth.btcommon.BluetoothError: [Errno 112] Host is down

你则须要回到桌面端,将树莓派与HC-05重新配对一下,再运行一下就好了。

末了

至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门,智能门禁系统就做好啦!

有碰着什么问题,可以直接私信我^-^

标签:

相关文章