基于深度学习的人脸识别与人员信息管理软件【python源码+UI界面+功能源码详解】

news2024/10/7 14:25:33

人脸识别功能演示

在这里插入图片描述

摘要:人脸识别(Face Recognition)是基于人的脸部特征信息进行身份识别的一种生物识别技术,可以用来确认用户身份。本文详细介绍了人脸识别基本的实现原理,并且基于pythonpyqt开发了人脸识别与信息管理软件,主要实现了通过图片或者摄像头的方式进行人脸识别人员信息录入与管理以及人脸打卡信息管理等功能。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末。

目录

  • 人脸识别功能演示
  • 1. 前言
  • 2. 软件功能介绍及效果演示
    • 2.1 登录注册功能
    • 2.2 人脸信息录入功能
    • 2.3 人脸识别功能
    • 2.4 数据管理功能
    • 2.5 识别记录功能
  • 3. 人脸识别原理介绍
    • 3.1 基本原理
    • 3.2 核心功能代码实现
  • 【获取方式】
  • 结束语

点击跳转至文末《完整相关文件及源码》获取

---

1. 前言

人脸识别技术是一种生物识别技术,可以用来确认用户身份。人脸识别技术相比于传统的身份识别技术有很大的优势,主要体现在方便性上。传统的身份认证方式诸如:密码、PIN码、射频卡片、口令、指纹等,需要用户记住复杂密码或者携带身份认证钥匙。而密码、卡片均存在丢失泄露的风险,相比于人脸识别,交互性于安全性都不够高。人脸识别可以使用摄像头远距离非接触识别,相比于指纹免去了将手指按在识别区域的操作,可由摄像头自动识别。

目前人脸识别技术已经广泛应用于安全、监控、一般身份识别、考勤、走失儿童搜救等领域,对于提升身份认证的效率起到了重要的作用。而且目前还有更深入的人脸识别的研究正在进行,包括性别识别、年龄估计、心情估计等,更高水平和更高准确率的人脸识别技术对于城市安全和非接触式身份认证有巨大的作用。

博主根据人脸识别技术,基于python与Pyqt5开发了一款简洁的人脸识别与人员信息管理软件,可通过图片或者摄像头的方式进行人脸录入以及人员信息管理、人脸打卡等功能。

登录后的软件初始界面如下图所示:
在这里插入图片描述

2. 软件功能介绍及效果演示

软件主要功能包括以下几个部分:

  1. 登录注册模块;
  2. 人脸特征及人员信息录入模块:用于人员的人脸信息采集与信息录入;
  3. 人脸识别模块:识别人员是否已录入数据库,如已录入则显示人员信息,支持单人或多人同时识别;
  4. 人员已录入信息管理模块:对已录入的人员信息进行管理;
  5. 人脸识别记录模块:进行已录入的人员进行人脸识别的时间信息,可用于人员的打卡管理等。
    下面将详细介绍各个模块的基本功能:

2.1 登录注册功能

本软件提供了基础的登录注册功能,对于新用户需要先注册账号才可以进行登录。界面如下:
在这里插入图片描述

2.2 人脸信息录入功能

人脸信息录入功能主要是依据图片或者摄像头来进行人脸的特征采集以及人员相关信息的录入。
人脸采集提供了两种方式:一种方式是通过图片进行人脸采集,另一种方式是通过摄像头拍照的方式进行。
图片采集方式如下:
在这里插入图片描述
摄像头采集方式如下:先开启摄像头,人脸处于合适位置后,点击拍照按钮,采集成功后,点击关闭摄像头按钮即可。
在这里插入图片描述
人脸信息采集完成后,填写用户的基本信息,点击保存按钮就可以将信息保存至数据库中。保存后的人脸图片存放在data/user_imgs目录中,命名方式为用户ID_用户名字
在这里插入图片描述

2.3 人脸识别功能

通过图片或者摄像头的方式,将识别到的人脸与数据库中的人脸信息进行匹配,然后将匹配到的人员信息,显示在软件界面中,人脸识别也可以通过图片或者摄像头的方式进行匹配识别。
图片识别方式如下:(多人情况下,可通过下拉框查看每个人的信息)
在这里插入图片描述
摄像头识别方式:点击开启摄像头按钮,即可进行人脸识别,识别成功后,可点击关闭按钮,关闭摄像头。
在这里插入图片描述

2.4 数据管理功能

支持已录入人员信息数据的搜索,修改,删除等操作。
界面如下:
在这里插入图片描述
搜索功能:支持姓名与人员ID进行搜索;
在这里插入图片描述
修改功能:双击表格信息,修改信息后,然后点击修改按钮,再点击保存操作,才会将修改的信息更新至数据库;
在这里插入图片描述
删除功能:删除某个人员信息。操作方式—选中删除行,然后点击删除按钮,再点击保存操作按钮,即可将删除信息更新至数据库。
在这里插入图片描述
显示全部按钮用于显示全部已录入的用户信息。

2.5 识别记录功能

该功能用于记录已经进行人脸识别信息的人员识别记录,支持搜索、与记录删除功能。
界面如下:
在这里插入图片描述

3. 人脸识别原理介绍

3.1 基本原理

多数人脸识别都包含如下几个流程:人脸检测(Face Detection)、人脸对齐(Face Alignment)、人脸表示(Face Representation)和人脸匹配(Face Matching)。
流程图如下图所示:
在这里插入图片描述
【1】人脸检测 Face Detection:从输入的图像中检测到人脸区域,并返回人脸包围框的坐标。
【2】人脸对齐(人脸配准)Face Alignment:从提取出的人脸区域中检测到人脸特征点,并以特征点为依据对人脸进行归一化操作,使人脸区域的尺度和角度一致,方便特征提取与人脸匹配。人脸对齐的最终目的是在已知的人脸方框中定位人脸的精准形状,主要分为两大类:基于优化的方法和基于回归的方法。这里基于回归树的人脸对齐算法是Vahid Kazemi 和 Josephine Sullivan于CVPR2014年发表的人脸特征点识别方法,是一种基于回归树的人脸对齐方法,这种方法通过建立一个级联残差回归树(GBDT)来使人脸从当前形状一点点回归到真实形状。
【3】人脸表示Face Representation:从归一化的人脸区域中进行特征提取,得到特征向量,比如有的深度神经网络方法使用128个特征表示人脸,最理想的情况是不同的人的照片提取出的特征向量不一样,而同一人的不同照片中可以提取出相似的特征向量。

【4】人脸匹配 Face Mataching:将两幅图片计算出的特征向量进行对比,获得两幅照片的相似得分。根据相似得分,得分高的可判断为同一人,得分低的判断为不同人。

本软件人脸识别功能的实现主要是通过一款免费、开源、实时、离线的Python人脸识别库face_recognition来是实现,它是一款十分简洁的人脸识别库。
face_recognition是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。因此,安装face_recognition前需要安装dlib库。

face_recognition与dlib库安装的whl文件已经打包至资源文件中。

3.2 核心功能代码实现

基于上述人脸识别流程,我们通过Python的人脸识别库face_recognition来进行实现。首先导入所需的库:

import face_recognition

(1)载入图片,并识别出人脸矩形区域
使用face_recognition.face_locations函数实现人脸区域检测。

image = face_recognition.load_image_file("face.jpg")
face_locations = face_recognition.face_locations(image)
face_locations为人脸矩形区域的列表:每一个元素为一个矩形框列表信息---顺序为(顶部、右侧、底部、左侧)

人脸录入时,选择最大的一张人脸进行信息录入,实现函数如下:

def info_entry_face_detect(img):
    """
    人脸录入时的人脸检测,每次只录入一张人脸,取面积最大的一张人脸
    :param img:
    :return:
    """
    img = img.copy()
    face_locations = face_recognition.face_locations(img)
    max_area = 0
    location = [0,0,0,0]
    if len(face_locations) == 0:
        return img, None
    # 解析,取面积最大的一张人脸进行录入
    for top, right, bottom, left in face_locations:
        width = right - left
        height = bottom - top
        area = width * height
        if area > max_area:
            max_area = area
            location = [top, right, bottom, left]

    top, right, bottom, left = location
    cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3)
    return img, location

(2)对识别出的人脸区域进行对齐与编码
我们可以使用face_recognition.face_encodings函数对人脸区域进行编码。

face_encodings = face_recognition.face_encodings(img, location)

face_recognition.face_encodings函数会返回图片中每一张人脸的128维编码列表信息。
其中:img参数为识别的图像,location为图像中的人脸矩形框列表信息。
(3)人脸匹配

matches = face_recognition.compare_faces(known_encodings, face_encoding, tolerance=0.5)

face_recognition.compare_faces将人脸编码列表与候选编码进行比较,以查看它们是否匹配。
known_face_encodings – 已知人脸编码的列表
face_encoding– 与列表进行比较的单张脸编码
tolerance – 将人脸之间的距离视为匹配。越低越严格。0.6 是典型的最佳值。

该结果会返回一个列表信息,True表示与图片匹配的人脸编码。
我们可以将图片中识别到的人脸编码信息与数据库中的人脸编码进行匹配查询,从而识别图片中的人员信息,代码如下:

# 对每个编码与数据库人脸进行比对
        self.face_names = []
        know_ids = []

        for face_encoding in face_encodings:
            matches = face_recognition.compare_faces(known_encodings, face_encoding, tolerance=0.5)
            if True in matches:
                first_match_index = matches.index(True)
                name = face_datas[first_match_index][1]
                know_ids.append(face_datas[first_match_index][0])
            else:
                name = "unknown"
            self.face_names.append(name)

在这里插入图片描述

基于上述原理,为了便于展示与学习。博主最终开发出了一套完整的UI界面可以进行人脸识别、人员信息管理系统软件、打卡信息管理等功能的软件。完整的UI界面、测试图片视频、代码文件,均已打包上传,感兴趣的朋友可以通过下载链接获取。
在这里插入图片描述

【获取方式】

本文涉及到的完整全部程序文件:包括python源码、UI文件等(见下图),获取方式见文末:
在这里插入图片描述

注意:该代码采用Pycharm+Python3.8开发,运行界面的主程序为main.py(不含登录界面);login_main.py(含登录界面)。为确保程序顺利运行,请按照requirements.txt配置Python依赖包的版本。具体请参考资源中的环境配置文档。

关注下方名片【阿旭算法与机器学习】,回复【人脸识别】可获取下载方式


结束语

以上便是博主开发的关于人脸识别与人员信息管理软件的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正。
关于本篇文章大家有任何建议或意见,也欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!更多精彩内容持续更新…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智哪儿专访IF ROOM品牌主理人Amy:IF ROOM如何定义未来家居?

作为未来主义家居首倡者,IF ROOM在5月25日-28日举行的深圳时尚家居设计周上首次亮相就获得行业广泛热议。IF ROOM展馆以其未来主义设计风格和跨越东西方文化的美的意象,得到了包括设计师在内的广大行业人士追捧,IF ROOM展位成为深圳时尚家居设…

​字创未来 方正字库第十二届“方正奖”设计大赛正式来袭

传承汉字文化精髓,方正字库在字体行业不断探索深耕。方正字库一直致力于弘扬中华汉字文化,不断促进行业字体设计创新发展。于2001年在行业最艰难的时候,怀揣着对字体设计未来的美好向往,首届“北大方正奖”印刷字体设计大赛&#…

灵活使用Postman环境变量和全局变量,提高接口测试效率!

目录 前言: 环境变量和全局变量的概念 环境变量和全局变量的使用方法 1. 定义变量 2. 使用变量 环境变量和全局变量的实例代码 变量的继承和覆盖 变量的动态设置 总结: 前言: Postman是一个流行的API开发和接口测试工具,…

过滤器Filter,拦截器Interceptor

过滤器Filter 快速入门 详情 登录校验-Filter package com.itheima.filter;import com.alibaba.fastjson.JSONObject; import com.itheima.pojo.Result; import com.itheima.utils.JwtUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils…

码住!IC设计常用工具合集!

芯片设计过程中,选择和使用适合的工具是非常重要的。芯片设计工具通常分为三类:EDA工具、模拟仿真工具和布局工具。 一、EDA工具 EDA工具是芯片设计的核心,它包括原理图绘制、逻辑综合、门级仿真工具和物理版图编辑等,可以帮助设计…

Ubuntu 安装 jdk1.8

1 更新软件包 sudo apt update 2 安装jdk1.8 sudo apt install openjdk-8-jdk 3 查看版本 java -version安装成功

自适应滤波方法——LMS算法

自适应滤波器 自适应滤波器:一种能够根据输入信号自动调整自身参数的数字滤波器 非自适应滤波器:具有静态滤波器系统的数字滤波器,静态系数构成了滤波器的传递函数 对于一些应用(如系统辨识、预测、去噪等)&#xff…

固定翼无人机1:500地籍

引言 上几期,睿铂为大家推送了两篇相对精度验证的文章,其优秀的成果引来了业界人士不少的赞叹。同时,许多客户朋友又提出了更高的要求。目前,在地籍精度的项目中,使用多旋翼无人机挂载倾斜摄影相机作业,是能…

机器学习笔记 - 基于TensorFlow Lite的模型部署

一、简述 TensorFlow Lite 是一个移动端库,可用于在移动设备、微控制器和其他边缘设备上部署模型。 假设要执行图像分类任务。首先决定任务的模型。是要创建自定义模型;或者使用预训练模型,如 InceptionNet、MobileNet、NASNetLarge 等。又或者在预训练模型上应用迁…

【问题记录】解决vite多页应用路由改用history之后本地刷新404问题

当前包的版本信息: "vue": "^2.7.14", "vue-router": "^3.6.5" "vite": "^3.0.7", 首先,修改路由模式 首先,将之前多页项目中的某个页面路由模式改用 history ,…

C++服务器框架开发4——日志系统logger/.cpp与.cc

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) 上一篇:C服务器框架开发3——协程与线程的简单理解/并发与并行 C服务器框架开发4——日志系统logger 目前进度.cpp与.cc 目前进度 …

ByConity与主流开源OLAP引擎(Clickhouse、Doris、Presto)性能对比分析

引言: 随着数据量和数据复杂性的不断增加,越来越多的企业开始使用OLAP(联机分析处理)引擎来处理大规模数据并提供即时分析结果。在选择OLAP引擎时,性能是一个非常重要的因素。 因此,本文将使用TPC-DS基准…

排序算法、HashMap原理以及单例模式

文章目录 1、二分查找2、冒泡排序3、选择排序4、插入排序5、希尔排序6、快速排序(面试写这个)7、ArrayList8、Iterator9、LinkedList10、HashMap10.1、基本数据结构底层数据结构,1.7和1.8有什么不同? 10.2、树化与退化为何要用红黑…

【LINUX】进程间信号

文章目录 前言铺垫信号 信号的产生1、终端按钮产生信号2、调用系统函数向进程发送信号3、软件条件产生信号4、硬件异常产生信号 信号的保存补充:位图数据结构信号的处理结语 前言 铺垫 1、日常中我们能经常感受到信号的存在:红灯停绿灯行、三更鸡鸣、妈…

60.网络训练中的超参调整策略—学习率调整2

4、inverse_time_decay inverse_time_decay(learning_rate, global_step, decay_steps, decay_rate,staircase=False, name=None)逆时衰减,这种方式和指数型类似。如图, 5、cosine_decay cosine_decay(learning_rate, global_step

K8s in Action 阅读笔记——【7】ConfigMaps and Secrets: configuring applications

K8s in Action 阅读笔记——【7】ConfigMaps and Secrets: configuring applications 7.1 Configuring containerized applications 在我们讨论如何将配置数据传递给在Kubernetes中运行的应用程序之前,让我们先看看通常如何配置容器化应用程序。 如果忽略了你可以…

002. java.lang.NumberFormatException: Infinite or NaN,怎么破?

你好,我是YourBatman:当我老了,也写代码;不为别的,只为爱好。 📚前言 如果你工作超5年,100%遇到过这个异常:java.lang.NumberFormatException: Infinite or NaN Infinite中文释义…

使用MockJS进行前端开发中的数据模拟

在前端开发中,有时我们需要在没有后端接口的情况下进行前端页面的开发和测试。这时,我们可以使用MockJS来模拟数据,以便进行开发和调试。MockJS是一个用于生成随机数据和拦截Ajax请求的JavaScript库,它能够帮助我们快速搭建起一个…

InVEST模型

学习目标: 1)采用InVEST模型,掌握产水(包括水源涵养)、碳存储(包括固碳)、土壤保持、水质(氮磷)、生境质量和热岛缓解等生态系统服务评估方法,开展人类活动影响、重大工…

MATLAB EXPO 2023会议记录|基于STM32的MATLAB电机控制方案

算法导出工作流视频:(99 封私信 / 82 条消息) Simulink 算法导出工作流 —— stm32电机控制示例(v2) - 知乎 (zhihu.com) Algorithm-Export Workflows for Custom Hardware 示例: Algorithm-Export Workflows for Custom Hardware - MATLAB & Simuli…