CV-人脸识别02-关键点检测

2024-06-08 00:38

本文主要是介绍CV-人脸识别02-关键点检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关键点提取

【实现方法, 疲劳检测, 人脸校准】

1实现方法-face_recognition

face_recognition,
可以通过python引用或者命令行的形式使用,管理和识别人脸
安装命令 pip install face_recognition

  • 实现方法:
    创建两个目录,一个放已知图片,另一个放要识别的图片
    输入命令face_recognition /known_people/ / unknown_pictures/
    如果想指定想并行处理图像,则可以指定cpu核数,例如指定4个cpu则可认为是并行处理4倍的图像
    face_recognition --cpus 4 /known_people/ /unknown_pictures/
1.1 图像载入函数

load_image_file(file, mode=‘RGB’)
加载一个图像文件到一个numpy array类型的对象上。
参数:

file:待加载的图像文件名字
mode:转换图像的格式
只支持“RGB”(8位RGB, 3通道)和“L”(黑白)

返回值:

一个包含图像数据的numpy array类型的对象
1.2 人脸特征提取函数

face_landmarks(face_image,face_locations=None,model=“large”)
给定一个图像,提取图像中每个人脸的脸部特征位置
参数:

face_image:			输入的人脸图片
face_locations=None:	可选参数,默认值为None,代表默认解码图片中的每一个人脸。若输入face_locations()[i]可指定人脸进行解码
model="large":			输出的特征模型,默认为“large”,可选“small”。当选择为"small"时,只提取左眼、右眼、鼻尖这三种脸部特征。
1.3 人脸编码函数

face_encodings(face_image, known_face_locations=None, num_jitters=1)
给定一个图像,返回图像中每个人脸的128脸部编码(特征向量)。
参数:

face_image: 			输入的人脸图像
known_face_locations:  可选参数,如果你知道每个人脸所在的边界框
num_jitters=1: 		在计算编码时要重新采样的次数。越高越准确,但速度越慢(100就会慢100倍)

返回值:

一个128维的脸部编码列表
返回值类型为:List[Dict[str,List[Tuple[Any,Any]]]],是由各个脸部特征关键点位置组成的字典记录
列表,一个Dict对象对应图片中的一个人脸,其key为某个脸部特征:
如输出中的nose_bridge、left_eye等,value是由该脸部特征各个关键点位置组成的List,关键点位置是
一个Tuple(如上输出中,nose_bridge对应的关键点位置组成的列表为[(881L, 128L), (880L, 141L),
(880L, 154L), (879L, 167L)]
1.4 绘图,画线填充

载入图片,构建一个ImageDraw对象:
polygon() 方法用于绘制多边形:

第一个参数是多边形的几个顶点位置组成的list,第二个参数fill是填充该	多边形的颜色。

line()

方法是用来画多个点之间构成的线段,第一个参
数是点位置组成的list,第二个参数fill是线段的颜色,
第三个参数width是线段的宽度
1.5 脸部特征距离计算

face_distance(face_encodings, face_to_compare)

给定一组面部编码,将它们与已知的面部编码进行比较,得到欧氏距离。对于每一个比较的脸,
欧氏距离代表了这些脸有多相似。

参数:

faces:				要比较的人脸编码列表
face_to_compare:   待进行对比的单张人脸编码数据
tolerance:			两张脸之间有多少距离才算匹配。该值越小对比越严格,0.6是典型的最佳值

返回值:

一个numpy ndarray,数组中的欧式距离与faces数组的顺序一一对应
1.6 人脸特征检测定位2

batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)
使用cnn人脸检测器返回一个包含人脸特征的二维数组,如果使用了GPU,这个函数能够更快速的返回结果;如果不使用GPU的话,该函数就没必要使用。
参数:

images : 一个包含图像数据的list,每个成员都是一个 numpy array类型
number_of_times_to_upsample: 从images的样本中查找多少次人脸,该参数的值越高的话越能发现更小的人脸
batch_size: 每个GPU一次批处理多少个image

返回值:

一个元组列表,列表中的每个元组包含人脸的位置(top, right, bottom, left)
1.7 比较两张图片的脸部特征

compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)
比较脸部编码列表和候选编码,看看它们是否匹配。
参数:

known_face_encodings:已知的人脸编码列表
face_encoding_to_check:待进行对比的单张人脸编码数据
tolerance:两张脸之间有多少距离才算匹配。该值越小对比越严格,0.6是典型的最佳值。

返回值:

一个 True或者False值的列表,该表指示了known_face_encodings列表的每个成员的匹配结果
1.8 人脸特征检测定位1

face_locations(img, number_of_times_to_upsample=1, model=‘hog’)
给定一个图像,返回图像中每个人脸的面部特征位置(眼睛、鼻子等)
参数:

img:一个image(numpy array类型)
number_of_times_to_upsample:从images的样本中查找多少次人脸,该参数值越高的话越能发现更小的人脸。
model:使用哪种人脸检测模型。“hog” 准确率不高,但是在CPUs上运行更快,“cnn” 更准确更深度(且
GPU/CUDA加速,如果有GPU支持的话),默认是“hog”

返回值:

一个元组列表,列表中的每个元组包含人脸的位置(top, right, bottom, left)
1.9 汇总

face_recognition API总结:

load_image_file(file, mode='RGB')
face_landmarks(face_image,face_locations=None,model="large")
face_encodings(face_image, known_face_locations=None, num_jitters=1)
batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)
compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)
face_distance(face_encodings, face_to_compare)

2. 应用

2.1 人脸相似度比较
dlib库的“shape_predictor_68_face_landmarks.dat”提取的只是人脸的68个特征点(例如眼、嘴等
位置),“dlib_face_recognition_resnet_model_v1.dat”是人脸特征提取的分类网络,提取的128
维信息即是人脸的特征信息,即人脸特征向量。
不同人脸特征向量之间,余弦距离或欧式距离越大,则两个特征值相似度越低,属于同一个人
的可能性越小,此时判断两人为不同的人。

在这里插入图片描述

2.1 疲劳检测

在这里插入图片描述
疲劳驾驶监控主要包括以下几方面的内容:
(1)双眼位置的精确定位
(2)双眼位置的追踪
(3)双眼状态信息的分析

疲劳检测流程图
在这里插入图片描述
在这里插入图片描述

这篇关于CV-人脸识别02-关键点检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040760

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的