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

article/2025/10/8 5:46:41

目录

一、项目简介

二、功能展示

1.人脸识别功能测试

2.识别并录入人脸及个人信息

3.数据库保存信息

 4.考勤打卡

三、环境安装实例

1.下载python对应版本的dlib

2.安装opencv-python

3.安装face_recognition

 4.安装pyqt5

5.安装mysqlclient

四、需要源码私信并call邮箱lij867967@gmail.com


一、项目简介

本项目使用编程语言Python3.8,anaconda,开发工具pycharm,数据库MySQL5.7。

技术应用:开源计算机视觉库opencv-python,开源人脸识别库face_recognition,使用PyQt5制作人脸识别以及考勤界面,dlib人脸检测技术,以及MySQLdb连接数据库。

功能介绍:

        第一步:录入,进入录入界面。调用摄像头检测识别人脸、输入姓名学号,人脸照片保存在faces文件夹中,姓名学号保存在数据库中。

        第二步:考勤,进入考勤界面。调用摄像头进行人脸识别,摄像头识别出人脸和人脸对应的名字。


二、功能展示

1.人脸识别功能测试

这是从网上随便找了一张图片识别静态人脸,成功。

调用摄像头识别动态人脸,成功

上述功能代码如下:

def a1():#加载图片img=face_recognition.load_image_file("1.jpeg")#检测脸部位置pos=face_recognition.face_locations(img)print("位置top,right,bottom,left",pos)for i in range(len(pos)):rect=pos[i]#绘制矩形cv2.rectangle(img,(rect[3],rect[0]),(rect[1],rect[2]),(0,0,220),2)#显示窗口cv2.imshow("",img)cv2.waitKey(0)
def a2():vd=cv2.VideoCapture(0)while True:#读取摄像头数据流ok,frame=vd.read()#矩阵子集facearea=frame[:,:,::-1]pos=face_recognition.face_locations(facearea)for(top,right,bottom,left) in pos:cv2.rectangle(frame,(left,top),(right,bottom),(0,200,0),2)cv2.imshow("",frame)cv2.waitKey(1)vd.release()cv2.destroyAllWindows()

2.识别并录入人脸及个人信息

此时人脸已经录入faces文件中,点击确定即可填写个人信息。

填写好信息,点击保存,信息即保存到数据库。

此时刚刚输入的账号和姓名已经保存到faces文件中,如下

(挡住了一点,但是能看到)

功能代码如下:

class LuruApp(UI_FaceRec):def __init__(self):super().__init__()self.running = Trueself.btn.setEnabled(False)self.face_encode = Noneself.open()self.face_img = Noneself.face_img_encode = ""def open(self):frame = np.zeros((500, 600, 3), np.uint8)img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(img)font = ImageFont.truetype("simkai.ttf", 40, encoding="utf-8")draw.text((200, 200), "请正视摄像头", (200, 30, 40), font=font)frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_BGR2RGB)frame = cv2.resize(frame, (self.img.width() - 10, self.img.height() - 10))h, w1, d = frame.shape# 从内存创建图像frame = QImage(frame.data, w1, h, w1 * d, QImage.Format_RGB888)self.img.setPixmap(QPixmap.fromImage(frame))# 开启子线程self.thread = Thread(target=self.doLuru)self.thread.start()def doLuru(self):fbl = FaceBoxesLocation()msg = ""self.cap = cv2.VideoCapture(0)# if self.cap.isOpened():#   ok, frame = self.cap.read()while self.running:ok, frame = self.cap.read()frame = cv2.flip(frame, 1)rawFrame = frame.copy()# 脸部区域face_pos = fbl.face_location(frame).astype(int)if len(face_pos) == 0:msg = "没有人脸"elif len(face_pos) > 1:msg = "请一个一个来!"else:msg = ""face_mark = face_recog.face_landmarks(frame, face_pos)# 脸部特征new_face_encode = face_recog.face_encodings(frame, face_pos)[0]if self.face_encode is None:self.face_encode = new_face_encodex1, y1, x2, y2 = face_pos[0]self.face_img = frame[y1:y2, x1:x2]print(self.face_img)self.face_img_encode = self.face_encode.tolist()# else:#    face_distance = face_recog.face_distance(self.face_encode[np.newaxis], new_face_encode)[0]#   if face_distance < 0.5:# x1, y1, x2, y2 = face_pos[0]# self.face_img = frame[y1:y2, x1:x2]# print(self.face_img)# self.face_img_encode = self.face_encode.tolist()img = Image.fromarray(cv2.cvtColor(rawFrame, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(img)for x1, y1, x2, y2 in face_pos:draw.rectangle([(x1, y1), (x2, y2)], outline=(200, 30, 40), width=2)# 绘制五官if face_mark is not None:for x, y in face_mark[0]:draw.point((x, y), (20, 250, 25))font = ImageFont.truetype("simkai.ttf", 40, encoding="utf-8")draw.text((200, 200), msg, (200, 30, 40), font=font)frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_BGR2RGB)frame = cv2.resize(frame, (self.img.width() - 10, self.img.height() - 10))h, w1, d = frame.shape# 从内存创建图像frame = QImage(frame.data, w1, h, w1 * d, QImage.Format_RGB888)self.img.setPixmap(QPixmap.fromImage(frame))self.running = Falseroot = tkinter.Tk()root.withdraw()tkinter.messagebox.showinfo('系统提示', '人脸已经录入,请填写个人信息')self.btn.setEnabled(True)self.cap.release()

3.数据库保存信息

我使用的数据库可视化工具是Navicat12 for MySQL(也可以不用,mysql基本命令知道的话直接管理员cmd也可)

 4.考勤打卡

运行如下,此时摄像头一直在运行,绿色框框始终识别你的人脸(跟随你移动)

点击“请开始考勤”,开始考勤时间会直接显示在界面上

 点击“请结束考勤”,结束考勤时间会存入数据库

 功能代码如下:

class AttendanceApp(UI_FaceAttend):def __init__(self):super().__init__()# 摄像头开启开关self.running = Trueself.startattend = False# 摄像头看到的人的名字self.vnames = []# 存储学号+姓名+打卡时间self.ats = []self.open()# 打开摄像头def open(self):frame = np.zeros((500, 600, 3), np.uint8)# 灰化img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(img)font = ImageFont.truetype("simkai.ttf", 40, encoding="utf-8")draw.text((200, 200), "准备考勤...", (200, 30, 40), font=font)frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_BGR2RGB)# 调整图像大小frame = cv2.resize(frame, (self.video.width(), self.video.height()))h, w, d = frame.shape# 从内存创建图像frame = QImage(frame.data, w, h, w * d, QImage.Format_RGB888)self.video.setPixmap(QPixmap.fromImage(frame))# # 开启子线程self.thread = Thread(target=self.doAttend)self.thread.start()def doAttend(self):# 已录入的头像luruimgs = []# 头像对应人员lurunames = []path = "..\\faces"# 遍历目录下的所有文件,得到所有文件名字for root, dirs, files in os.walk(path):for file in files:filename = os.path.join(root, file)if file.endswith("jpg"):kimg = face_recognition.load_image_file(filename)# 把图像转为矩阵kimg_encoding = face_recognition.face_encodings(kimg)if len(kimg_encoding) > 0:firstencoder = kimg_encoding[0]luruimgs.append(firstencoder)name = file.split(".")[0]xuehao = filename.split("\\")[-2]# 格式:学号,姓名lurunames.append(xuehao + "," + name)# print("--",lurunames)self.vcap = cv2.VideoCapture(0)while self.running:ok, frame = self.vcap.read()rgbimg = frame[:, :, ::-1]# 检测人脸v_face_pos = face_recognition.face_locations(rgbimg)# 人脸编码生成矩阵v_face_encoding = face_recognition.face_encodings(rgbimg, v_face_pos)for face in v_face_encoding:# 比较摄像头人脸和已录入的人脸matcher = face_recognition.compare_faces(luruimgs, face, 0.6)# 距离face_dist = face_recognition.face_distance(luruimgs, face)# 取出最短距离small = np.argmin(face_dist)if matcher[small]:facename = lurunames[small]# 避免重复添加if facename not in self.vnames:self.vnames.append(facename)self.ats.append(facename + "," + str(datetime.now()))# print(facename)# 合并数组templist = zip(v_face_pos, self.vnames)# 把摄像头看到的所有人的名字显示在图像区for (top, right, bottom, left), name in templist:cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 30), 2)cv2.rectangle(frame, (left, bottom - 30), (right, bottom), (20, 20, 255), 2)img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(img)font = ImageFont.truetype("simkai.ttf", 30, encoding="utf-8")# 显示人名draw.text((left + 20, bottom - 30), name.split(",")[1], (20, 20, 255), font=font)frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_BGR2RGB)self.showHead(frame)# 点击开始打卡按钮if self.startattend:self.fillData()self.vcap.release()

三、环境安装实例

Anaconda!真的好用!

1.下载python对应版本的dlib

你想要的dlib版本这里都有

然后pip install dlib -........whl(install后面为你下载的dlib的文件名)

pip install Cmake

2.安装opencv-python

pip install opencv-python

3.安装face_recognition

 pip install face_recognition

 4.安装pyqt5

pip install pyqt5

5.安装mysqlclient

pip install mysqlclient

四、需要源码私信并call邮箱lij867967@gmail.com

至此,结束!

小猿写的第一篇博客,写的不好还请担待


http://chatgpt.dhexx.cn/article/TakJmLq9.shtml

相关文章

基于OpenCV的人脸识别考勤系统

考勤系统设计 学生上课考勤系统最初的方式是采用的人工纸质点名,目前仍旧有一部分学校依旧采用此种方法点名,这种方法也一直是被认为最有效的签到点名方式。但由于课程繁多加上学生人数众多, 代替点名现象普遍存在, 而且传统的现场点名签到方式费时费力, 直接影响到授课质量…

手把手教你:人脸识别考勤系统

系列文章 手把手教你&#xff1a;人脸识别考勤系统 本文为系列第一篇 文章目录 系列文章项目简介一、项目展示二、环境需求环境安装实例 三、功能模块介绍1.人脸库图像2.构建人脸库3.启动人脸识别功能 完整代码地址 项目简介 本文主要介绍如何使用python搭建&#xff1a;一个…

LabVIEW入门与实战开发32例

链接&#xff1a;https://pan.baidu.com/s/1FqRL1loyDS-YT4wzIdRg2A 提取码&#xff1a;xe7y

LabView学习

一、基础篇 1、Labview是一种程序开发环境&#xff0c;由美国国家仪器&#xff08;NI&#xff09;公司研制开发。 2、NI-VISA(Virtual Instrument Software Architec-ture&#xff0c;以下简称为“VISA”)是美国国家仪器NI(NationalInstrument)公司开发的一种用来与各种仪器总…

基于实践的LabVIEW零基础入门视频教程

原文地址::http://blog.eeecontrol.com/LabVIEW1/ 《基于实践的LabVIEW零基础入门视频教程》 资料不在多,而在于精,资料太多,反而会迷失方向&#xff0c;学习最怕的就是打乱仗,选择对的方向,比努力更重要,这也是本人的亲身经历!《基于实践的LabVIEW零基础入门视频教程》方向明确…

Labview简介

公司&#xff1a;美国国家仪器&#xff08;成立于1976年&#xff09; 初始发布时间&#xff1a;1986年 底层语言&#xff1a;C、C 操作系统&#xff1a;windows、macOS、linux 运用场景&#xff1a;数据采集、仪器控制、自动化、分析与信号处理、工业控制、嵌入式和系统设计…

LabVIEW学习笔记(三)——程序结构

前言&#xff1a; 任何计算机语言都离不开程序结构&#xff0c;LabVIEW 作为一种图形化的高级程序幵发语言也不例外。LabVIEW 中的程序结构包括if-else循环&#xff0c;while循环结构&#xff0c;使能结构&#xff0c;公式节点和数学脚本节点等&#xff0c; 因此通过LabVIEW可以…

LabVIEW使用入门指导

LabVIEW是一种图像化设计工具&#xff0c;它的“代码”格式为*.vi(Virtual Instrument)&#xff0c;分为前端面板和后端面板&#xff0c;前端面板又可以称之为顶层设计&#xff0c;是用户界面&#xff0c;后端设计师代码以及元器件试图。 前端面板 前端面板中&#xff0c;用户…

labview精华资料集合光盘

最后的详细内容如下&#xff1a; 引用 |_Windows颜色拾取器 |_ActiveX举例_写Excel |_打开其它文件或者程序 |_当前文件夹查找指定文件 |_动画显示&#xff08;奔跑的马&#xff09; |_ActiveX举例_演示PPT |_获取当前程序路径及名称并判断状态是EXE等 |_简单暂停 |_前面板对象…

学习labview

公司&#xff1a;美国国家仪器&#xff08;成立于1976年&#xff09; 初始发布时间&#xff1a;1986年 底层语言&#xff1a;C、C 操作系统&#xff1a;windows、macOS、linux 运用场景&#xff1a;数据采集、仪器控制、自动化、分析与信号处理、工业控制、嵌入式和系统设计…

LabVIEW入门学习经验分享

在自动化行业&#xff0c;你如果想开发功能强大且开发周期不要太长的上位机软件。首先考虑labview&#xff0c;它可以调用c、matlab等编程语言的库文件&#xff0c;实现跨语言编程&#xff0c;从而满足你更复杂的控制&#xff0c;这是它的优势&#xff0c;国内外很多的航空航天…

labview入门到出家5(进阶篇)——程序调试以及labview函数库的运用

跟了前面几章的操作流程&#xff0c;相信大家对labview有了一定的认识。其实只要了解了labview的编程思路&#xff0c;再熟悉地运用各个变量&#xff0c;函数以及属性&#xff0c;那么我们就可以打开labview的大门了。跟其他编程语言一样&#xff0c;好的编程思维再加上一个好用…

Labview2018学习之三:LabVIEW编程

LabVIEW是图形化编辑软件&#xff0c;使用LabVIEW编程的基本流程的步骤是&#xff1a; 1&#xff09;VI的创建&#xff1b; 2&#xff09;编辑VI&#xff0c;运行和调试&#xff1b; 程序框图&#xff1a;框图是实际可执行的代码&#xff0c;通过将完成特定功能的对象连接在一…

【LabVIEW】LabVIEW练习

产生100个1-99随机整数数,求其和以及平均值 用for循环产生4行100列的二维数组,数组成员如下: 1,2,3…100; 100,99,98…1; 6,7,8…105; 105,104,103…6; 从这个数组中提取2行50列的二维数组,数组成员如下: 50,49,48…1; 56,57,58 (105) 将这2个数组用数组显示件显示在前面板. …

学习LabVIEW应看的几本书

学习LabVIEW应看的几本书 前几天&#xff0c;看了“花开不谢”的博客&#xff0c;才知道NI在中国落户已经十年了&#xff0c;推算过来大概也就是1998年前后在中国落的户&#xff0c;那时中国的改革开放已经二十多年。NI在中国推广所遇到的最大难题&#xff0c;我猜想应该语言是…

专题一:Labview表格控件 及 应用(一)

专题一&#xff1a;Labview表格控件 及 应用&#xff08;一&#xff09; 最近一段时间&#xff0c;做试验台上位机编程&#xff0c;老是用到表格控件&#xff0c;这几天抽时间专门写一个表格控件的专题。有用到的朋友可以参考一下。 总结教训&#xff1a;尽量把文章控制在5分钟…

如何系统学习LabVIEW?

目录 1、LabVIEW开发技巧 2、LabVIEW仪器控制 3、LabVIEW和单片机&#xff08;Arduino&#xff09; 4、LabVIEW工业图像处理与机器视觉实战 从2021年4月至2022年6月&#xff0c;1年零2个月的时间&#xff0c;终于把LabVIEW工控系列文章更新完了~ LabVIEW工控系列文章包含4部…

专题一:Labview表格控件 及 应用(二)

标题专题一&#xff1a;Labview表格控件 及 应用&#xff08;二&#xff09; 最近一段时间&#xff0c;做试验台上位机编程&#xff0c;老是用到表格控件&#xff0c;这几天抽时间专门写一个表格控件的专题。有用到的朋友可以参考一下。上一讲介绍了表格控件&#xff0c;认识了…

Labview(1)使用小技巧

1.按这个连续运行的按钮即使单个控件就可以使程序运行起来&#xff0c;不用循环&#xff1b; 2.注意这里学到了条件结构里的条件是一点都不可以错&#xff0c;加个空格也算字符&#xff0c;这个要注意&#xff0c;否则会出错&#xff1b; 3.选中某个控件&#xff0c;按住Ctrl键…

labview入门

labview为图形化编程&#xff0c;一个文件&#xff08;VI&#xff09;分为前面板和程序框图。前面板即为人机交互页面&#xff0c;程序框图则是实现的程序。 前面板认识 在灰色部分右键显示控件模块 查看—》工具悬版 控件上右键可以开启快捷菜单设置。 程序框图 包括&a…