iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python搭建人脸识别考勤系统
  • 228
分享到

基于Python搭建人脸识别考勤系统

2024-04-02 19:04:59 228人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录介绍人脸识别的实际应用构建人脸识别系统的步骤安装库导入库加载图像查找人脸位置并绘制边界框为人脸识别训练图像构建人脸识别系统人脸识别系统面临的挑战结论介绍 在本文中,你将学习如何使

介绍

在本文中,你将学习如何使用 python 构建人脸识别系统。人脸识别比人脸检测更进一步。在人脸检测中,我们只检测人脸在图像中的位置,但在人脸识别中,我们制作了一个可以识别人的系统。

“人脸识别是验证或识别图片或视频中的人的挑战。大型科技巨头仍在努力打造更快、更准确的人脸识别模型。”

人脸识别的实际应用

人脸识别目前正被用于让世界更安全、更智能、更方便。

有几个用例:

  • 寻找失踪人员
  • 零售犯罪
  • 安全标识
  • 识别社交媒体上的帐户
  • 考勤系统
  • 识别汽车中的驾驶员

根据性能和复杂性,有多种方法可以执行面部识别。

传统人脸识别算法

在 1990 年代,整体方法被用于人脸识别。手工制作的局部描述符在 1920 年代初期开始流行,然后在 2000 年代后期采用局部特征学习方法。目前广泛使用并在OpenCV中实现的算法如下:

  • Eigenfaces (1991)
  • Local Binary Patterns Histograms (LBPH) (1996)
  • Fisherfaces(1997)
  • Scale Invariant Feature TransfORM (SIFT) (1999)
  • Speed Up Robust Features (SURF)(2006)

每种方法都遵循不同的方法来提取图像信息并将其与输入图像进行匹配。

Fischer-faces和Eigenfaces与 SURF 和 SIFT 具有几乎相似的方法。

LBPH 是一种简单但非常有效的方法,但与现代人脸识别器相比,速度较慢。

与现代人脸识别算法相比,这些算法并不快。传统算法不能仅通过拍摄一个人的单张照片来训练。

人脸识别深度学习

一些广泛使用的基于深度学习的人脸识别系统如下:

  • DeepFace
  • DeepID series of systems
  • VGGFace
  • FaceNet

人脸识别器一般是在人脸图像中找出重要的点,如嘴角、眉毛、眼睛、鼻子、嘴唇等。这些点的坐标称为五官点,这样的点有66个。这样,寻找特征点的不同技术给出不同的结果。

来源:https://www.pinterest.com/mrmosherart/face-landmarks/

人脸识别模型涉及的步骤:

1.人脸检测:定位人脸并在人脸周围绘制边界框并保留边界框的坐标。

2.人脸对齐:标准化人脸以与训练数据库一致。

3.特征提取:提取将用于训练和识别任务的人脸特征。

4.人脸识别: 将人脸与准备好的数据库中的一张或多张已知人脸进行匹配。

在传统的人脸识别方法中,我们有单独的模块来执行这 4 个步骤。在本文中,你将看到一个将这 4 个步骤组合在一个步骤中的库。

构建人脸识别系统的步骤

安装库

我们需要安装 2 个库来实现人脸识别。

dlib : dlib是一个现代 c++ 工具包,包含机器学习算法和工具,用于在 C++ 中创建复杂的软件以解决实际问题。


# installing dlib 
pip install dlib

脸部识别:将face_recognition库,创建和维护 Adam Geitgey,包含了dlib人脸识别功能。


# installing face recognition
pip install face recognition

Opencv 用于一些图像预处理。


# installing opencv 
pip install opencv

导入库

现在你已经下载了所有重要的库,让我们导入它们来构建系统。


import cv2
import numpy as np
import face_recognition

加载图像

导入库后,你需要加载图像。

face_recognition 库以 BGR 的形式加载图像,为了打印图像,你应该使用 OpenCV 将其转换为 RGB。


imgelon_bgr = face_recognition.load_image_file('elon.jpg')
imgelon_rgb = cv2.cvtColor(imgelon_bgr,cv2.COLOR_BGR2RGB)
cv2.imshow('bgr', imgelon_bgr)
cv2.imshow('rgb', imgelon_rgb)
cv2.waiTKEy(0)

如你所见,RGB 看起来很自然,因此你将始终把通道更改为 RGB。

查找人脸位置并绘制边界框

你需要在人脸周围绘制一个边界框,以显示是否已检测到人脸。


imgelon =face_recognition.load_image_file('elon.jpg')
imgelon = cv2.cvtColor(imgelon,cv2.COLOR_BGR2RGB)
#----------Finding face Location for drawing bounding boxes-------
face = face_recognition.face_locations(imgelon_rgb)[0]
copy = imgelon.copy()
#-------------------Drawing the Rectangle-------------------------
cv2.rectangle(copy, (face[3], face[0]),(face[1], face[2]), (255,0,255), 2)
cv2.imshow('copy', copy)
cv2.imshow('elon',imgelon)
cv2.waitKey(0)

为人脸识别训练图像

该库的制作方式是自动查找人脸并仅处理人脸,因此你无需从图片中裁剪人脸。

训练:

在这个阶段,我们将训练图像转换为一些编码,并使用该图像的人名存储编码。


train_elon_encodings = face_recognition.face_encodings(imgelon)[0]

测试

为了测试,我们加载图像并将其转换为编码,然后在训练期间将编码与存储的编码进行匹配,这种匹配基于寻找最大相似度。当你找到与测试图像匹配的编码时,你将获得与训练编码相关联的名称。


# lets test an image
test = face_recognition.load_image_file('elon_2.jpg')
test = cv2.cvtColor(test, cv2.COLOR_BGR2RGB)
test_encode = face_recognition.face_encodings(test)[0]
print(face_recognition.compare_faces([train_encode],test_encode))

face_recognition.compare_faces,如果两个图像中的人相同,返回True,否则返回False。

构建人脸识别系统

导入必要的库


import cv2
import face_recognition
import os
import numpy as np
from datetime import datetime
import pickle

定义将存储训练图像数据集的文件夹路径


path = 'student_images'

注意:对于训练,我们只需要将训练图片放到path目录下,图片名称必须是person_name.jpg/jpeg格式。

例如:

正如你在我的 student_images 路径中看到的,有 6 个人。因此我们的模型只能识别这 6 个人。你可以在此目录中添加更多图片,以便更多人识别

现在创建一个列表来存储 person_name 和图像数组

遍历path目录中存在的所有图像文件,读取图像,并将图像数组附加到图像列表,并将文件名附加到classNames。


images = []
classNames = []mylist = os.listdir(path)
for cl in mylist:
    curImg = cv2.imread(f'{path}/{cl}')
    images.append(curImg)
    classNames.append(os.path.splitext(cl)[0])

创建一个函数来对所有训练图像进行编码并将它们存储在一个变量encoding_face_train 中。


def findEncodings(images):
    encodeList = []
    for img in images:
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        encoded_face = face_recognition.face_encodings(img)[0]
        encodeList.append(encoded_face)
    return encodeList
encoded_face_train = findEncodings(images)

创建一个函数,该函数将创建一个Attendance.csv文件来存储考勤时间。

注意:这里需要手动创建Attendance.csv文件并在函数中给出路径


def markAttendance(name):
    with open('Attendance.csv','r+') as f:
        myDataList = f.readlines()
        nameList = []
        for line in myDataList:
            entry = line.split(',')
            nameList.append(entry[0])
        if name not in nameList:
            now = datetime.now()
            time = now.strftime('%I:%M:%S:%p')
            date = now.strftime('%d-%B-%Y')
            f.writelines(f'n{name}, {time}, {date}')

我们首先检查出席者的名字是否已经在attenting .csv中可用。

如果出席者的名字在attends.csv中不可用,我们将在函数调用的时间中写入出席者的名字。

阅读网络摄像头进行实时识别


# take pictures from WEBcam 
cap  = cv2.VideoCapture(0)while True:
    success, img = cap.read()
    imgS = cv2.resize(img, (0,0), None, 0.25,0.25)
    imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
    faces_in_frame = face_recognition.face_locations(imgS)
    encoded_faces = face_recognition.face_encodings(imgS, faces_in_frame)for encode_face, faceloc in zip(encoded_faces,faces_in_frame):
        matches = face_recognition.compare_faces(encoded_face_train, encode_face)
        faceDist = face_recognition.face_distance(encoded_face_train, encode_face)
        matchIndex = np.argmin(faceDist)
        print(matchIndex)
        if matches[matchIndex]:
            name = classNames[matchIndex].upper().lower()
            y1,x2,y2,x1 = faceloc
            # since we scaled down by 4 times
            y1, x2,y2,x1 = y1*4,x2*4,y2*4,x1*4
            cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
            cv2.rectangle(img, (x1,y2-35),(x2,y2), (0,255,0), cv2.FILLED)
            cv2.putText(img,name, (x1+6,y2-5), cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
            markAttendance(name)
    cv2.imshow('webcam', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

仅将识别部分的图像大小调整为 1/4。输出帧将是原始大小。

调整大小可提高每秒帧数。

face_recognition.face_locations()在调整大小的图像(imgS)上被调用。对于人脸边界框坐标必须乘以 4 才能覆盖在输出帧上。

**face_recognition.distance()**返回测试图像的距离数组,其中包含我们训练目录中存在的所有图像。

最小人脸距离的索引将是匹配的人脸。

找到匹配的名称后,我们调用markAttendance函数。

使用**cv2.rectangle()**绘制边界框。

我们使用**cv2.putText()**将匹配的名称放在输出帧上。

考勤报告

人脸识别系统面临的挑战

尽管构建面部识别看起来很容易,但在没有任何限制的情况下拍摄的现实世界图像中却并不容易。面部识别系统面临的几个挑战如下:

**照明:**它极大地改变了面部外观,观察到照明条件的轻微变化对其结果产生重大影响。

**姿势:**面部识别系统对姿势高度敏感,如果数据库仅在正面视图上进行训练,可能会导致识别错误或无法识别。

面部表情:同一个人的不同表情是另一个需要考虑的重要因素。不过,现代识别器可以轻松处理它。

低分辨率:识别器的训练必须在分辨率好的图片上进行,否则模型将无法提取特征。

**老化:**随着年龄的增长,人脸的形状、线条、纹理变化是另一个挑战。

结论

在本文中,我们讨论了如何使用face_recognition库创建人脸识别系统并制作了考勤系统。你可以使用Tkinter或PyQt进一步设计用于人脸识别考勤系统的GUI。

以上就是基于Python搭建人脸识别考勤系统的详细内容,更多关于Python人脸识别考勤系统的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于Python搭建人脸识别考勤系统

本文链接: https://www.lsjlt.com/news/161166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python搭建人脸识别考勤系统
    目录介绍人脸识别的实际应用构建人脸识别系统的步骤安装库导入库加载图像查找人脸位置并绘制边界框为人脸识别训练图像构建人脸识别系统人脸识别系统面临的挑战结论介绍 在本文中,你将学习如何使...
    99+
    2022-11-12
  • Python如何搭建人脸识别考勤系统
    这篇文章给大家分享的是有关Python如何搭建人脸识别考勤系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。人脸识别的实际应用人脸识别目前正被用于让世界更安全、更智能、更方便。有几个用例:寻找失踪人员零售犯罪安全...
    99+
    2023-06-22
  • python opencv怎么实现人脸识别考勤系统
    小编给大家分享一下python opencv怎么实现人脸识别考勤系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python可以做什么Python是一种编程语言...
    99+
    2023-06-14
  • python opencv人脸识别考勤系统的完整源码
    如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import wx import wx.grid from time i...
    99+
    2022-06-02
    python 人脸识别考勤系统 python opencv人脸识别
  • Python+OpenCV人脸识别签到考勤系统实现(附demo)
    目录前言项目效果图项目需要的环境编译器代码部分后记项目下载前言 本项目为IOT实验室人员签到考勤设计,系统实现功能:1.人员人脸识别并完成签到/签退2.考勤时间计算3.保存考勤数据为...
    99+
    2022-11-12
  • 基于Python实现简单的人脸识别系统
    目录前言基本原理代码实现创建虚拟环境安装必要的库前言 最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完...
    99+
    2022-11-12
  • 基于opencv和pillow实现人脸识别系统(附demo)
    目录一。人脸检测和数据收集二.训练识别器三.人脸识别和显示本文不涉及分类器、训练识别器等算法原理,仅包含对其应用(未来我也会写自己对机器学习算法原理的一些观点和了解) 首先我们需要知...
    99+
    2022-11-12
  • 基于opencv和pillow怎么实现人脸识别系统
    这篇文章主要讲解了“基于opencv和pillow怎么实现人脸识别系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于opencv和pillow怎么实现人脸识别系统”吧!本文不涉及分类器、...
    99+
    2023-06-21
  • Python中基于Opencv怎么实现人脸识别
    这篇文章主要讲解了“Python中基于Opencv怎么实现人脸识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中基于Opencv怎么实现人脸识别”吧!检测人脸。这应该是最基本的...
    99+
    2023-06-02
  • 基于Python的人脸识别功能怎么实现
    这篇文章主要介绍“基于Python的人脸识别功能怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Python的人脸识别功能怎么实现”文章能帮助大家解决问题。一、 人脸检测人脸检测是指从图像...
    99+
    2023-07-05
  • Python基于pyopencv人脸识别并绘制GUI界面
    目录项目介绍采集人脸:识别功能:项目思路项目模块1.人脸采集2.数据训练3.人脸识别4.GUI界面项目代码人脸采集数据训练人脸识别合并GUI项目总结项目介绍 我们先来看看成果: 首...
    99+
    2022-11-12
  • Python如何实现人脸识别系统
    小编给大家分享一下Python如何实现人脸识别系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基本原理人脸识别和目标检测这些还不太一样,比如大家传统的训练一个目...
    99+
    2023-06-26
  • 基于Java(SpringBoot框架)毕业设计作品成品(28)AI毕业设计人脸识别考勤签到系统设计与实现
    博主介绍:《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题...
    99+
    2023-10-20
    AI毕业设计 人脸识别考勤签到系统 毕设 毕业设计 计算机毕业设计
  • python实现的人脸识别打卡系统
    目录项目地址:简介使用主要代码项目地址: https://github.com/king-xw/Face_Recogntion 简介 本仓库是使用python编写的一个简单的人脸识别考勤打卡系统 主要功能有录入人脸信...
    99+
    2022-06-02
    python 人脸识别 python 打卡系统
  • 基于Python实现人脸识别和焦点人物检测功能
    写在前面的话 基于dlib库的模型,实现人脸识别和焦点人物的检测。最后呈现的效果为焦点人物的识别框颜色与其他人物框不一样。 准备工作 需要安装好python环境,安装好dlib、o...
    99+
    2022-11-12
  • Python基于opencv实现的人脸识别(适合初学者)
    目录一点背景知识一、人脸识别步骤 二、直接上代码(1)录入人脸.py(2)数据训练.py(3)进行识别.py三、运行过程及结果1、获取人脸照片于目标文件中2、进行数据训练,...
    99+
    2022-11-13
  • 基于C#的在线人脸识别系统开发项目经验总结
    引言随着人工智能和大数据技术的发展,人脸识别技术已经逐渐成为了生活中不可或缺的一项技术。而在线人脸识别系统的出现则为这项技术的应用提供了更便捷的方式。本文介绍了作者在开发基于C#的在线人脸识别系统中的经验总结。实现方式2.1 人脸检测人脸识...
    99+
    2023-11-03
    C# (编程语言) 在线人脸识别 (功能) 项目经验总结 (总结)
  • 离线识别率高达 99% 的 Python 人脸识别系统,开源~
    以往的人脸识别主要是包括人脸图像采集、人脸识别预处理、身份确认、身份查找等技术和系统。现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测、行人跟踪、甚至到了动态物体的跟踪。由此可以看出,人脸识别系统已经由简单的图像处理发展到了视频实时处理。...
    99+
    2023-05-14
    Python 人脸识别
  • 基于Python创建语音识别控制系统
    下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形...
    99+
    2022-11-12
  • 怎么使用Python实现人脸离线识别系统
    本篇内容介绍了“怎么使用Python实现人脸离线识别系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先看看现在的研究现状。如上的发展趋势...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作