python+OpenCV人脸识别考勤系统实现的详细代码

下面我将为您详细讲解“python+OpenCV人脸识别考勤系统实现的详细代码”的完整攻略:

1. 下载并安装OpenCV

在终端中使用以下命令下载和安装OpenCV:

pip install opencv-python

2. 收集数据

使用OpenCV收集人脸数据,并将其保存到与代码文件相同的目录中的“faces”文件夹中。

以下代码可以帮助您搜集数据:

import cv2

faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
video_capture = cv2.VideoCapture(0)
count = 0

while True:
    # Capture frame-by-frame
    ret, frame = video_capture.read()

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

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

    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        count += 1

        # Save the captured image into the datasets folder
        cv2.imwrite("faces/User." + str(count) + ".jpg", gray[y:y+h,x:x+w])

    # Display the resulting frame
    cv2.imshow('Video', frame)

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

# Release the capture
video_capture.release()
cv2.destroyAllWindows()

3. 训练模型

使用收集到的人脸数据训练模型,以下代码可以帮助您训练模型:

import cv2
import numpy as np
from PIL import Image
import os

# Path for face image database
path = 'faces'

recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");

# function to get the images and label data
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 grayscale
        img_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

print ("\n [INFO] Training faces. It will take a few seconds. Wait ...")
faces,ids = getImagesAndLabels(path)
recognizer.train(faces, np.array(ids))

# Save the model into trainer/trainer.yml
recognizer.write('trainer/trainer.yml')

# Print the number of faces trained and end program
print("\n [INFO] {0} faces trained. Exiting Program".format(len(np.unique(ids))))

4. 验证模型并实现考勤系统

以下代码可以将模型应用于视频流,并根据检测到的人脸进行考勤:

import cv2
import numpy as np
import os 

recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);

font = cv2.FONT_HERSHEY_SIMPLEX

# id counter
id = 0

# names related to ids : example ==> Marcelo: id=1,  etc
names = ['None', 'User 1', 'User 2', 'User 3', 'User 4'] 

# Initialize and start realtime video capture
cam = cv2.VideoCapture(0)
cam.set(3, 640) # set video widht
cam.set(4, 480) # set video height

# Define min window size to be recognized as a face
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])

        # Check if confidence is less then 100 ==> "0" is perfect match 
        if confidence < 100:
            id = names[id]
            confidence = "  {0}%".format(round(100 - confidence))
        else:
            id = "unknown"
            confidence = "  {0}%".format(round(100 - confidence))

        cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2)
        cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1)  

    cv2.imshow('camera',img) 

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

cam.release()
cv2.destroyAllWindows()

希望这个攻略对您有所帮助,如果您还有其他问题欢迎随时提出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python+OpenCV人脸识别考勤系统实现的详细代码 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python socket模块ftp传输文件过程解析

    下面是我的完整回答。 Python socket模块ftp传输文件过程解析 简介 socket是Python内置的标准库,用于提供网络通信功能。通过socket模块,我们可以编写各种类型的网络应用程序,如Web服务器、FTP客户端等。 FTP(File Transfer Protocol)是一种用户间文件传输协议。FTP客户端通过FTP服务器上传或下载文件。…

    python 2023年6月3日
    00
  • Python数据结构与算法之链表,无序链表详解

    Python数据结构与算法之链表,无序链表详解 介绍 链表是一种基础的数据结构,是由一系列节点组成的线性结构。它的每个节点都包括两个部分,一个是存储数据的部分,另一个是指向下一个节点的部分。链表有很多种不同的形式,其中无序链表是其中最基础同时也是最简单的一种。无序链表可以用于存储任意类型的数据,不同于数组,它没有固定的大小限制。 实现无序链表的基本结构 链表…

    python 2023年5月14日
    00
  • Python输入整数进行排序方式

    在Python中,可以使用多种方法对输入的整数进行排序。下面将介绍两种常用的方法。 方法一:使用sort函数 sort函数是Python内置排序函数,可以对列表进行排序。我们可以使用sort函数对输入的整进行排序。以下是一个使用sort函数对输入的整数进行排序的示例: # 使用sort函数对输入的整数进行排序 numbers = input("请输…

    python 2023年5月13日
    00
  • Tkinter组件Checkbutton的具体使用

    以下是关于Tkinter组件Checkbutton的完整攻略。 Checkbutton的介绍 Checkbutton是Tkinter中的一个组件,它可以提供一个复选框,可以用来表示二元状态(选中/未选中)。比如在选项设置界面,我们可以利用Checkbutton让用户选择他们想要的功能选项。 Checkbutton的语法 Checkbutton的语法如下: w…

    python 2023年6月13日
    00
  • Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法

    在Python编程过程中,我们可能会遇到各种错误,例如TypeError: ‘NoneType’ object is not iterable。这个错误通常是由于我们尝试迭一个None对象而引起的。以下是解决这个错误的完整攻略: 1. 检查变量是否为None 在Python编程程中,我们应该始终检查变量是否为None。如果我们尝试迭代一个None对象会出现T…

    python 2023年5月13日
    00
  • Python Requests安装与简单运用

    PythonRequests安装与简单运用 安装PythonRequests PythonRequests是一个Python第三方库,用于发送HTTP请求。在使用PythonRequests之前,需要先安装它。可以使用pip命令进行安装,具体步骤如下: 打开终端或命令行界面。 输入以下命令进行安装: pip install requests 等待安装完成即可…

    python 2023年5月15日
    00
  • 详解在Python中把一个图像叠加在另一个图像上

    在Python中把一个图像叠加在另一个图像上的过程中,可以用OpenCV库来实现。具体步骤如下: 1.读取原图和覆盖图 import cv2 # 读取原图和覆盖图 img1 = cv2.imread("image1.png") img2 = cv2.imread("image2.png") 2.确定图像叠加的位置 # …

    python-answer 2023年3月25日
    00
  • 新年快乐! python实现绚烂的烟花绽放效果

    “新年快乐!Python 实现绚烂的烟花绽放效果”是一篇利用Python编程语言编写的烟花绽放效果生成的教程。本文将为大家提供完整的攻略,包含以下步骤: 1. 准备工作 在开始编写 Python 代码之前,需要准备一些工作。 安装 Python 首先,需要安装 Python 编程语言。官网(https://www.python.org/downloads/)…

    python 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部