深度学习实战人脸识别

文章目录
- 前言
- 一、人脸识别一般过程
- 二、人脸检测主流算法
- 1. MTCNN
- 2. RetinaFace
- 3. CenterFace
- 4. BlazeFace
- 5. YOLO
- 6. SSD
- 7. CascadeCNN
- 三、人脸识别主流算法
- 1.deepface
- 2.FaceNet
- 3.ArcFace
- 4.VGGFace
- 5.DeepID
- 四、人脸识别系统实现
- 0.安装教程与资源说明
- 1. 界面采用PyQt5框架
- 2.人脸定位
- 3. 人脸注册
- 4.人脸删除
- 5.单人脸匹配识别
- 6.多人脸匹配识别
- 7.未注册人脸匹配识别
- 8.代码实现
- 五、总结
- 结束语
深度学习实战人脸检测与识别
前言
人脸识别技术的研究意义是多方面的,它涉及到社会生活的各个领域,并为社会发展和人民生活带来便利和安全。以下是人脸识别研究的几个主要意义:
-
安全领域:人脸识别技术可以应用于门禁系统、监控系统等,实现人员身份的快速识别和记录,提高安全性。
-
社会管理:在公安、边检、人口普查等社会管理领域,人脸识别技术可以进行人员身份的准确核验,确保社会管理工作的效率和准确性。
-
商业领域:在金融、零售、旅游等行业,人脸识别技术可以实现快速的身份识别和安全支付,提高用户体验。
-
医疗领域:在医院门诊、护理等医疗领域,人脸识别技术可以快速识别患者身份,提高医疗服务的质量和效率。
-
技术创新:人脸识别技术的发展推动了计算机视觉和人工智能领域的技术进步,尤其是在深度学习的应用上,人脸识别技术取得了显著的成就。
-
跨领域应用:人脸识别技术与其他技术领域如物联网、移动计算等的融合,创造出新的应用场景和业务模式。
综上所述,人脸识别技术的研究意义不仅在于技术层面的创新,也包括对社会、法律和伦理方面问题的深入思考,以实现技术的健康发展和应用。
一、人脸识别一般过程
人脸识别的一般过程可以分为以下几个步骤:
-
人脸检测:
- 图像采集:首先需要获取图像数据,这可以是静态图像或视频流。
- 人脸定位:在图像中定位人脸的位置,这通常通过人脸检测算法实现,如Haar特征、HOG+SVM、MTCNN等。
-
预处理:
- 图像预处理:包括灰度化、直方图均衡化、噪声去除等,以提高后续处理的准确性。
- 人脸对齐:将检测到的人脸调整到标准位置和大小,通常涉及到旋转、缩放和裁剪等操作。
-
特征提取:
- 特征表示:从预处理后的人脸图像中提取特征,这些特征可以是几何特征、纹理特征或基于深度学习的特征。
- 特征选择:选择最有代表性的特征用于识别,以减少计算量并提高识别率。
-
特征匹配:
- 特征编码:将提取的特征转换为一种可以比较的形式,如特征向量。
- 相似度计算:计算待识别人脸的特征向量与数据库中已知人脸的特征向量的相似度。
-
分类决策:
- 分类器训练:使用已知的人脸数据训练分类器,如支持向量机(SVM)、神经网络、决策树等。
- 分类预测:将待识别人脸的特征向量输入分类器,得到识别结果。
-
结果输出:
- 输出识别结果:将识别结果输出给用户,可以是人脸的身份信息、相似度分数等。
- 反馈学习:根据识别结果的准确性,对模型进行调整和优化。
-
活体检测:
- 防止欺骗:为了提高安全性,人脸识别系统通常会加入活体检测步骤,以区分真实人脸和照片、视频等伪造人脸。
二、人脸检测主流算法
1. MTCNN
MTCNN (Multi-task Cascaded Convolutional Networks)是由中国科学院提出的一种多任务级联卷积神经网络,它可以同时进行人脸检测、关键点定位和姿态估计等任务,具有精度高、速度快、能够处理多个尺度的人脸等优点。
具体说明与代码实现可参考博主写的教程MTCNN人脸检测算法实现(python)
2. RetinaFace
RetinaFace 是由中国香港城市大学提出的一种准确率更高的人脸检测与关键点定位算法,其使用了可变形卷积网络(Deformable Convolutional Network)来实现更加准确的定位,RetinaFace 特别适用于小尺度人脸的定位。
3. CenterFace
CenterFace 是由华为提出的一种轻量级人脸检测与关键点定位算法,该算法只需要 1.5MB 的模型大小,可以在移动端实时运行,CenterFace 采用了 Hourglass 模型和特征金字塔网络(Feature Pyramid Network)来实现高精度的人脸定位。
4. BlazeFace
BlazeFace 是由 Google 提出的一种极其轻量级的人脸检测算法,它的模型大小只有 2MB 左右,可以在移动端实时运行,BlazeFace 采用了创新的 anchor-free 检测方式,可以实现更快速度的人脸定位。
5. YOLO
YOLO 是一种端到端的实时目标检测算法,可以同时对多个目标进行检测和定位。由于 YOLO 可以将整张图像划分为网格,并在每个网格上预测目标的类别和边界框,因此它通常比其他基于区域的目标检测算法更快。
6. SSD
SSD 是一种基于卷积神经网络的单步目标检测算法,可以在一次前向传播中完成对多个目标的检测,相对于 Faster R-CNN 等基于区域的检测算法,SSD 更加简单与高效。
7. CascadeCNN
CascadeCNN 是由微软亚洲研究院提出的级联卷积神经网络,能够在不牺牲性能的情况下大幅减小网络规模和计算量。CascadeCNN 的结构是由多个级联阶段组成,每个阶段包含多个级联卷积层和池化层,可以有效地提高人脸定位的精确度和稳定性。
三、人脸识别主流算法
深度学习在人脸识别领域的主流算法主要包括以下几种:
1.deepface
DeepFace:由Facebook开发,使用深度神经网络来识别人脸,达到了接近人类水平的识别准确率。
2.FaceNet
FaceNet:由Google开发,使用三元组损失函数(triplet loss)将人脸映射到欧几里得空间中,使得相似的人脸在空间中的距离更近。
3.ArcFace
ArcFace:在之前模型的基础上引入了角度边际损失(angular margin loss),使得学习到的特征更具区分性。
4.VGGFace
VGGFace:这是一个深度网络,使用大型数据集进行训练,以提供高精度的人脸识别任务。
5.DeepID
DeepID系列:一系列深度学习模型,用于人脸识别任务,以逐步提高识别性能而闻名。
这些算法在设计、训练/测试数据集、应用场景以及评估协议等方面都取得了显著的进展,并且它们在处理RGB-D、视频和异构人脸数据方面也表现出色。这些主流算法的发展,极大地推动了人脸识别技术的进步,并在多个方面重塑了人脸识别的研究格局。
四、人脸识别系统实现
0.安装教程与资源说明
离线安装配置文件说明


1. 界面采用PyQt5框架

2.人脸定位

3. 人脸注册

4.人脸删除

5.单人脸匹配识别

6.多人脸匹配识别

7.未注册人脸匹配识别

8.代码实现
class QThreadFaceModel(QThread):cnn_predict_finish_sig = pyqtSignal(object)face_recog_record_insert_sig = pyqtSignal(list)face_recog_warning_sig = pyqtSignal(str)def __init__(self):super(QThreadFaceModel, self).__init__()self.run_flag = Falseself.mode = 0self.last_pid_list = []self.cap = cv2.VideoCapture(0)def __del__(self):print('__del__')self.cap.release()def set_run_flag(self, flag):self.run_flag = flagdef set_face_model(self, model):self.face_model = modeldef set_model(self, mode):self.mode = modedef set_face_features(self, face_features):self.face_features = face_featuresdef set_face_names(self, face_name_dict):self.face_name_dict = face_name_dictdef query_face_id(self, query_feature, sim_thresh=0.65):id ='unknown'for key in self.face_features:face_sim = self.face_model.CalculateSimilarity(query_feature, self.face_features[key])# print(face_sim)if face_sim >= sim_thresh:id = keybreakreturn iddef run(self):"""线程启动后执行的函数入口,采用run_flag控制流程的运行状态"""while True:if self.run_flag:ok, frame = self.cap.read() # 读取一帧数据# print(frame.shape)if not ok:self.cap = cv2.VideoCapture(0)continuetry:detect_result = self.face_model.Detect(frame)# print(detect_result)for i in range(detect_result.size):face = detect_result.data[i].posif self.mode == 1:face_points = self.face_model.mark5(frame, face)face_crop_image = self.face_model.CropFace(frame, face_points)face_crop_image_feature = self.face_model.ExtractCroppedFace(face_crop_image)face_id = self.query_face_id(face_crop_image_feature)if face_id == 'unknown':cv2.rectangle(frame, (face.x, face.y), (face.x + face.width, face.y + face.height),(0, 0, 255), 2)frame = cv2ImgAddText(frame, self.face_name_dict[face_id], face.x - 30, face.y -30,textColor=(255, 0, 0), textSize=30)else:cv2.rectangle(frame, (face.x, face.y), (face.x + face.width, face.y + face.height),(255, 0, 0), 2)frame = cv2ImgAddText(frame, self.face_name_dict[face_id], face.x - 30, face.y - 30,textColor=(0, 255, 0), textSize=30)elif self.mode == 0:cv2.rectangle(frame, (face.x, face.y), (face.x + face.width, face.y + face.height),(255, 0, 0), 2)# cv2.putText(frame, f"pid:{PID}", (face.x, face.y), 0, 1, (0, 255, 0))self.cnn_predict_finish_sig.emit(frame)except Exception as e:self.cap = cv2.VideoCapture(0)print(e)
五、总结
深度学习人脸定位算法已经取得了非常显著的进展,已经被广泛应用于人脸识别、人脸表情分析、虚拟换脸等应用场景中,这些算法在不断地优化和改进中,未来还有很大的发展空间。
结束语
由于博主能力有限,本篇文章中提及的方法,也难免会有疏漏之处,希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。
相关文章:
深度学习实战人脸识别
文章目录 前言一、人脸识别一般过程二、人脸检测主流算法1. MTCNN2. RetinaFace3. CenterFace4. BlazeFace5. YOLO6. SSD7. CascadeCNN 三、人脸识别主流算法1.deepface2.FaceNet3.ArcFace4.VGGFace5.DeepID 四、人脸识别系统实现0.安装教程与资源说明1. 界面采用PyQt5框架2.人…...
oracle排查长时间没提交的事务造成的阻塞案例
一 问题描述 开发同事反馈生产环境某个接口慢,一个普通的按主键更新的update竟然需要5分钟,而我手动执行秒返回,猜测是发生了阻塞,需要排查出阻塞源。 有时,一个事务里会包含多个sql,有的还包含上传附件等…...
React第七节 组件三大属性之 refs 的用法注意事项
1、定义 React 中refs 是允许我们操作DOM 访问组件实例的一种方案。开发人员可以直接使用 refs 访问操作DOM,而不用自身的数据状态,这种方案在实际开发过程中是有必要的,但是不建议通篇使用refs操作DOM,如果是这样,那…...
工程企业需要什么样的物资管理系统?为什么需要物资管理系统?
一、背景与意义 在工程项目的建设中,无论是高楼大厦的拔地而起,还是高速公路的绵延铺展,物资都是最基础的要素之一。从钢筋水泥到施工机械,任何一种物资的管理不善都可能导致项目延误、成本超支,甚至质量问题。然而&a…...
基于网页的大语言模型聊天机器人
代码功能 用户交互界面: 包括聊天历史显示区域和输入框,用户可以输入消息并发送。 消息发送和显示: 用户输入消息后点击“Send”按钮或按下回车键即可发送。 消息发送后显示在聊天记录中,并通过异步请求与后端 AI 模型通信&am…...
深入理解索引(一)
1.引言 在数据库和数据结构中,索引(Index)是一种用于提高数据检索速度的重要机制。本文将详细深入介绍索引。 2. 索引的分类 2.1 B - 树索引(B - Tree Index) 2.1.1 结构细节 树状结构:B - 树索引是一…...
动态规划子数组系列一>最长湍流子数组
1.题目: 解析: 代码: public int maxTurbulenceSize(int[] arr) {int n arr.length;int[] f new int[n];int[] g new int[n];for(int i 0; i < n; i)f[i] g[i] 1;int ret 1;for(int i 1; i < n-1; i,m. l.kmddsfsdafsd){int…...
MATLAB矩阵元素的修改及删除
利用等号赋值来进行修改 A ( m , n ) c A(m,n)c A(m,n)c将将矩阵第 m m m行第 n n n列的元素改为 c c c,如果 m m m或 n n n超出原来的行或列,则会自动补充行或列,目标元素改为要求的,其余为 0 0 0 A ( m ) c A(m)c A(m)c将索引…...
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
TypeScript 中函数的理解 在 TypeScript 中,函数本质上与 JavaScript 中的函数类似,但是它增强了类型系统的支持,使得我们可以对函数的参数和返回值进行更严格的类型检查。这样可以有效减少类型错误,提高代码的可维护性和可读性。…...
ubuntu搭建k8s环境详细教程
在Ubuntu上搭建Kubernetes(K8s)环境可以通过多种方式实现,下面是一个详细的教程,使用kubeadm工具来搭建Kubernetes集群。这个教程将涵盖从准备工作到安装和配置Kubernetes的所有步骤。 环境准备 操作系统:确保你使用的…...
ubuntu安装Eclipse
版本 ubuntu16.04 64bitEclipse 2019-12 (太高容易崩溃)下载:wget https://archive.eclipse.org/technology/epp/downloads/release/2019-12/R/eclipse-java-2019-12-R-linux-gtk-x86_64.tar.gzjdk安装 将jdk1.8.0_211-linux-x64.tar.gz解压到…...
C#里怎么样使用线程暂停?
C#里怎么样使用线程暂停? 如果一个线程没有任务在处理,并且又不进行暂停, 这时候,这个线程就会把当前这个CPU占满,即是所谓的死循环。 因此我们设计线程时,一定要知道线程在什么时候没有工作处理时, 就需要进入等待状态,不能再进行下去,否则会导致死循环, 只是耗费…...
畅听FM 3.0.0 | 很有果味的电台软件,超多FM电台,支持播放本地音乐
畅听FM是一款简洁且富有设计感的电台软件,支持收听超多FM电台,还支持播放本地音乐,甚至可以用网址创建音乐源。3.0新版本主要改进了对Android 4.x系统的支持,使得老旧电视和车机也能安装使用,并且新增了横屏显示功能&a…...
力扣面试经典 150(上)
文章目录 数组/字符串1. 合并两个有序数组2. 移除元素3. 删除有序数组中的重复项4. 删除有序数组的重复项II5. 多数元素6. 轮转数组7. 买卖股票的最佳时机8. 买卖股票的最佳时机II9. 跳跃游戏10. 跳跃游戏II11. H 指数12. O(1)时间插入、删除和获取随机元素13. 除自身以外数组的…...
鸿蒙开发-音视频
Media Kit 特点 一般场合的音视频处理,可以直接使用系统集成的Video组件,不过外观和功能自定义程度低Media kit:轻量媒体引擎,系统资源占用低支持音视频播放/录制,pipeline灵活拼装,插件化扩展source/demu…...
第一个autogen与docker项目
前提条件:在windows上安装docker 代码如下: import os import autogen from autogen import AssistantAgent, UserProxyAgentllm_config {"config_list": [{"model": "GLM-4-Plus","api_key": "your api…...
第三十四篇 MobileNetV1、V2、V3模型解析
摘要 这篇文章将 MobileNetV1、V2、V3汇在一起,解析移动端网络的结构。MobileNet系列的模型是非常经典的模型,值得深入研究一番。 MobileNetV1、V2、V3是MobileNet系列的三个重要版本,它们均针对移动和嵌入式设备进行了优化,具有轻量化、高效能的特点。以下是这三个模型的…...
Python学习——字符串操作方法
mystr “hello word goodbye” str “bye” Find函数:检测一个字符串中是否包含另一个字符串,找到了返回索引值,找不到了返回-1 print(mystr.find(str,0,len(mystr))) print(mystr.find(str,0,13)) index函数:检测一个字符串是否包含另一…...
力扣—15.三数之和
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元…...
容器安全检测和渗透测试工具
《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect Docker-bench-…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
