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实现决策树ID3算法的示例代码

    决策树是机器学习中一个重要的算法,ID3算法是决策树的一种,特点是易于理解和使用。本文将详细讲解如何用Python实现ID3算法,同时提供两个示例说明。 简介 ID3算法是一种经典的决策树算法,其核心是选择最好的特征来分割数据集。具体来说,算法的输入是一个数据集,每个数据样本有若干特征和一个标签值。假设数据集中有M个特征,那么我们需要选择一个特征来分割数据集…

    python 2023年6月3日
    00
  • 关于python的list相关知识(推荐)

    以下是“关于Python的List相关知识(推荐)”的详细攻略。 Python中的List 在Python中,List是一种常见的数据类型,可以存储多个。是可变的,这意味着可以添加、删除或修改List中的元素。List中的元素可以是任何数据类型,例如整数、点数、字符串、元组、列表等。 创建List 可以使用括号[]或list()函数来创建一个新的List。以…

    python 2023年5月13日
    00
  • python实现爬取千万淘宝商品的方法

    下面是“python实现爬取千万淘宝商品的方法”的攻略: 1. 确定目标 首先要明确我们要爬取的内容:千万淘宝商品的基本信息,包括商品名称、价格、销量、评价等。在爬取之前要了解淘宝网站的页面结构,确定我们爬取的内容所在的位置和对应的CSS选择器。 2. 准备工具 我们需要准备好爬虫所需的工具,主要包括Python编程语言、爬虫框架Scrapy、Python的…

    python 2023年6月3日
    00
  • OpenCV找到彩色圆圈和位置值Python

    【问题标题】:OpenCV find coloured in circle and position value PythonOpenCV找到彩色圆圈和位置值Python 【发布时间】:2023-04-03 18:39:01 【问题描述】: 我要做的是处理下面的考勤表,告诉我谁在场,谁不在 我目前正在使用 matchTemplate,它使用一个奇异的黑点来查…

    Python开发 2023年4月8日
    00
  • python列表的问题

    【问题标题】:problem with python listpython列表的问题 【发布时间】:2023-04-04 00:49:01 【问题描述】: 您好,我正在尝试创建一个列表,通过 for 循环从 txt 文件中逐行读取。我在列表中遇到语法错误,但不确定如何解决问题??? import re file = open(“text.txt”,”r”) …

    Python开发 2023年4月6日
    00
  • Python编码爬坑指南(必看)

    下面我将详细讲解一下Python编码爬坑指南的完整攻略。 概述 这篇攻略主要是针对Python爬虫过程中遇到的编码问题进行的总结和解析。代码的运行环境是Python3.x,其他版本的Python可能会有一些差异。本文会从以下几个方面进行讲解: 编码的概念及常用编码格式 编码问题的解决方法 案例分析 什么是编码 编码是指把一种字符集中的字符,按照某种规律,映射…

    python 2023年5月31日
    00
  • 一文带你梳理Python的中级知识

    一文带你梳理Python的中级知识 Python是一种高级编程语言,它具有简单易学、可读性强、功能大等特点。在本文中,我们将介绍Python的中级知识,包括函数、装饰器、生成器、迭代器、异常等。 函数 函数是Python中的基本构建块之一。它们是组语句,用于执行特定的任务。函数可以接受参数,并返回值。以下是一个简单的函数示例: def add_numbers…

    python 2023年5月13日
    00
  • python中ConfigParse模块的用法

    下面我详细讲解一下“python中ConfigParse模块的用法”的完整攻略。 一、ConfigParse模块的概述 ConfigParse 模块是 Python 标准库中的一个模块,它主要是用来解析配置文件的。配置文件是指那些包含了程序启动的基本参数的文件,它通常会包含一些键值对的配置信息,例如数据库连接信息、邮件服务器信息等等。 使用 ConfigPa…

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