21xrx.com
2024-12-22 01:14:59 Sunday
登录
文章检索 我的文章 写文章
OpenCV树莓派4B实现人脸识别门禁系统
2024-05-18 05:36:38 深夜i     --     --
OpenCV 树莓派4B 人脸识别 门禁系统

随着技术的迅猛发展,人脸识别技术已经被广泛应用于各个领域。而在门禁系统中,人脸识别技术的应用也越来越受到重视。本文将介绍如何使用OpenCV树莓派4B实现人脸识别门禁系统。

首先,我们需要搭建硬件平台。树莓派是一款功能强大的微型电脑,它具有较高的计算性能和丰富的外设接口,非常适合用于人脸识别应用。在安装好树莓派4B的操作系统后,我们需要连接一个USB摄像头,以便进行人脸图像的采集。

接下来,我们需要安装OpenCV库。OpenCV是一个开源的计算机视觉库,能够提供丰富的图像处理和计算机视觉算法。在树莓派的终端中,使用以下命令安装OpenCV库:

sudo apt-get install python3-opencv

安装完成后,我们就可以开始编写Python代码来实现人脸识别门禁系统了。首先,我们需要进行人脸图像的采集,以便训练一个人脸识别模型。通过调用摄像头进行实时图像采集,并将采集到的图像保存到本地。

import cv2

cam = cv2.VideoCapture(0)

detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

i=0

while(True):

  ret, img = cam.read()

  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

  faces = 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)

    i=i+1

    cv2.imwrite("dataset/User."+str(face_id) +'.'+ str(i) + ".jpg", gray[y:y+h,x:x+w])

  cv2.imshow('frame',img)

  if cv2.waitKey(100) & 0xFF == ord('q'):

    break

  elif i>100:

    break

cam.release()

cv2.destroyAllWindows()

在图像采集完毕后,我们需要训练一个人脸识别模型。通过OpenCV的LBPH(Local Binary Patterns Histograms)算法,可以实现简单而高效的人脸识别。为了训练模型,我们需要定义一个函数,将采集的人脸图像转化为特征向量,并存储到训练集中。

import cv2

import numpy as np

from PIL import Image

import os

recognizer = cv2.face.LBPHFaceRecognizer_create()

path='dataset'

def getImagesWithID(path):

  imagePaths=[os.path.join(path,f) for f in os.listdir(path)]

  faces=[]

  IDs=[]

  for imagePath in imagePaths:

    faceImg=Image.open(imagePath).convert('L')

    faceNp=np.array(faceImg,'uint8')

    ID=int(os.path.split(imagePath)[-1].split('.')[1])

    faces.append(faceNp)

    IDs.append(ID)

    cv2.imshow("training",faceNp)

    cv2.waitKey(10)

  return np.array(IDs),faces

Ids,faces=getImagesWithID(path)

recognizer.train(faces,Ids)

recognizer.save('recognizer/trainer.yml')

cv2.destroyAllWindows()

最后,我们可以使用训练好的人脸识别模型来实现门禁系统的功能。通过调用摄像头进行实时图像采集,并实时使用人脸识别模型对采集到的人脸进行识别。如果识别到的人脸与已知的人脸匹配,则开启门禁系统。

import cv2

import numpy as np

recognizer=cv2.face.LBPHFaceRecognizer_create()

recognizer.read('recognizer/trainer.yml')

cascadePath = "haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(cascadePath);

cam = cv2.VideoCapture(0)

font = cv2.FONT_HERSHEY_SIMPLEX

while True:

  ret, im =cam.read()

  gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

  faces=faceCascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(100, 100), flags=cv2.CASCADE_SCALE_IMAGE)

  for(x,y,w,h) in faces:

    Id, confidence = recognizer.predict(gray[y:y+h,x:x+w])

    if (confidence < 100):

      # 开启门禁

      cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)

    else:

      # 不开启门禁

      cv2.rectangle(im,(x,y),(x+w,y+h),(0,0,255),2)

    cv2.imshow('im',im)

  if cv2.waitKey(10) & 0xFF==ord('q'):

    break

cam.release()

cv2.destroyAllWindows()

通过以上代码,我们可以实现基于OpenCV和树莓派4B的人脸识别门禁系统。该系统可以实现实时的人脸采集、训练和识别,并根据识别结果进行门禁的控制。这种基于树莓派的人脸识别门禁系统具有成本低、安全可靠等优点,正逐渐得到广泛应用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复