iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python+OpenCV人脸识别签到考勤系统实现(附demo)
  • 913
分享到

Python+OpenCV人脸识别签到考勤系统实现(附demo)

2024-04-02 19:04:59 913人浏览 泡泡鱼

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

摘要

目录前言项目效果图项目需要的环境编译器代码部分后记项目下载前言 本项目为ioT实验室人员签到考勤设计,系统实现功能:1.人员人脸识别并完成签到/签退2.考勤时间计算3.保存考勤数据为

前言

本项目为ioT实验室人员签到考勤设计,系统实现功能:
1.人员人脸识别并完成签到/签退
2.考勤时间计算
3.保存考勤数据为CSV格式(Excel表格)

PS:本系统2D人脸识别,节约了繁琐的人脸识别训练部分,简洁快捷

该项目为测试版,正式版会加入更多的功能,持续更新中…
测试版项目地址我会放到结尾

项目效果图

系统初始化登陆界面

在这里插入图片描述

主界面展示图:

在这里插入图片描述

签到功能展示

在这里插入图片描述

在这里插入图片描述

签退功能展示

在这里插入图片描述

后台签到数据记录

在这里插入图片描述

是否签到/退判断

在这里插入图片描述

项目需要的环境

核心环境:

  • OpenCV-python 4.5.5.64
  • face_recognition 1.30
  • face_recognition_model 0.3.0
  • dlib 19.23.1

UI窗体界面:

  • PyQt5 5.15.4
  • pyqt5-plugins 5.15.4.2.2
  • PyQt5-Qt5 5.15.2
  • PyQt5-sip 12.10.1
  • pyqt5-tools 5.15.4.3.2

编译器

Pycham 2021.1.3

在这里插入图片描述

Python版本 3.9.12

在这里插入图片描述

Anaconda

在这里插入图片描述

辅助开发QT-designer

在这里插入图片描述

在这里插入图片描述

项目配置

在这里插入图片描述

代码部分

核心代码

MainWindow.py
UI文件加载:

class Ui_Dialog(QDialog):
    def __init__(self):
        super(Ui_Dialog, self).__init__()
        loadUi("mainwindow.ui", self)       #加载QTUI文件

        self.runButton.clicked.connect(self.runSlot)

        self._new_window = None
        self.Videocapture_ = None

摄像头调用:

    def refreshAll(self):
        print("当前调用人俩检测摄像头编号(0为笔记本内置摄像头,1为USB外置摄像头):")
        self.Videocapture_ = "0"

OutWindow.py
获取当前系统时间

class Ui_OutputDialog(QDialog):
    def __init__(self):
        super(Ui_OutputDialog, self).__init__()
        loadUi("./outputwindow.ui", self)   #加载输出窗体UI

        #datetime 时间模块
        now = QDate.currentDate()
        current_date = now.toString('DDD dd MMMM yyyy')  #时间格式
        current_time = datetime.datetime.now().strftime("%I:%M %p")
        self.Date_Label.setText(current_date)
        self.Time_Label.setText(current_time)

        self.image = None

签到时间计算

    def ElapseList(self,name):
        with open('Attendance.csv', "r") as csv_file:
            csv_reader = csv.reader(csv_file, delimiter=',')
            line_count = 2

            Time1 = datetime.datetime.now()
            Time2 = datetime.datetime.now()
            for row in csv_reader:
                for field in row:
                    if field in row:
                        if field == 'Clock In':
                            if row[0] == name:
                                Time1 = (datetime.datetime.strptime(row[1], '%y/%m/%d %H:%M:%S'))
                                self.TimeList1.append(Time1)
                        if field == 'Clock Out':
                            if row[0] == name:
                                Time2 = (datetime.datetime.strptime(row[1], '%y/%m/%d %H:%M:%S'))
                                self.TimeList2.append(Time2)

人脸识别部分

# 人脸识别部分
        faces_cur_frame = face_recognition.face_locations(frame)
        encodes_cur_frame = face_recognition.face_encodings(frame, faces_cur_frame)

        for encodeFace, faceLoc in zip(encodes_cur_frame, faces_cur_frame):
            match = face_recognition.compare_faces(encode_list_known, encodeFace, tolerance=0.50)
            face_dis = face_recognition.face_distance(encode_list_known, encodeFace)
            name = "unknown"    #未知人脸识别为unknown
            best_match_index = np.argmin(face_dis)
            if match[best_match_index]:
                name = class_names[best_match_index].upper()
                y1, x2, y2, x1 = faceLoc
                cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
                cv2.rectangle(frame, (x1, y2 - 20), (x2, y2), (0, 255, 0), cv2.FILLED)
                cv2.putText(frame, name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255), 1)
            mark_attendance(name)

        return frame

签到数据保存与判断

# csv表格保存数据
        def mark_attendance(name):
            """
            :param name: 人脸识别部分
            :return:
            """
            if self.ClockInButton.isChecked():
                self.ClockInButton.setEnabled(False)
                with open('Attendance.csv', 'a') as f:
                        if (name != 'unknown'):         #签到判断:是否为已经识别人脸
                            buttonReply = QMessageBox.question(self, '欢迎 ' + name, '开始签到' ,
                                                               QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                            if buttonReply == QMessageBox.Yes:

                                date_time_string = datetime.datetime.now().strftime("%y/%m/%d %H:%M:%S")
                                f.writelines(f'\n{name},{date_time_string},Clock In')
                                self.ClockInButton.setChecked(False)

                                self.NameLabel.setText(name)
                                self.StatusLabel.setText('签到')
                                self.HoursLabel.setText('开始签到计时中')
                                self.MinLabel.setText('')

                                self.Time1 = datetime.datetime.now()
                                self.ClockInButton.setEnabled(True)
                            else:
                                print('签到操作失败')
                                self.ClockInButton.setEnabled(True)
            elif self.ClockOutButton.isChecked():
                self.ClockOutButton.setEnabled(False)
                with open('Attendance.csv', 'a') as f:
                        if (name != 'unknown'):
                            buttonReply = QMessageBox.question(self, '嗨呀 ' + name, '确认签退?',
                                                              QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                            if buttonReply == QMessageBox.Yes:
                                date_time_string = datetime.datetime.now().strftime("%y/%m/%d %H:%M:%S")
                                f.writelines(f'\n{name},{date_time_string},Clock Out')
                                self.ClockOutButton.setChecked(False)

                                self.NameLabel.setText(name)
                                self.StatusLabel.setText('签退')
                                self.Time2 = datetime.datetime.now()

                                self.ElapseList(name)
                                self.TimeList2.append(datetime.datetime.now())
                                CheckInTime = self.TimeList1[-1]
                                CheckOutTime = self.TimeList2[-1]
                                self.ElapseHours = (CheckOutTime - CheckInTime)
                                self.MinLabel.setText("{:.0f}".fORMat(abs(self.ElapseHours.total_seconds() / 60)%60) + 'm')
                                self.HoursLabel.setText("{:.0f}".format(abs(self.ElapseHours.total_seconds() / 60**2)) + 'h')
                                self.ClockOutButton.setEnabled(True)
                            else:
                                print('签退操作失败')
                                self.ClockOutButton.setEnabled(True)

项目目录结构

在这里插入图片描述

后记

因为本系统没有进行人脸训练建立模型,系统误识别率较高,安全性较低
系统优化较差,摄像头捕捉帧数较低(8-9),后台占有高,CPU利用率较高
数据保存CSV格式,安全性较低

正式版改进

1.加入Tensorflow深度学习,提高系统人脸识别安全性与准确性
2.加入Mysql数据库,对签到数据进行更安全保护,不易被修改
3.美化优化UI设计

项目下载

IOT人脸识别签到系统测试版V0.99

到此这篇关于Python+OpenCV人脸识别签到考勤系统实现(新手入门)的文章就介绍到这了,更多相关Python OpenCV人脸识别签到内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python+OpenCV人脸识别签到考勤系统实现(附demo)

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

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

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

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

下载Word文档
猜你喜欢
  • Python+OpenCV人脸识别签到考勤系统实现(附demo)
    目录前言项目效果图项目需要的环境编译器代码部分后记项目下载前言 本项目为IOT实验室人员签到考勤设计,系统实现功能:1.人员人脸识别并完成签到/签退2.考勤时间计算3.保存考勤数据为...
    99+
    2022-11-12
  • 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人脸识别
  • 基于opencv和pillow实现人脸识别系统(附demo)
    目录一。人脸检测和数据收集二.训练识别器三.人脸识别和显示本文不涉及分类器、训练识别器等算法原理,仅包含对其应用(未来我也会写自己对机器学习算法原理的一些观点和了解) 首先我们需要知...
    99+
    2022-11-12
  • 基于Python搭建人脸识别考勤系统
    目录介绍人脸识别的实际应用构建人脸识别系统的步骤安装库导入库加载图像查找人脸位置并绘制边界框为人脸识别训练图像构建人脸识别系统人脸识别系统面临的挑战结论介绍 在本文中,你将学习如何使...
    99+
    2022-11-12
  • Python如何搭建人脸识别考勤系统
    这篇文章给大家分享的是有关Python如何搭建人脸识别考勤系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。人脸识别的实际应用人脸识别目前正被用于让世界更安全、更智能、更方便。有几个用例:寻找失踪人员零售犯罪安全...
    99+
    2023-06-22
  • Python如何实现人脸识别系统
    小编给大家分享一下Python如何实现人脸识别系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基本原理人脸识别和目标检测这些还不太一样,比如大家传统的训练一个目...
    99+
    2023-06-26
  • 基于opencv和pillow怎么实现人脸识别系统
    这篇文章主要讲解了“基于opencv和pillow怎么实现人脸识别系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于opencv和pillow怎么实现人脸识别系统”吧!本文不涉及分类器、...
    99+
    2023-06-21
  • python实现的人脸识别打卡系统
    目录项目地址:简介使用主要代码项目地址: https://github.com/king-xw/Face_Recogntion 简介 本仓库是使用python编写的一个简单的人脸识别考勤打卡系统 主要功能有录入人脸信...
    99+
    2022-06-02
    python 人脸识别 python 打卡系统
  • 基于Java(SpringBoot框架)毕业设计作品成品(28)AI毕业设计人脸识别考勤签到系统设计与实现
    博主介绍:《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题...
    99+
    2023-10-20
    AI毕业设计 人脸识别考勤签到系统 毕设 毕业设计 计算机毕业设计
  • 基于Python实现简单的人脸识别系统
    目录前言基本原理代码实现创建虚拟环境安装必要的库前言 最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完...
    99+
    2022-11-12
  • 怎么使用Python实现人脸离线识别系统
    本篇内容介绍了“怎么使用Python实现人脸离线识别系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先看看现在的研究现状。如上的发展趋势...
    99+
    2023-07-06
  • 使用python怎么实现一个人脸识别打卡系统
    使用python怎么实现一个人脸识别打卡系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作