【iOS ARKit】人脸检测追踪基础

在计算机人工智能(Artificial Inteligence,AI)物体检测识别领域,最先研究的是人脸检测识别,目前技术发展最成熟的也是人脸检测识别。人脸检测识别已经广泛应用于安防、机场、车站、闸机、人流控制、安全支付等众多社会领域,也广泛应用于直播特效、美颜、Animoji等娱乐领域。

人脸检测基础

人脸检测(Face Detection)是利用计算机视觉处理技术在数字图像或视频中自动定位人脸的过程,人检测不仅检测人脸在图像或视频中的位置,还应该检测出其大小与方向(姿态)。人脸检测是有关人脸图分析应用的基础,包括人脸识别和验证、监控场合的人脸跟踪、面部表情分析、面部属性识别(性别、年龄、笑、痛苦)、面部光照调整和变形、面部形状重建、图像视频检索等。近几年,随着机器学习技术的发展,人检测成功率与准确率大幅度提高,并开始大规模实用,如机场和火车站人脸验票、人脸识别身份认证等。
ARKit 支持人脸检测,并且支持多人险同时检测,还支持表情属性和 BlendShapes。
人脸识别(Face Recognition)是指利用人脸检测技术确定两张人脸是否对应同一个人,人脸识别技是人脸检测技术的扩展和应用,也是很多其他应用的基础。目前,ARKit 仅提供人脸检测,而不提供人脸别功能。
人脸跟踪(Face Tracking)是指将人脸检测扩展到视频序列,跟踪同一张人脸在视频序列中的位置。是论上讲,任何出现在视频中的人险都可以被跟踪,也即是说,在连续视频帧中检测到的人脸可以被识别为同一个人。人脸跟踪不是人脸识别的一种形式,它是根据视频序列中人脸的位置和运动推断不同视频帧中的人脸是否同一人的技术。
人脸检测属于模式识别的一类,但人脸检测成功率受到很多因素的影响,影响人脸检测成功率的因素主要有以下所述情形。

影响人脸检测的因素

  1. 图像大小 ,人脸图像过小会影响检测效果,人脸图像过大会影响检测速度,图像大小反映在实际应用场景中就是人脸离摄像头的距离;

  2. 图像分辦率,越低的图像分辨率越难检测,图像大小与图像分辨率直接影响摄像头识别距离。

  3. 光照环境 ,目前4K 摄像机看清人脸的最远距离是10m 左右,移动手机检测距离更小一些过亮或过暗的光照环境都会影响人脸检测效果

  4. 模糊程度 ,实际场景中主要是运动模糊,人险相对于摄像机的移动经常会产生运动模糊五官无遮挡、脸部边缘清晰的图像有利于人脸检测。

  5. 遮挡程度 ,有遮挡的人脸会对人脸检测成功率造成影响人险相对于摄像机角度不同也会影响人脸检测效果。

  6. 采集角度, 正脸最有利于检测,偏离角度越大越不利于检選

    随着人工智能技术的持续发展,在全球信息化、云计算、大数据的支持下,人脸检测识别技术也会越来越成熱,同时应用面会越来越广,可以预见,以人脸检测为基础的人脸识别将会呈现网络化、多识别融合3互联的发展趋势。

人脸检测技术基础

人体头部是一个三维结构体,而眼、嘴、额头在这个三维结构体中又有比较固定的位置,因此在 AR中使用了两个坐标系来处理与人体头部相关的工作,一个是世界坐标系(World Coordinates Space),这个您标系就是 ARKit 启动时建立的以启动时设备所在位置为原点的坐标系,而另一个称为人脸坐标系(FarCoordinate Space) •
在 ARKit 检测到人脸后会生成一个 ARFaceAnchor,其 transform 属性指定了相对于世界坐标系的,脸位置与方向,利用该属性就可以在人脸上挂载虚拟元素。除此之外,ARKit 还会生成一个相对于人体头部的坐标系,该坐标系也以米为测量单位,利用该坐标系可以更精细地定位眼、嘴、鼻等位置从而实现更好的虚拟元素定位效果。ARKit 人脸坐标系也采用右手坐标系,如下图所示。ARKit 人脸坐标系也采用右手坐标系
ARKit 人脸坐标系也采用右手坐标系

ARKit 可以使用人脸跟踪(ARFace TrackingConfiguration) 和世界跟踪(ARWorld Tracking Configuration)两种配置方式开启人脸检测跟踪功能。
ARWorldTrackingConfiguration 配置中有一个 userFaceTrackingEnabled 属性,该属性为布尔值,默认为 false,如果设置 true,则可以在进行世界跟踪的同时启动人脸检测跟踪。
ARFaceTrackingConfiguration 是专为人脸检测跟踪优化的配置,其中,maximumNumberOfTrackedFaces 属性用于设置最大同时检测跟踪的人脸数,当前最大值力3;isWorldTrackingEnabled 设置是否在人脸检测跟踪的同时启动世界跟踪,isLightEstimationEnabled 设置是否启用环境光照评估。典型的启动人脸检测跟踪功能的代码如代码如下所示。

        guard ARFaceTrackingConfiguration.isSupported else {return}if faceMetre {}let config = ARFaceTrackingConfiguration()config.isWorldTrackingEnabled = falseconfig.providesAudioData = falseconfig.maximumNumberOfTrackedFaces =  1config.isLightEstimationEnabled = trueuiView.delegate = context.coordinatoruiView.session.run(config,options: [.resetTracking, .removeExistingAnchors])

由于并非所有支持 ARKit 的设备都支持人脸检测跟踪,因此在开启人脸检测跟踪之前,首先应当检测用户设备是否支持人脸检测,如果支持。再设置诸如 isLightEstimationEnabled、maximumNumberOfTrackedFaces等属性,然后启动 ARSession。
除了人脸姿态,ARKit 还提供了每个已检测到的人脸网格(ARFaceGeometry),该网络包含1220个项点,网格数据包括顶点(vertices)、索引 (trianglelndices)、三角形数量(triangleCount)、纹理坐标(textureCoordinates) 等相关信息,利用人脸网格,开发者就可以渲染出人脸形状,或者对人脸网络进行自定义贴图等。
到目前为止,RealityKit 并不支持人脸网格几何生成与渲染,本节我们将使用 SceneKit 进行演示,我们只关注与人脸网格相关处理,其他 SceneKit 相关技术细节,需读者自行查阅 SceneKit资料。
ARKit 会根据每个检测到的人脸提供与之相应形状、尺寸、表情的网格信息,在使用 SceneKit 渲染人脸网格时,有3个类非常重要:ARFaceAnchor、ARFaceGeometry、ARSCNFaceGeometry。
ARFaceAnchor 继承自 ARAnchor,是专门用于锚定人脸的锚点,其 transform属性指定相对于世界坐标系的人脸位置与方向,利用它就可以锚定生成的人脸网格。
ARFaceGeometry 包含 ARKit 生成的人脸网格信息,包括顶点、索引、UV坐标等所有信息。
ARSCNFaceGeometry 则是利用 ARFaceGeometry 网格数据生成 SCNGeometry,可以直接作为SceneKit 场景中的节点。检测与渲染人脸网格的典型代码如下所示。

struct  FaceCheckingContainer: UIViewRepresentable {@Binding var faceMetre: Boolfunc makeUIView(context: Context) -> ARSCNView {let arView = ARSCNView(frame: .zero)return arView}func updateUIView(_ uiView: ARSCNView, context: Context) {guard ARFaceTrackingConfiguration.isSupported else {return}if faceMetre {}let config = ARFaceTrackingConfiguration()config.isWorldTrackingEnabled = falseconfig.providesAudioData = falseconfig.maximumNumberOfTrackedFaces =  1config.isLightEstimationEnabled = trueuiView.delegate = context.coordinatoruiView.session.run(config,options: [.resetTracking, .removeExistingAnchors])}func makeCoordinator() -> FaceCheckingContainerCoordinator {FaceCheckingContainerCoordinator(self)}class FaceCheckingContainerCoordinator: NSObject, ARSessionDelegate,ARSCNViewDelegate {var parent : FaceCheckingContainerinit(_ parent: FaceCheckingContainer) {self.parent = parent}func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {guard  let device = renderer.device  else {return nil}let faceGeometry = ARSCNFaceGeometry(device: device)let node = SCNNode(geometry: faceGeometry)if parent.faceMetre {//显示图片面具let matrial = node.geometry?.firstMaterialmatrial?.diffuse.contents =  "face.scnassets/face.png"node.geometry?.firstMaterial?.fillMode = .fill}else {//显示网格node.geometry?.firstMaterial?.fillMode = .lines}return node}func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {guard let faceanchor = anchor as? ARFaceAnchor,let facegeometry = node.geometry as? ARSCNFaceGeometry else {return}facegeometry.update(from: faceanchor.geometry)}}}

请添加图片描述
在代码中,首先检查了当前设备对人脸检测的支持情况,然后使用 ARFace 配置并运行了人脸检测 ARSession,当 ARKit 检测到人脸时,我们将从 ARSCNFaceGeomtry人脸几何网格并使用线框的渲染模式进行谊染,检测效果如上图左图所示。
在 AR 应用运行时,ARKit 会根据检测到的人脸方向、表情实时更新人脸网格,寸变化,我们使用 renderer(_:didUpdate:for:)代理方法对人脸网格进行了实时更新检测到的人脸网格不仅包括几何顶点信息,也包括 UV 坐标信息,因此,我们还可以使用静态、动态的纹理贴图进行渲染,效果如上图右图所示。利用ARKit 人脸网格贴图可以实现很多有意思的贴纸效果,如腮红、口红、额纹等,在电子商务试妆方面也可以应用。

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

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

相关文章

提高供电可靠性:配网故障定位装置的实际应用与效果

随着电力系统的不断发展,提高供电可靠性成为了业界关注的焦点。在这个过程中,恒峰智慧科技研发的配网故障定位装置发挥着越来越重要的作用。本文将详细介绍一种基于行波测距技术的配网故障定位装置HFP-GZS1000,以及其在实际应用中的效果。 一…

3d gaussian splatting介绍整理

3D 高斯分布是用于实时辐射场渲染的 3D 高斯分布中描述的一种光栅化技术,它允许实时渲染从小图像样本中学习到的逼真场景。 paper github 本文翻译整理自: blog: Introduction to 3D Gaussian Splatting DDPMs - Part 2 给出一些2D图片,用…

2401llvm,clang的libtooling

LibTooling(库工具) LibTooling是个支持基于Clang编写独立工具的库. 在此,为LLVM安装Clang工具 介绍 用LibTooling构建的工具(如Clang插件)通过代码运行FrontendActions. 这里演示运行Clang的快速检查一堆代码语法的SyntaxOnlyAction的不同方法. 解析内存中的代码片 如果想…

PyTorch 添加 C++ 拓展

参考内容:pytorch添加C拓展简单实战编写及基本功能测试 文章目录 第一步:编写 C 模块test.htest.cpp 第二步:编写 setup.py第三步:安装 C 模块第四步:验证安装第五步:C 模块使用test_cpp1.pytest_cpp2.py 运…

信息安全认证首选CISP-PTE

🔥在信息安全领域,CISP-PTE认证正逐渐成为行业的新星。作为中国信息安全测评中心推出的专业认证,CISP-PTE为信息安全从业者提供了国内Z高标准的资质培训。 🎯为什么选择CISP-PTE? 1️⃣业界认可:CISP-PTE是…

fMRI数据处理(随时更新)

要开始学习处理fMRI的数据了。 一、使用matlab工具包SPM读取fMRI数据 (1)首先得安装工具包SPM,我参考的是下面这篇博客: 在matlab下安装spm工具_spmas包matlab-CSDN博客 (2)使用SPM读取数据&#xff0c…

oracle10g rac节点启动没进程没日志

一节点正常运行,二节点通过crsctl start crs启动,发现alert日志及所有日志都没生成,oracle用户下连一个相关进程都没有清理缓存:rm -rf /tmp/.oracle/服务挨个启动也无效:/etc/init.evmd run >/dev/null 2>&…

抖音详情API:视频内容获取与解析技巧

一、引言 抖音是一款广受欢迎的短视频分享平台,每天都有大量的用户在抖音上分享自己的生活点滴和创意作品。对于开发者而言,如何获取并解析抖音上的视频内容,是一项极具挑战性的任务。本文将详细介绍抖音详情API,以及如何使用它来…

CVPR 2023: Make-a-Story Visual Memory Conditioned Consistent Story Generation

我们采用以下 6 个分类标准来详细解释本文的研究主题: 1. 生成模型类型: 基于扩散的:这种方法通过前向扩散过程迭代地将噪声细化为图像。这允许生成高质量的图像,并控制特定方面,如场景元素和照明。基于注意力的:注意力机制有助于模型在生成每个帧时集中在文本描述和视觉…

如何训练和导出模型

介绍如何通过DI-engine使用DQN算法训练强化学习模型 一、什么是DQN算法 DQN算法,全称为Deep Q-Network算法,是一种结合了Q学习(一种价值基础的强化学习算法)和深度学习的算法。该算法是由DeepMind团队在2013年提出的,…

2024亚马逊开店教程:开店准备与注册流程指南

随着新一年的到来,亚马逊开启了新一轮的卖家入驻,并且针对新卖家优化了入驻流程,下面为大家简单整理一下最新亚马逊入驻教程,有想要入驻开店的小伙伴速速看过来! 一、开店前准备 1、账号环境准备 为了防止账号由于网…

将 Amazon Bedrock 与 Elasticsearch 和 Langchain 结合使用

Amazon Bedrock 是一项完全托管的服务,通过单一 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型 (FMs) 选择,以及广泛的 构建生成式 AI 应用程序所需的功能,简化开发,…

MS2510:8 比特高速模数(ADC)转换器

描述: MS2510 是 8 比特, 20MSPS 模数转换器( ADCs ) , 同时使用一个半闪速结构。 MS2510 在 5V 的电源电压下工作,其典型功耗只有 130mW ,包括一个内部的采样保持电路,具有 高阻抗方…

斐波那契数列

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

网闸网络ip端口映射原理分析

今天我们进行网闸网络ip端口映射原理分析:即两个不同网段的网址进行网络通信,需要路由器、网关等配置。举例更形象一些。 一、相同端口映射 1、正向访问 比如两个不同网段的网络ip:A:10.18.3.119 需要和B:10.199.177.10 进行通信,A要访问…

ffmpeg和opencv一些容易影响图片清晰度的操作

ffmpeg 转视频或者图片,不指定码率清晰度会下降 ffmpeg -i xxx.png xxx.mp4 码率也叫比特率(Bit rate)(也叫数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频…

PyTorch中self.layers的作用

self.layers 是一个用于存储网络层的属性。它是一个 nn.ModuleList 对象,这是PyTorch中用于存储 nn.Module 子模块的特殊列表。 为什么使用 nn.ModuleList? 在PyTorch中,当需要处理多个神经网络层时,通常使用 nn.ModuleList 或 …

TCP三次握手-普通话版

前言:UDP和TCP 总拿UDP和TCP进行比较,为什么呢?因为UDP是不可靠传输,数据过来后把数据分成小份后就发送出去了,我不管你们收没收到哈,反正我是发过去了,你能收到多少就看这网速行不行&#xff0…

IP被封怎么办?访问网站时IP被阻止?解决IP禁令全方法

相信很多人遇到过IP禁令:比如你在访问社交媒体、搜索引擎或电子商务网站时会被限制访问,又或者你的的账号莫名被封,这些由于网络上的种种限制我们经常会遭遇IP被封的情况,导致无法使用继续进行网络行动。在本文中,我们…

linux动态库,静态库

参考 链接 https://blog.csdn.net/Goforyouqp/article/details/132106168 /* ---------- h.h 文件 -------------- */ #ifndef H_H #define H_H void print(void); #endif /* ---------- h.c 文件 -------------- */ #include "h.h" #include &l…