目录

一、项目简介

二、功能展示

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

至此,结束!

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

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

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

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

  2. 基于GEC6818的智能家居系统[完整源码/项目报告/笔记分享]

    基于GEC6818的智能家居系统 项目目标: 使用GEC6818(ARM开发板)以及Linux操作系统来设计一个可以实现动感相册/监控/音乐播放器功能且UI友好,人机交互性高的智能家居系统. 代码编写 ...

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

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

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

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

  5. SpringCloud+MySQL+Vue实现人脸识别智能考勤管理系统

    一.前言 学生的课堂考勤是高校教务管理工作中一项非常重要的内容.随着学生群体数与日俱增,部分高校采用了刷卡签到.指纹验证以及有约束性的人脸认证等考勤方式,但由于这些方式都存在显露的弊端,比如排队等候. ...

  6. 基于人脸识别的考勤系统开发

    在科学技术和经济快速发展的今天,企业规模不断扩大,考勤管理对企业的发展也变得相当重要.要更好地管理企业,一个简单.快速和有效的考勤系统必不可少的.基于实时图像处理的人脸识别是物联网技术应用的重要领域之 ...

  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. 国王放米粒的C语言程序,云南大学软件学院C语言实验米粒问题.doc
  2. 【Android】launcher启动参数
  3. SQL server 统计分组经计
  4. Revit Family API 找到实体某一方向上的面。
  5. Tensorflow之 CNN卷积神经网络的MNIST手写数字识别
  6. 用数据说话,Go 所有字符串拼接方式里哪种才是最稳定高效的?
  7. php zblog 侧边栏样式_免费ZBLOG双栏图文自媒体主题 支持自定义侧边模块
  8. Spring 5.X+CXF 3.X 开发SOAP Web Service Client客户端实例
  9. 腾讯云的云数据库MYSQL配置
  10. SpringBoot之kafka安装windows
  11. 【转】我眼中的自动化测试框架设计要点
  12. 【译】BMP格式与JPG格式之间的区别
  13. C#常量——const和readonly(2)
  14. GoldenDict和主流英语词典产品
  15. java实现手机扫描二维码下载功能
  16. Python开源Devops定时任务管理系统(含定时调用接口、定时ssh远程执行命令)
  17. 程序员的进化 - 在拉勾1024程序员节上的演讲
  18. 如何实现自适应页面 (响应式布局)
  19. vlc-android源码git下载
  20. 手动进行释放内存的API

热门文章

  1. FIX协议介绍与QuickFIX使用入门(上)
  2. orangepi——学习python02
  3. 酒店微信直播引流获客方案
  4. A4988驱动步进电机
  5. swift实现饭否应用客户端源码
  6. postgresql点云las_云数据库 PostgreSQL-最先进的开源数据库-关系型数据库-价格-购买 - 阿里云...
  7. python高维数组的提取
  8. 《图解密码技术》——读书笔记
  9. 阿里java面试复盘 | 三面解说(已通过)
  10. Html5 移动游戏开发