Python+OpenCV人脸识别签到考勤系统(新手入门)

  • 前言
    • 项目效果图
  • 项目需要的环境
    • 编译器
      • 辅助开发QT-designer
        • 项目配置
  • 代码部分
    • 核心代码
      • 项目目录结构
  • 后记
    • 正式版改进
  • 项目下载

前言

本项目为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 = Noneself.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 = 2Time1 = 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"    #未知人脸识别为unknownbest_match_index = np.argmin(face_dis)if match[best_match_index]:name = class_names[best_match_index].upper()y1, x2, y2, x1 = faceLoccv2.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人脸识别签到考勤系统(新手入门)相关推荐

  1. Python+OpenCV人脸识别签到考勤系统

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

  2. 基于Python的人脸识别课堂考勤系统(毕设)

    一个菜鸟搞毕业设计的过程分享,可能对迷茫的你起到一点点作用! 序言 在着手开发项目之前我们一定要对系统进行一个初步的规划,比如系统可以实现什么功能,是否需要开发GUI页面(大部分导师都会让你搞一个,仅 ...

  3. Python人脸识别签到考勤系统

    前言 本项目为IOT实验室人员签到考勤设计,系统实现功能: 人员人脸识别并完成签到/签退 考勤时间计算 保存考勤数据为CSV格式(Excel表格) PS:本系统2D人脸识别,节约了繁琐的人脸识别训练部 ...

  4. Python基于人脸识别的考勤系统(附源码)

    原文链接:https://blog.csdn.net/weixin_39653948/article/details/89291751 1. 项目简介 本项目使用Python3.6编写,Qt Desi ...

  5. 人脸识别签到考勤系统毕业设计,人脸识别考勤系统设计与实现,人脸识别系统论文毕设作品参考

    功能清单 [管理员功能] 录入员工:录入员工账号,密码,姓名,上传头像等资料 员工列表:显示已经录入的所有员工列表 员工管理:支持修改员工信息和删除操作 员工人脸打卡列表:显示所有员工的打卡信息列表 ...

  6. face++与python实现人脸识别签到(考勤)功能

    项目实现利用face++开发一个课堂签到的软件,实现面向摄像头即可完成记录学号.姓名和时间的签到工作. 项目架构 项目使用场景 代码: 流程代码,主文件 #!usr/bin/ # -*- coding ...

  7. python考勤管理系统_python基础教程:face++与python实现人脸识别签到(考勤)功能...

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一 ...

  8. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)

    目录 <Python与硬件项目案例>- 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇) 概述 参考代码 <Python与硬件项目案例>- 基于Python与 ...

  9. python如何做考勤_python基础教程:face++与python实现人脸识别签到(考勤)功能

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一 ...

最新文章

  1. linux 内网共享文件夹_在Linux下访问Windows共享文件夹
  2. Kubernetes理论基础
  3. 查看电脑电池损耗的命令
  4. 【Geek软技能】程序员,为什么写不好一份简历?
  5. python bp神经网络 异或_基于python的BP神经网络及异或实现过程解析
  6. 物联网项目(三)平台架构
  7. java lang jar_在运行时,Java jar返回java.lang.NoClassDefFoundError
  8. java 实现nfa的化简_NFA的实现
  9. python的重点和难点_Python - Python的基础知识结构,学习方法、难点和重点
  10. 罗永浩重新定义直播带货
  11. Objective C中数组排序几种情况的总结
  12. 软件一定要联网安装,只有内网就干瞪眼
  13. Aerial为苹果而生,一款炫酷的Mac屏幕保护程序
  14. (转)CentOS系统启动流程图文详解
  15. 解决打印机后台程序服务没有运行
  16. 计算机科学技术学院迎新晚会主题,我校计算机科学与技术学院举行迎新晚会
  17. UART 通信 协议 (二)
  18. 第一章 大数据发展数据与鲲鹏大数据
  19. 【 C++ 】红黑树
  20. Java 操作excel 插入删除列,插入删除图片

热门文章

  1. QLCDNumber制作的超简单计时器,按下空格键暂停。
  2. storm风暴英雄 tempo_迎接《风暴英雄》世界锦标赛季中大乱斗
  3. 非常实用,华为、新华三、锐捷交换机的配置命令分享
  4. 电磁场仿真试验【Matlab】电磁波极化仿真
  5. Gi常用命令大全整理
  6. C# 修改本地以太网ip地址
  7. 【FreeRTOS】12 任务通知——更省资源的同步方式
  8. 动物视觉感知进化的一些看法
  9. IT行业的5个热门岗位,你了解吗?
  10. 了解原型设计工具:墨刀