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

【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 人脸网格贴图可以实现很多有意思的贴纸效果,如腮红、口红、额纹等,在电子商务试妆方面也可以应用。

相关文章:

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

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

ES的一些名称和概念总结

概念 先看看ElasticSearch的整体架构: 一个 ES Index 在集群模式下,有多个 Node (节点)组成。每个节点就是 ES 的Instance (实例)。每个节点上会有多个 shard (分片), P1 P2 是主分片, R1 R2…...

Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析

2.3.3 集成 阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了,接下来我们就需要在案例当中集成oss对象存储服务,来存储和管理案例中上传的图片。 在新增员工的时候,上传员工的图像,而之所以需要上传员工的图像&…...

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台,在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因,调用树展示帮助你理解程序,支持 Go、Python、Ruby 语言。 Pyroscope 可以…...

【Git】windows系统安装git教程和配置

一、何为Git Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 二、git安装包 有2种版本,Git for Windows Setup和Git for Windows Portable(便携版)两个版本都可以。 三、Git for Windows Por…...

办公技巧:PPT制作技巧分享,值得收藏

目录 1、黑屏/白屏你用过么 2、图形组合替代动画刷 3、等距分布图形元素 4、快速统一字体 5、文本框也是可以改的 6、批量修改形状 7、搞定“怎么也选不中” 8、妙用CtrlD 9、图片阵列怎么做 10、临时放大某一区域 11、Word快速导入PPT 12、炫酷小人怎么做的&#…...

Google Chrome RCE漏洞 CVE-2020-6507 和 CVE-2024-0517 流程分析

本文深入研究了两个在 Google Chrome 的 V8 JavaScript 引擎中发现的漏洞,分别是 CVE-2020-6507 和 CVE-2024-0517。这两个漏洞都涉及 V8 引擎的堆损坏问题,允许远程代码执行。通过EXP HTML部分的内存操作、垃圾回收等流程方式实施利用攻击。 CVE-2020-…...

前端怎么监听手机键盘是否弹起

摘要: 开发移动端中,经常会遇到一些交互需要通过判断手机键盘是否被唤起来做的,说到判断手机键盘弹起和收起,应该都知道,安卓和ios判断手机键盘是否弹起的写法是有所不同的,下面讨论总结一下两端的区别以及…...

本地生活服务平台加盟前景与市场分析

随着短视频市场的的不断发展,人们的生活方式也在发生着巨大的变化。在这个数字化的时代,越来越多的创业者开始注重本地生活服务,这也为创业者提供了一个绝佳的商机。加盟本地生活服务平台,既可以抓住这波风口,又可以满…...

蓝桥杯备战——7.DS18B20温度传感器

1.分析原理图 通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。 2.查阅DS18B20使用手册 比赛的时候是会提供DS18B20单总线通讯协议的代码,但是没有提供读取温度数据的代码,所以还是需要我们去查看手册,我只把重要部分截下来了 …...

黑盒测试用例的具体设计方法(7种)

7种常见的黑盒测设用例设计方法,分别是等价类、边界值、错误猜测法、场景设计法、因果图、判定表、正交排列。 (一)等价类 1.概念 依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选…...

docker镜像管理命令

文章目录 docker imagesdocker builddocker rmidocker tagdocker savedocker loaddocker importdocker commitdocker login/logoutdocker pulldocker pushdocker search总结 docker images 列出本地镜像。 docker images [OPTIONS] [REPOSITORY[:TAG]]OPTIONS说明&#xff1a…...

深入理解STM32中断处理机制

深入理解STM32中断及其使用方法(基于HAL库) STM32微控制器作为一款强大的嵌入式系统芯片,在各种应用中都需要使用中断来实现实时响应和处理各种事件。本文将深入讨论STM32中断的概念、HAL库的中断处理机制以及如何在STM32CubeMX中配置和使用…...

基于机器学习的地震预测(Earthquake Prediction with Machine Learning)

基于机器学习的地震预测(Earthquake Prediction with Machine Learning) 一、地震是什么二、数据组三、使用的工具和库四、预测要求五、机器学习进行地震检测的步骤六、总结 一、地震是什么 地震几乎是每个人都听说过或经历过的事情。地震基本上是一种自…...

《30天自制操作系统》 第一周(D1-D7) 笔记

前言:这是我2023年5月份做的一个小项目,最终是完成了整个OS。笔记的话,只记录了第一周。想完善,却扔在草稿箱里许久。最终决定,还是发出来存个档吧。 一、汇编语言 基础指令 MOV: move赋值,数据传送指令…...

SQL注入:报错注入

SQL注入系列文章:初识SQL注入-CSDN博客 SQL注入:联合查询的三个绕过技巧-CSDN博客 目录 什么是报错注入? 报错注入常用的3个函数 UpdateXML ExtractValue Floor rand(随机数) floor(向上取整&…...

K8s 安装部署-Master和Minion(Node)文档

K8s 安装部署-Master和Minion(Node)文档 操作系统版本:CentOS 7.4 Master :172.20.26.167 Minion-1:172.20.26.198 Minion-2:172.20.26.210(后增加节点) ETCD:172.20.27.218 先安装部署ETC…...

OpenAI 降低价格并修复拒绝工作的“懒惰”GPT-4,另外ChatGPT 新增了两个小功能

OpenAI降低了GPT-3.5 Turbo模型的API访问价格,输入和输出价格分别降低了50%和25%。这对于使用API进行文本密集型应用程序的用户来说是一个好消息。 OpenAI官网:OpenAI AIGC专区:aigc 教程专区:AI绘画,AI视频&#x…...

springboot+value静态属性获取配置文件中的值的操作方法

1.配置类需要让spring管理 2.set方法不要加static 3.如果静态属性是private修饰,则在使用的时候,需要 类名.getXXX方法 如果静态属性是public修饰,则在使用的时候,需要 类名.属性名 import org.springframework.beans.factory.an…...

Prometheus 架构全面解析

在本指南中,我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统,能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标,并根据阈值收到警报。 此外,在当今世界,可观…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...