提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、安装配置
  • 二、代码文件(离线模式的)
    • 1.树莓派代码
    • 2.arduino代码

前言


我做好的成品运行视频见b站:树莓派人脸识别门禁

一、安装配置

新手入门,树莓派操作系统配置方法树莓派配置Ho老师讲的很细致!!

树莓派配置usb摄像头:树莓派配置usb摄像头

在线模式用的是树莓派调用百度云api人脸识别,具体教程树莓派人脸识别门禁,照着她的一步步的来,配置好了就能实现了。如果usb摄像头配置好了,就不需要用她说的官方csi摄像头了,直接插usb摄像头。

这里提一嘴!现在淘宝卖的树莓派4b硬件都是1.5版本的,只能安装bullseye的操作系统,比如官网上下载的2022-04-04-raspios-bullseye-armhf-full.img.xz,这个版本python一直打不开摄像头,捣鼓了好几天,又联系了tb换了个旧硬件版本的树莓派,安装了旧版本buster操作系统才好用的。如有大神知道这个怎么解决评论一下,感谢!

离线模式需配置python opencv环境
python配置在b站哒哒贝塔那里配置好了,opencv配置教程:
树莓派配置opencv教程

二、代码文件(离线模式的)

1.树莓派代码


上面的文件第一行的都需要自己创建,第二行haar那个要到网上下载,rizhi.txt的会自己生成。
01_face_dateset.py文件代码如下:
这是拍摄你人脸照片的代码,会拍30张,存到dataset这个文件夹里。

import cv2
import oscam = cv2.VideoCapture(0)
cam.set(3, 640)
cam.set(4, 480) face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_id = input('\n enter user id end press <return> ==>  ')
count = 0while(True):ret, img = cam.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_detector.detectMultiScale(gray, 1.3, 5)for (x,y,w,h) in faces:cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)     count += 1cv2.imwrite("dataset/yourname." + str(face_id) + '.' + str(count) + ".jpg", gray[y:y+h,x:x+w])cv2.imshow('image', img)k = cv2.waitKey(100) & 0xff # Press 'ESC' for exiting videoif k == 27:breakelif count >= 30: breakcam.release()
cv2.destroyAllWindows()

02_face_recognition.py文件代码如下:
训练你的人脸数据,生成一个xml文件存到trainer文件夹里。

import numpy as np
from PIL import Image
import os
import cv2path = 'dataset'
recognizer = cv2.face.createLBPHFaceRecognizer()
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");
def getImagesAndLabels(path):imagePaths = [os.path.join(path,f) for f in os.listdir(path)]     faceSamples=[]ids = []for imagePath in imagePaths:PIL_img = Image.open(imagePath).convert('L') # convert it to grayscaleimg_numpy = np.array(PIL_img,'uint8')id = int(os.path.split(imagePath)[-1].split(".")[1])faces = detector.detectMultiScale(img_numpy)for (x,y,w,h) in faces:faceSamples.append(img_numpy[y:y+h,x:x+w])ids.append(id)return faceSamples,ids
faces,ids = getImagesAndLabels(path)
recognizer.train(faces, np.array(ids))
recognizer.save('trainer/trainer.yml')

03_face_training.py文件代码如下:

import cv2
import numpy as np
import os
import time
from bluetest import bt_open,servo_init,bt_closeisOpen = False
open_later_time = 0
recognizer = cv2.face.createLBPHFaceRecognizer()
recognizer.load('trainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
font = cv2.FONT_HERSHEY_SIMPLEX
id = 0
Bro = 0
c=0
names = ['I', 'yourname', 'M', 'N', 'V']
cam = cv2.VideoCapture(0)
cam.set(3, 1200) # set video widht 这里我用的双目摄像头,显示连个画面,单目的可以改成600
cam.set(4, 450) # set video height
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)
while True:ret, img =cam.read()gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)   faces = faceCascade.detectMultiScale( gray,scaleFactor = 1.2,minNeighbors = 5,minSize = (int(minW), int(minH)),)for(x,y,w,h) in faces:cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)id, confidence = recognizer.predict(gray[y:y+h,x:x+w])c = confidencen = names[id]if (confidence < 20) and isOpen == False:bt_open()id = names[id]print('欢迎%s'%id)c = "  {0}%".format(round(100 - confidence))Bro = 'Welcome't = time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time()))with open('rizhi.txt', 'a') as file:file.writelines('{},{}\n'.format(id,t))isOpen = Trueif  isOpen == True:open_later_time += 1else:open_later_time = 0#当计数器为100的时候准备下一次识别,这样两次识别之间就有一段间隔,否则会因为人脸框刷新太快导致死机。if open_later_time == 100:print('准备就绪')isOpen = Falseopen_later_time = 0elif (confidence < 20):            c = "  {0}%".format(round(100 - confidence))Bro = 'Welcome'else:n = "unknown"c = "  {0}%".format(round(100 - confidence))Bro = 'Who are you'cv2.putText(img, str(n), (x+5,y-5), font, 1, (255,255,255), 2)cv2.putText(img, str(c), (x+5,y+h-5), font, 1, (255,255,0), 1)  cv2.putText(img, str(Bro), (x,y+h+20), font, 1, (0,0,255), 2)cv2.imshow('camera',img) k = cv2.waitKey(30) & 0xffif k == 27: # press 'ESC' to quitbreakcap.release()
cv2.destroyAllWindows()

蓝牙文件bluetest.py代码

import bluetoothdef servo_init():#初始化指令bd_addr ="00:21:10:1E:B5:8A"#arduino连接的蓝牙模块的地址port =1sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )sock.connect((bd_addr, port))#创建连接sock.send("1")#发送数据sock.close()#关闭连接def bt_open():#开门指令bd_addr ="00:21:10:1E:B5:8A"#arduino连接的蓝牙模块的地址port =1sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )sock.connect((bd_addr, port))#创建连接sock.send("2")#发送数据sock.close()#关闭连接def bt_close():#关门指令bd_addr ="00:21:10:1E:B5:8A"#arduino连接的蓝牙模块的地址port =1sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )sock.connect((bd_addr, port))#创建连接sock.send("3")#发送数据sock.close()#关闭连接

2.arduino代码

舵机,刷卡模块怎么连看这篇文章:arduino连线

代码用我的:

#include<Servo.h>
#include <RFID.h>
#include <SPI.h>
Servo myservo;
int pos =0;
RFID rfid(10,9);   //D10--读卡器MOSI引脚、D5--读卡器RST引脚
int temp=0;
void setup()
{Serial.begin(9600);SPI.begin();rfid.init();myservo.attach(8);myservo.write(0);
delay(10000);
}void loop(){if (rfid.isCard()) {Serial.println("找到卡");//读取卡序列号if (rfid.readCardSerial()) {Serial.print("卡号");Serial.print(rfid.serNum[0],HEX);Serial.print(" ");Serial.print(rfid.serNum[1],HEX);Serial.print(" ");Serial.print(rfid.serNum[2],HEX);Serial.print(" ");Serial.print(rfid.serNum[3],HEX);Serial.print(" ");Serial.print(rfid.serNum[4],HEX);Serial.print(" ");Serial.println(" ");if(rfid.serNum[0]==0x03&&rfid.serNum[1]==0x22&&rfid.serNum[2]==0xDB&&rfid.serNum[3]==0x1D&&rfid.serNum[4]==0xE7){temp=1;//NFC}}//选卡,可返回卡容量(锁定卡片,防止多数读取),去掉本行将连续读卡rfid.selectTag(rfid.serNum);}if(temp==1){myservo.write(85);delay(2500);myservo.write(0);temp=0;}rfid.halt();while(Serial.available())//读取HC-05接收到的字符串
{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();break;default:servo_init();}
}
}void servo_init()//舵机初始化
{myservo.write(0);delay(1000);
}
void open_the_door()//舵机开门
{//  for(pos =0; pos <= 180; pos +=1){// myservo.write(pos);
myservo.write(85);delay(2500);myservo.write(0);delay(5);
}void close_the_door()  //舵机关门
{//for(pos = 180; pos >= 0; pos -= 1)
// {// myservo.write(pos);     myservo.write(10);delay(2500);myservo.write(0);        delay(5);}

如有侵权,请联系!

树莓派双目人脸识别门禁(在线+离线模式)+刷卡进出相关推荐

  1. 新手树莓派3B——人脸识别门禁管理系统

    文章目录 前言 一.怎么用树莓派设计人脸识别门禁系统? 二.树莓派系统的安装 三.远程连接 四.人脸识别 总结 前言 树莓派,自问世以来,其"麻雀虽小,五脏俱全"的微型电脑特征让无 ...

  2. 树莓派+STM32人脸识别门禁系统(中)----- 树莓派部分

    在上一篇博客中介绍了该项目的的需求分析以及先期的准备,今天就记录一下在树莓派上的开发过程,我从接触树莓派到完成项目也只是过了俩周的时间,肯定是没有把树莓派完全玩透的,遇到问题最好的方法还是去谷歌,如果 ...

  3. 树莓派人脸识别门禁opencv4.2_树莓派人脸识别实际应用:人脸识别门禁

    2020-3-16 之前舵机开门关门逻辑有点混乱,不太合乎常理,现对树莓派人脸识别代码进行修改,以及对Arduino控制代码有所调整: 在上一篇文章中 小雨:树莓派调用百度人脸识别API实现人脸识别​ ...

  4. python人脸识别门禁系统毕设_树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理...

    树莓派人脸识别门禁系统的总体设计 硬件包括:树莓派3B.电源模块.转5V降压模块.触摸感应传感器模块.声光报警模块和驱动模块. 由此设计出的人脸识别门禁系统总体结构框图如下: 总体结构框图 程序运行时 ...

  5. python人脸识别门禁系统毕设_人脸识别门禁系统 毕业设计 可移植树莓派

    [实例简介] 基于python的人脸识别门禁系统,实现对人脸的录入与识别功能 ,毕业设计 附论文 可移植树莓派 [实例截图] [核心代码] 人脸识别毕业设计源码 └── 人脸识别毕业设计源码 ├── ...

  6. python人脸识别门禁系统_树莓派人脸识别门禁系统图文教程

    前面发布了人脸识别门禁系统的系列视频教程,现在补上图文版,方便查看指令和代码,这篇文章也是对之前的文章的更新与完善. 本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实 ...

  7. python人脸识别门禁_树莓派人脸识别门禁系统图文教程

    前面发布了人脸识别门禁系统的系列视频教程,现在补上图文版,方便查看指令和代码,这篇文章也是对之前的文章的更新与完善. 本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实 ...

  8. 【物联网树莓派毕设04】Arduino实现电梯及人脸识别门禁

    一.前言 这次是利用Arduino实现毕设中的电梯联动及门禁的部分,因为之前大二的时候用过Arduino做过课设,比较熟悉,其中一个项目就是实现模拟电梯运行.毕设的电梯部分,功能不用很复杂,只需要实现 ...

  9. 生物识别包含人脸识别门禁之外还包含哪种识别种类

    生物识别包含人脸识别门禁之外还包含哪种识别种类 在现阶段的研究和行业使用率,生物特征识别主要关系到计算机视觉.图象处理与模式识别.计算机听觉.语音处理.多传感器技术.虚拟现实.计算机图形学.可视化技术 ...

最新文章

  1. java培训面试技巧分享
  2. Python代码统计工具
  3. ubuntu解压zip文件命令_Linux常用命令10 - unzip
  4. Ubuntu14.04安装redis和简单配置
  5. iOS 模糊化效果 ANBlurredImageView的使用
  6. go编译so win10_windows搭建Go语言交叉编译环境
  7. Time除了监控程序运行时间还能干这个?
  8. 擅长排列的小明(nyoj19)
  9. LVS-NAT工作模式的实现
  10. 故宫,中国古代建筑艺术的奇葩
  11. 写博客时怎么录制动态图片或者小视频
  12. 中国数据中心改造市场趋势报告、技术动态创新及市场预测
  13. 文本预处理:拼写纠错
  14. Crashing Balloon
  15. tsLint环境配置及用法示例
  16. PPT素材不够用,这5个网站帮你解决
  17. 元宇宙类电影这里全了!
  18. python实现非标准正态分布下概率密度有关计算
  19. Java键盘输入一个int数组
  20. MySQL 基础 -- MySQL 数据类型说明(数值类型、字符串类型、日期时间类型)、SQL通用语法和SQL分类

热门文章

  1. eclipse building workspace sleeping rapidly
  2. Hold不住的老师 HNUST 1588
  3. CNCC 2018 科技展盛况空前,近 100 家企业汇聚一堂
  4. 【单片机基础】单片机的时序概念
  5. NOIP2008年普及组初赛题目答案及解析
  6. python夯实基础日记-函数详解
  7. python红楼梦词频统计
  8. python123作业答案第六周-小白的Python新手教程​
  9. 英语日常短语积累(6)-银行考试真题
  10. TreeList 节点拖曳