前言

本项目为IOT实验室人员签到考勤设计,系统实现功能:

  • 人员人脸识别并完成签到/签退

  • 考勤时间计算

  • 保存考勤数据为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格式,安全性较低

正式版改进

  • 加入TensorFlow深度学习,提高系统人脸识别安全性与准确性

  • 加入MySQL数据库,对签到数据进行更安全保护,不易被修改

  • 美化优化UI设计

源码在公众号Python小二后台回复考勤签到获取~

推荐阅读  点击标题可跳转

  • Python学习手册

  • Pandas学习大礼包

  • 100+Python爬虫项目

  • Python数据分析入门手册

  • 浙江大学内部Python教程

  • 240个Python练习案例附源码

  • 70个Python经典实用练手项目

  • 整理了30款Python小游戏附源码

点分享点点赞点在看

Python人脸识别签到考勤系统相关推荐

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

    Python+OpenCV人脸识别签到考勤系统(新手入门) 前言 项目效果图 项目需要的环境 编译器 辅助开发QT-designer 项目配置 代码部分 核心代码 项目目录结构 后记 正式版改进 项目 ...

  2. Python人脸识别智能考勤系统 (供源码,附报告)(可答疑,可调试)

    目录 一.项目简介 二.功能展示 1.人脸识别功能测试 2.识别并录入人脸及个人信息 3.数据库保存信息 4.考勤打卡 三.环境安装实例 1.下载python对应版本的dlib 2.安装opencv- ...

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

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

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

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

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

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

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

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

  7. 人脸识别学生考勤系统【2】--登录

    人脸识别学生考勤系统的登录界面设计如上图所示,关键部分为圈红色的位置. 用户名,密码-登录 登录成功目前没有写跳转页面,只是在终端输出"success",登录失败会在忘记密码按钮的 ...

  8. 基于人脸识别的考勤系统

    推荐大家个链接:https://wenku.baidu.com/view/871e4bb7974bcf84b9d528ea81c758f5f71f2952?fr=uc 这是一个基于人脸识别的考勤系统的 ...

  9. 基于人脸识别的考勤系统:Python3 + Qt5 + OpenCV3 + FaceNet + MySQL

    Contributor : datamonday Github Repo : https://github.com/datamonday/Face-Recognition-Class-Attendan ...

最新文章

  1. .NET零基础入门06:面向对象入门
  2. mac 思科 链路聚合_交换技术链路聚合配置
  3. hdu-2209 翻纸牌游戏
  4. .Net Framwork概述
  5. express+vue+mongodb+session 实现注册登录
  6. Java反射————Method根据方法名称字符串调用方法
  7. 87个常用电脑快捷键大全,别让速度限制你的工资,建议收藏一份!
  8. 【es】Node与NodeEnvironment的实例化
  9. 计算机中级职称考试答题卡,2016年软考网络工程师考试填涂答题卡(纸)须知...
  10. C++封装继承多态理解
  11. creo绘图属性模板_creo完整制作工程图模板.docx
  12. 制作多个exe顺序安装程序(打包程序)
  13. 当我跨过沉沦的一切,向着永恒开战的时候,你是我的军旗。——王小波
  14. Windows API串口编程详解
  15. 【机器学习】关联规则挖掘算法 + 三大案例实战 + Apriori算法 + Python代码实现
  16. 二分查找例题(二)洛谷P1163
  17. 阿里天蝎计划 服务器部署效率提升10倍
  18. docker 搭建响应式个人博客
  19. 程序设计与c语言笔记(一)
  20. WIN32虚拟STM32F7 LCD屏幕(WIN32虚拟单片机)

热门文章

  1. Cesium与STK中的天空盒子(skybox)
  2. 干支纪年法简便算法_不用万年历快速推算日柱干支法
  3. 唠唠 U盘格式 (Normal:FAT32 NTFS exFAT)以及U盘格式化选什么格式好???
  4. python贷款_python算账,贷款表
  5. centOS域名访问问题,/etc/hosts详解
  6. cheat sheet 打包打印版大全python R machine learning
  7. 1004.【一维数组】【入门】输出奇数和偶数
  8. 用STRAIGHT_JOIN优化mysql的执行速度
  9. python selenium学习之新浪微博
  10. 【每日一题】蜗牛爬井问题