当前位置: 首页 > news >正文

基于深度学习的人脸检测技术

  用到环境
1、pycharm community edition 2022.3.2
2、Python 3.10
整篇内容都已上传至我的csdn资源中,想用的请移步。
在这里插入图片描述

流程

  多任务级联卷积神经网络(Multi-task Cascaded Convolutional Networks, MTCNN)算法进行人脸检测

普通人脸检测

单人人脸检测

在这里插入图片描述

图1 单人人脸检测

  分析:可以看出在单人人脸检测时,MTCNN方法很好的画出了人脸的检测框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点,实现效果很好。

双人人脸检测

在这里插入图片描述

图2 双人人脸检测

  分析:可以看出在双人人脸检测时,MTCNN方法很好的画出了人脸的检测框以及不管是张嘴还是闭嘴都很准确的检测出了眼睛、笔尖、嘴角的一共五个点,实现效果很好。

多人人脸检测

在这里插入图片描述

图3 多人人脸检测

  分析:可以看出在多人人脸检测时,MTCNN方法依然能很好的画出了人脸的检测框以及准确的检测出了眼睛、笔尖、嘴角的一共五个点,实现效果很好。

特殊情况的人脸检测

侧拍

在这里插入图片描述

图4 侧拍角度人脸检测

  分析:可以看出在即使在侧拍角度,五官的位置相较于普通情况很不一样,MTCNN方法还是可以很好的画出了人脸的检测框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点,实现效果很好。

  在侧拍照片中,由于人脸的姿态发生了变化,传统的基于Haar或者HOG特征的人脸检测算法可能无法准确地检测出人脸区域,而MTCNN可以通过多尺度的滑动窗口搜索技术,在不同尺度下对人脸进行全局检测。同时,MTCNN中的关键点回归模块可以通过学习人脸形态学信息,准确地预测出人脸的五个关键点位置,即左眼、右眼、鼻子、左嘴角和右嘴角。

  因此,即使是在侧拍照片中,MTCNN也可以通过深度神经网络的强大表征能力和多任务学习的方法,实现对人脸区域的准确检测和关键点的精确定位。

有遮挡

在这里插入图片描述

图5 有遮挡人脸检测
  分析:可以看出在即使在眼睛戴墨镜有遮挡的情况下,MTCNN方法还是可以很好的画出了人脸的检测框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点,实现效果很好。

  可能原因是:虽然戴着眼镜的人脸与不戴眼镜的人脸在外观上存在差异,但是这些关键点位置通常是比较稳定的,并且MTCNN在训练过程中已经学习到了戴眼镜人脸的特征,所以在实际应用中,MTCNN可以很好地检测带眼镜的人脸关键点。

类人生物

在这里插入图片描述

图6 复杂情况人脸检测
  分析:可以看出在即使在有闭眼、出现猪鼻子的情况下,MTCNN方法还是可以很好的画出了人脸的框以及很准确的检测出了眼睛、笔尖、嘴角的一共五个点,实现效果很好。

  可能原因:虽然猪鼻子和人的鼻子的人脸以及睁眼和闭眼在外观上存在差异,但是这些关键点位置通常是比较稳定的,并且MTCNN在训练过程中已经学习到了戴眼镜人脸的特征,所以在实际应用中,MTCNN可以很好地检测带眼镜的人脸关键点。

人脸对齐问题

在这里插入图片描述

图7 人脸检测对齐结果

  分析:以上是两组人脸对齐的实验结果,可以看出通过将检测到的人脸关键点与参考关键点进行比较的方法可以很好的进行人脸对齐。

在这里插入图片描述

图8 人脸检测对齐异常结果

  分析:以上是一组人脸对齐的实验结果,可以看出通过将检测到的人脸关键点与参考关键点进行比较的方法可以很好的进行人脸对齐,只是对齐结果的图片顶部出现不明黑色区域。出现原因是人脸对齐的框的大小是实现给定的固定值,当人脸对齐的结果在边缘(这里在顶部)且小于给定值时,会用黑色填充空白区域。

更多面部特征点提取问题

在这里插入图片描述

图9 dlip更多面部特征点提取结果

  分析:以上是dlip更多面部特征点提取结果,左边是单人的面部特征点提取结果,右边是多人的面部特征点提取结果。可以看出与MTCNN相比,DLIP确实可以检测更多的面部特征点,而且实现效果好。

代码:

主函数
import cv2
from mtcnn import MTCNNdetector = MTCNN()image = cv2.cvtColor(cv2.imread("12.jpg"), cv2.COLOR_BGR2RGB)
result = detector.detect_faces(image)# Result is an array with all the bounding boxes detected. We know that for 'ivan.jpg' there is only one.
for person in result:bounding_box = person['box']keypoints = person['keypoints']cv2.rectangle(image,(bounding_box[0], bounding_box[1]),(bounding_box[0]+bounding_box[2], bounding_box[1] + bounding_box[3]),(0,155,255),2)cv2.circle(image,(keypoints['left_eye']), 2, (0,155,255), 2)cv2.circle(image,(keypoints['right_eye']), 2, (0,155,255), 2)cv2.circle(image,(keypoints['nose']), 2, (0,155,255), 2)cv2.circle(image,(keypoints['mouth_left']), 2, (0,155,255), 2)cv2.circle(image,(keypoints['mouth_right']), 2, (0,155,255), 2)cv2.imwrite("12_draw.jpg", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))print(result)

人脸对齐

import cv2
import numpy as np
from mtcnn import MTCNN# Define the reference landmarks that the face will be aligned to
ref_landmarks = np.array([[30.2946, 51.6963],[65.5318, 51.5014],[48.0252, 71.7366],[33.5493, 92.3655],[62.7299, 92.2041]
], dtype=np.float32)def align_face(img, landmarks):# Convert landmarks to a NumPy arraylandmarks = np.array([list(landmarks.values())], dtype=np.float32)# Calculate the transformation matrix using the reference and detected landmarksM, _ = cv2.estimateAffinePartial2D(landmarks, ref_landmarks)# Apply the transformation matrix to the imagealigned_img = cv2.warpAffine(img, M, (96, 112), flags=cv2.INTER_CUBIC)return aligned_img# Load the input image
img = cv2.imread('3.jpg')# Initialize MTCNN
detector = MTCNN()# Detect faces using MTCNN
faces = detector.detect_faces(img)# For each detected face, align the face and save the result
for face in faces:landmarks = face['keypoints']aligned_face = align_face(img, landmarks)cv2.imwrite('3_aligned_face.jpg', aligned_face)

更多面部特征点提取问题

import cv2
import dlib
# 读取图片
img_path = "1.jpg"
img = cv2.imread(img_path)
# 转换为灰阶图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 正向人脸检测器
detector = dlib.get_frontal_face_detector()
# 使用训练完成的68个特征点模型
predictor_path = "shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(predictor_path)
# 使用检测器来检测图像中的人脸
faces = detector(gray, 1)
for i, face in enumerate(faces):# 获取人脸特征点shape = predictor(img, face)# 遍历所有点for pt in shape.parts():# 绘制特征点pt_pos = (pt.x, pt.y)cv2.circle(img, pt_pos, 1, (255,0, 0), 2)
cv2.imshow('opencv_face_laowang',img)  # 显示图片
cv2.waitKey(0) # 等待用户关闭图片窗口
cv2.destroyAllWindows()# 关闭窗口
编写不易,求个点赞!!!!!!!
“你是谁?”“一个看帖子的人。”“看帖子不点赞啊?”“你点赞吗?”“当然点了。”“我也会点。”“谁会把经验写在帖子里。”“写在帖子里的那能叫经验贴?”“上流!”
cheer!!!

在这里插入图片描述

相关文章:

基于深度学习的人脸检测技术

用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 整篇内容都已上传至我的csdn资源中,想用的请移步。 流程 多任务级联卷积神经网络(Multi-task Cascaded Convolutional Networks, MTCNN)算法进行人脸检测 普通人脸检测 单人人脸检测 图1 单人人…...

【linux kernel】一文总结linux内核通知链

文章目录 1、通知链简介2、通知链的类型3、原理分析和API(1)注销通知器(2)注销通知器(3)通知链的通知 4、实例代码(1)定义一个通知链(2)实现观察者模块&#…...

kafka入门,Kafka 副本(十三)

Kafka副本 副本基本信息 1)Kafka副本作用,提高数据可靠性 2)Kafka默认副本1个,生产环境一般配置2个,保证数据可靠性,太多副本会增加磁盘存储空间,增加网络上数据传输,降低效率 3&a…...

利用PPT制作简单的矢量图

1.用PPT画一个图形(可以多个图) 2.鼠标圈住图形 3.利用 Ctrl G 组合图形,再用 Ctrl C 复制 4.打开word—粘贴—选择性粘贴—图片(增强性图元文件) 确认即可。...

18-Linux 常用命令

目录 1.ls PS:FinalShell设置背景和字体 2.pwd 3.cd PS:认识 Linux 目录结构——Linux 是一个树形目录结构 PS:绝对路径 vs 相对路径 PS:使用 tab 键补全 PS:使用 ctrl c 重新输入 4.touch PS:L…...

2024考研408-计算机组成原理第六章-总线学习笔记

文章目录 前言初识总线一、总线概述1.1、总线的概述1.1.1、认识总线1.1.2、设计总线需要的特性1.1.3、总线的分类①按照数据传输格式分(串行、并行)②按照总线功能连接的总线(片内总线、系统总线、通信总线)③按照时序控制方式&am…...

uni_app 微信小程序 苹果手机 边框显示不全

![在这里插入图片描述](https://img-blog.csdnimg.cn/3a4c4ab1a146444c84c72d360a057c01.png 解决方案: 原因:是因为我们在设置边框的时候设置的rpx ,自适应会自动换算px, 两者之间的比例一般都是1.5-2之间,对于边框 border 来说…...

vue 访问第三方 跨域, 配置vue.config.js

目录 0 config 文件被修改 一个要重启vscode 配置文件才会生效 1 第一种 (有两种写法) 1.1 配置vue.config.js 1.2 axios 使用 1.3 终端打印 2 第二种方法 --> 错误 --> 没有运行成功 2.1 配置vue.config.js --> 就是api 不被设置成 替换为 / 2.2 axios 使用…...

使用gradio库的File模块实现文件上传和展示

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

网络安全进阶学习第四课——SSRF服务器请求伪造

文章目录 一、什么是SSRF?二、SSRF成因三、SSRF简析四、PHP存在SSRF的风险函数五、后台源码获取方式六、SSRF危害七、SSRF漏洞挖掘从WEB功能上寻找,从URL关键字中寻找 八、SSRF具体利用ssrf常利用的相关协议PHP伪协议读取文件端口扫描 九、SSRF存在的必要…...

js处理扁平数组和树结构相互转换

一、将扁平的数据转为树形结构 在 js中,可以使用递归算法将扁平的数据转换为树形结构。 扁平数据通常是一个带有 parentId 属性的数组,而树形结构通常是一个带有 children 属性的对象。 1、方法一 下面是一个简单的例子,演示如何将扁平数…...

Spark弹性分布式数据集

1. Spark RDD是什么 RDD(Resilient Distributed Dataset,弹性分布式数据集)是一个不可变的分布式对象集合,是Spark中最基本的数据抽象。在代码中RDD是一个抽象类,代表一个弹性的、不可变、可分区、里面的元素可并行计…...

ffmpeg学习记录

1、对图片进行裁剪 ffmpeg -i input.jpg -vf cropiw/3:ih:20:0 caijian.jpg PS: crop100:100:12:34 相同效果: cropw100:h100:x12:y34 2、视频增加文字水印 使用drawtext滤镜进行增加水印 参数 类型 说明 text 字符串 文字 textfile 字符串 文字文件 …...

ChatGPT:为教育创新提供五大机遇

随着智能技术的不断发展,ChatGPT在教育场景中的创新价值可能比我们能够意识到的还要多。比如它可以自动处理作业、在线答疑,可以辅助语言学习、实时沟通,甚至还可以用于评估诊断、科学研究。国内外关于利用ChatGPT实现教育创新的场景描绘已经…...

Educational Codeforces Round 151 (Rated for Div. 2)

Edu 151 A. Forbidden Integer 题意: 你有[1, k]内除了 x x x的整数,每个数可以拿多次,问 ∑ n \sum n ∑n是否可行并构造 思路: 有1必能构造,否则假如没有1,假如有2, 3必定能构造出大于等于2的所有数&…...

【AI机器学习入门与实战】机器学习算法都有哪些分类?

👍【AI机器学习入门与实战】目录 🍭基础篇 🔥 第一篇:【AI机器学习入门与实战】AI 人工智能介绍 🔥 第二篇:【AI机器学习入门与实战】机器学习核心概念理解 🔥 第三篇:【AI机器学习入…...

React之hooks

Hooks函数 1.useState():状态钩子。纯函数组件没有状态,用于为函数组件引入state状态, 并进行状态数据的读写操作。 const [state, setState] useState(initialValue); // state:初始的状态属性,指向状态当前值,类似…...

1.监控分布式--zabbix

文章目录 监控分布式-zabbix、prometheus概念工作原理功能组件部署zabbix安装Nginx和PHP环境部署数据库编码安装zabbix编译安装zabbix server客户端安装zabbix agent服务 监控分布式-zabbix、prometheus 利用一个优秀的监控软件,我们可以: 通过一个友好的界面进行…...

java stream 多个集合去重取交集

文章目录 背景案例代码 背景 原因是需要从表里查多个集合list,然后取多个集合得交集,并且元素是对象,所以使用了下面的方式,当然方式有很多种,仅供参考。 案例 下面提供了一段多个集合join取交集的例子,…...

给LLM装上知识:从LangChain+LLM的本地知识库问答到LLM与知识图谱的结合

第一部分 什么是LangChain:连接本地知识库与LLM的桥梁 作为一个 LLM 应用框架,LangChain 支持调用多种不同模型,提供相对统一、便捷的操作接口,让模型即插即用,这是其GitHub地址,其架构如下图所示 (点此查…...

视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别

目标学习任务 检测出已经分割出的图像的分类 2 使用pytorch pytorch 非常简单就可以做到训练和加载 2.1 准备数据 如上图所示,用来训练的文件放在了train中,验证的文件放在val中,train.txt 和 val.txt 分别放文件名称和分类类别&#xff…...

LLM - 第2版 ChatGLM2-6B (General Language Model) 的工程配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131445696 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优…...

从0开始,手写MySQL事务

说在前面:从0开始,手写MySQL的学习价值 尼恩曾经指导过的一个7年经验小伙,凭借精通Mysql, 搞定月薪40K。 从0开始,手写一个MySQL的学习价值在于: 可以深入地理解MySQL的内部机制和原理,Mysql可谓是面试的…...

React中useState的setState方法请求了好多次

1、问题描述 最近在写react的时候碰到了一个很奇怪的问题。 可以看到那个getXXX()的方法一直不断的被调用,网页一直请求,根本停不下来了。 2、产生原因 要弄明白这个原因,首先要先了解一下react生命周期。 react是组件式的编程,一…...

【MYSQL基础】基础命令介绍

基础命令 MYSQL注释方式 -- 单行注释/* 多行注释 哈哈哈哈哈 哈哈哈哈 */连接数据库 mysql -u root -p12345678退出数据库连接 使用exit;命令可以退出连接 查询MYSQL版本 mysql> select version(); ----------- | version() | ----------- | 8.0.27 | ----------- 1…...

多元回归预测 | Matlab基于灰狼算法优化深度置信网络(GWO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于灰狼算法优化深度置信网络(GWO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型,matlab代码回归预测,多变量输入模型,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质…...

校园wifi网页认证登录入口

很多校园wifi网页认证登录入口是1.1.1.1 连上校园网在浏览器写上http://1.1.1.1就进入了校园网 使 用 说 明 一、帐户余额 < 0.00元时&#xff0c;帐号被禁用&#xff0c;需追加网费。 二、在计算中心机房上机的用户&#xff0c;登录时请选择新建帐号时给您指定的NT域&…...

[SpringBoot]Spring Security框架

目录 关于Spring Security框架 Spring Security框架的依赖项 Spring Security框架的典型特征 关于Spring Security的配置 关于默认的登录页 关于请求的授权访问&#xff08;访问控制&#xff09; 使用自定义的账号登录 使用数据库中的账号登录 关于密码编码器 使用BCry…...

Unity 之 抖音小游戏本地数据最新存储方法分享

Unity 之 抖音小游戏本地数据最新存储方法分享 一、抖音小游戏文件存储系统背景二、文件存储系统的使用方法2.1 初始化2.1 创建目录2.3 存储数据2.4 删除目录/文件2.5 其他相关操作 三&#xff0c;小结 抖音小游戏是一种基于抖音平台开发的小型游戏&#xff0c;与传统的 APP 不…...

逍遥自在学C语言 | 函数初级到高级解析

前言 函数是C语言中的基本构建块之一&#xff0c;它允许我们将代码组织成可重用、模块化的单元。 本文将逐步介绍C语言函数的基础概念、参数传递、返回值、递归以及内联函数和匿名函数。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在…...