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

系列文章

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

本文为系列第一篇

@

项目简介

本文主要介绍如何使用python搭建:一个基于FaceNet(TensorFlow版)和PyQt5的人脸识别的考勤系统。

博主也参考过网上其他博主介绍FaceNet的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个识别系统即可。

本文只会告诉你如何快速搭建一个人脸识别的考勤系统并运行,原理的东西可以参考其他博主

也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。

如果您有以上想法,那就找对地方了!

提示:以下是本篇文章正文内容

一、项目展示

手把手教你:人脸识别考勤系统
手把手教你:人脸识别考勤系统
项目演示可以参考我在B站发的视频
手把手教你搭建:人脸识别考勤系统

二、环境需求

因为本项目基于TensorFlow因此需要以下环境:

  • tensorflow==1.7
  • scipy
  • scikit-learn
  • opencv-python
  • h5py
  • matplotlib
  • Pillow
  • requests
  • psutil
  • pyqt5

环境安装实例

环境都可以通过pip进行安装。如果只是想要功能跑起来,这边建议tensorflow安装cpu版的。

如果没使用过pycharm通过pip安装包的同学可以参考如下:

手把手教你:人脸识别考勤系统
点开”终端”,然后通过pip进行安装tensorflow,其他环境包也可以通过上面的方法安装。

三、功能模块介绍

1.人脸库图像

人脸库图像放在项目中:data/my_data/”人名”/”图片名”.jpg。

我这里只用了4个明星的人脸图像,可以根据你自己需要识别的人脸构建你自己的人脸库。

如下:

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

2.构建人脸库

将图片放好后

执行:src/align/align_dataset_mtcnn.py文件
和:src/classifier.py文件

手把手教你:人脸识别考勤系统
执行上述2个文件完成后。
在:data/my_data_160文件夹中会生成自己的人脸库图像。
在:20170512-110547/my_classifier.pkl中会生成自己的人脸库图像分类。

3.启动人脸识别功能

确保上述文件执行完成并成功后。

执行:contributed/my_view.py,即可启动上面的人脸识别界面。

下面附一部分界面功能代码:

class GUI(QtWidgets.QWidget):

    def __init__(self):

        # 初始化————init__

        super().__init__()

        # 实例化人脸识别线程
        self.thread = Thread()
        self.initGUI()
        # 定义消息链接
        self.thread.signal.connect(self.show_success_box)

    def initGUI(self):

        # 设置窗口大小

        self.resize(500, 600)

        # 设置窗口位置(下面配置的是居于屏幕中间)

        qr = self.frameGeometry()

        cp = QtWidgets.QDesktopWidget().availableGeometry().center()

        qr.moveCenter(cp)

        self.move(qr.topLeft())

        # 设置窗口标题和图标

        self.setWindowTitle('人脸识别门禁系统')

        self.setWindowIcon(QtGui.QIcon('../data/images/icon.png'))

        # 设置窗口提示

        self.setToolTip('窗口提示')

        # 设置label信息

        self.label = QtWidgets.QLabel(self)

        self.label.setGeometry(QtCore.QRect(150, 50, 200, 100))

        self.label.setText('请点击下方按钮进行人脸认证!')
        # 设置自动换行
        self.label.setWordWrap(True)
        # 设置文字居中
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName('label')
        self.label.setStyleSheet("font: 75 18pt \"微软雅黑\";"
                                 "color: rgb(0, 0, 0);")
        # 设置label提示
        self.label.setToolTip('认证')

        '''
        设置打卡按钮
        '''
        self.btn = QtWidgets.QPushButton('开始认证!', self)
        self.btn.resize(200, 180)
        self.btn.move(150, 150)
        # 设置按钮样式
        self.btn.setStyleSheet("background-color: rgb(130, 60, 140);"
                               "border-color: rgb(255, 255, 255);"
                               "font: 75 24pt \"微软雅黑\";"
                               "color: rgb(255, 255, 255);")
        # 设置按钮提示
        self.btn.setToolTip('按钮提示')
        # 点击鼠标触发事件
        self.btn.clicked.connect(self.clickbtn)

        '''
        设置统计查看按钮
        '''
        self.btn_checked = QtWidgets.QPushButton('查看通过信息', self)
        self.btn_checked.resize(200, 50)
        self.btn_checked.move(150, 380)
        # 设置按钮样式
        self.btn_checked.setStyleSheet("background-color: rgb(130, 60, 140);"
                                       "border-color: rgb(255, 255, 255);"
                                       "font: 75 18pt \"微软雅黑\";"
                                       "color: rgb(255, 255, 255);")
        # 设置按钮提示
        self.btn_checked.setToolTip('按钮提示')
        # 点击鼠标触发事件
        self.btn_checked.clicked.connect(self.checked_show)

        '''
        设置统计查看按钮
        '''
        self.btn_file = QtWidgets.QPushButton('查看通过文件', self)
        self.btn_file.resize(200, 50)
        self.btn_file.move(150, 480)
        # 设置按钮样式
        self.btn_file.setStyleSheet("background-color: rgb(130, 60, 140);"
                                    "border-color: rgb(255, 255, 255);"
                                    "font: 75 18pt \"微软雅黑\";"
                                    "color: rgb(255, 255, 255);")
        # 设置按钮提示
        self.btn_file.setToolTip('按钮提示')
        # 点击鼠标触发事件
        self.btn_file.clicked.connect(self.csv_show)
        # 展示窗口
        self.show()

因为项目中启动人脸识别存在一定延迟,所以项目中还使用了多线程。

完整代码地址

感兴趣的同学可以下载完整代码,使用过程中如遇到任何问题可以私信我,我都会一一解答。

【代码分享】手把手教你:人脸识别考勤系统

Original: https://www.cnblogs.com/dawudexiaowu/p/16110776.html
Author: 小屋打AI
Title: 手把手教你:人脸识别考勤系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715109/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 5.2.SpringBoot整合Kafka(开整)

    1、准备工作 pom配置: <dependency> <groupid>org.springframework.kafka</groupid> …

    技术杂谈 2023年7月24日
    083
  • 准备工作(一)—— 安装MySQL

    说明:大部分用户都是使用Windows,Linux文章后续发布。 一、下载MySQL MySQL官网:https://www.mysql.com 选择:DOWNLOADS->…

    技术杂谈 2023年6月22日
    0106
  • TestLink在线Excel用例转换xml

    项目功能 TestLink在线Excel用例转换xml将符合用例模板的Excel测试用例,转换成xml,用于导入TestLink进行用例管理。 使用方法 1、编写测试用例 2、打开…

    技术杂谈 2023年7月11日
    052
  • 重新学习数据库(1)

    单元概述 通过本章的学习能够了解MySQL结构查询语言的概念,掌握SELECT查询语句的基本语法,掌握SELECT查询语句中过滤条件的使用,掌握过滤条件中比较运算符和逻辑运算符的使…

    技术杂谈 2023年6月22日
    099
  • 【证券从业】金融基础知识-第六章 证券投资基金01

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-10 16:38 陈景中 阅读…

    技术杂谈 2023年7月10日
    074
  • 【转】重新理解微服务之它还那么纯粹吗?

    原文:https://www.cnblogs.com/skychen1218/p/16406274.html Original: https://www.cnblogs.com/o…

    技术杂谈 2023年5月30日
    081
  • 质量问题不是不爆,时候未到

    没有质量,哪来效率,谈什么成本; 最近大半年,团队以极其曲折的方式,将一个支离破碎的应用从重构的边缘给拉了回来,最终项目回到了正常迭代的节奏中; 年初的时候,运营系统相关人员离职,…

    技术杂谈 2023年7月23日
    066
  • Kubernetes 中 PV 和 PVC 的状态变化

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    093
  • Vue el-date-picker 组件时间格式化方式

    官网地址:https://element.eleme.cn/#/zh-CN/component/date-picker value-format="yyyy-MM-dd&…

    技术杂谈 2023年7月25日
    061
  • Verilog的基本语法

    1.标识符 标识符:模块名、变量名、常量名 Verilog是大小写敏感的(a和A是不同的)标识符:任意一组字母、数字、$、_的组合标识符的第一个字母必须是字母或下划线书写标识符时应…

    技术杂谈 2023年6月1日
    075
  • 解决C#中ListView数据刷新时界面闪烁的问题

    通常往ListView不断写入数据时,会发现ListView上的数据存在抖动闪烁的问题。对于追求完美的强迫症晚期患者而言,这一点是无法容忍的。同时也带来不良的用户体验。 下面通过双…

    技术杂谈 2023年5月31日
    094
  • 模拟栈和模拟队列

    栈是一种数据结构,先进后出,只支持一端进行插入和弹出操作,可以用数组进行模拟实现,现在编程语言中都进行了封装,可以直接调用 插入:插入时就是栈顶指针指向的内存区域存放当前要插入的元…

    技术杂谈 2023年6月21日
    091
  • 迷宫问题详解(数据结构实验)

    实验项目 2: 栈结构及其应用 实验题目: 迷宫问题求解 实验内容: 一个迷宫可以看成是由 m × n 个房间组成的矩形,迷宫内部的每个房间有 4个方向,每个方向或者有障碍(如墙)…

    技术杂谈 2023年7月11日
    0121
  • python爬取百度图片

    首先通过 urllib获取网页的源码 获取下一页的url链接,当本页的图片链接获取完毕,再继续获取下一页的。使用Python正则表达式匹配需要的字段 获取每一页的图片链接,将之放入…

    技术杂谈 2023年7月25日
    061
  • typora使用

    一:typora、配置picgo+github安装以及配置 picgo 、Node.js和typora安装包见百度网盘链接: 参考的教程如下: 二:typora使用语法 Ctrl+…

    技术杂谈 2023年6月21日
    077
  • 百度飞桨数据处理API数据格式HWCCHW和PIL图像处理之间的关系

    使用百度飞桨 API 例如:Resize Normalize,处理数据的时候。 Resize:如果输入的图像是 PIL 读取的图像这个数据格式是 HWC ,Resize 就需要 H…

    技术杂谈 2023年7月23日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球