CATransform3D 可以用来获取 Face Mesh 中的眼睛尺寸吗?

2024-01-30

我正在尝试使用 ARKit 的 3D Face Mesh 获取眼睛的宽度和 2 只眼睛的距离。

我用过CA变换3D of ARAnchor;

 struct CATransform3D
{
  CGFloat m11, m12, m13, m14;
  CGFloat m21, m22, m23, m24;
  CGFloat m31, m32, m33, m34;
  CGFloat m41, m42, m43, m44;
};

下面是我的代码;

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {

guard let faceAnchor = anchor as? ARFaceAnchor else { return }

let leftcaTransform3DValue : CATransform3D = (faceAnchor.blendShapes[.eyeBlinkLeft]?.caTransform3DValue)!

let rightcaTransform3DValue : CATransform3D = (faceAnchor.blendShapes[.eyeBlinkRight]?.caTransform3DValue)!

print("  m11 : \(String(describing:leftcaTransform3DValue.m11)) m12 : \(String(describing:leftcaTransform3DValue.m12)) m13 : \(String(describing:leftcaTransform3DValue.m13)) m14 : \(String(describing:leftcaTransform3DValue.m14)) m21 : \(String(describing:leftcaTransform3DValue.m21)) m22 : \(String(describing:leftcaTransform3DValue.m22)) m23 : \(String(describing:leftcaTransform3DValue.m23)) m24 : \(String(describing:leftcaTransform3DValue.m24)) m31 : \(String(describing:leftcaTransform3DValue.m31)) m32 : \(String(describing:leftcaTransform3DValue.m32)) m33 : \(String(describing:leftcaTransform3DValue.m33)) m34 : \(String(describing:leftcaTransform3DValue.m34)) m41 : \(String(describing:leftcaTransform3DValue.m41)) m42 : \(String(describing:leftcaTransform3DValue.m42)) m43 : \(String(describing:leftcaTransform3DValue.m43)) m44 : \(String(describing:leftcaTransform3DValue.m44)) " )
}

并且由于leftcaTransform3D 值我得到的价值观是这样的;

m11 =  -5.22553711590422e-315
...
...
...
m44 =   2.13285635582599e-314

同样对于rightcaTransform3DValue.

所以我的问题是这些值是否指定任何尺寸或尺寸测量?

我可以计算眼睛的宽度和两眼之间的距离吗?

非常感谢任何帮助。


所以我的问题是这些值是否指定任何尺寸或尺寸测量?

不。你得到的数字是无稽之谈,因为你得到它们的方式是……也许不完全是无稽之谈,但非常接近。

The blendShapes https://developer.apple.com/documentation/arkit/arfaceanchor/2928251-blendshapes词典上ARFaceAnchor被记录为具有类型值NSNumber,其中基础数值NSNumber是 0.0 到 1.0 之间的浮点数。

NSNumber https://developer.apple.com/documentation/foundation/nsnumber是许多可能类型的标量数值的对象包装器。它具有以各种类型获取其基础值的方法(通过转换为相同数字的不同表示形式)。但鉴于这些特定数字被记录为 0 到 1 之间的浮点值,因此获取这些数字没有多大意义。intValue or boolValue, etc.

NSNumber是一个子类NSValue https://developer.apple.com/documentation/foundation/nsvalue,这是许多对象的包装器kinds无法以其他方式表达为对象的类型 - 范围、大小、指针和 3D 变换矩阵等。这些类型不能像数字那样相互转换,因此从数据中取出的唯一有意义的类型NSValue是它创建时所用的类型。任何其他类型都会给你带来废话。

Back to blendShapes https://developer.apple.com/documentation/arkit/arfaceanchor/2928251-blendshapes— 进一步记录表明,字典中的每个混合形状值不仅仅是一个数字,而且是一个告诉您动画参数进度的数字。eyeBlinkLeft https://developer.apple.com/documentation/arkit/arfaceanchor.blendshapelocation/2928261-eyeblinkleft并没有声称告诉您左眼的位置或大小,而是告诉您左眼睑的“眨眼”(闭合)程度。

您找错了树,但是如果您查看正在使用的类和属性的文档,您稍后将能够更好地做出有根据的猜测。

我可以计算眼睛的宽度和两眼之间的距离吗?

Update:在“ARKit 2”(又名 iOS 12 中的 ARKit)中,leftEyeTransform https://docs.devpubs.apple.com/documentation/arkit/arfaceanchor/2968191-lefteyetransform and rightEyeTransform https://docs.devpubs.apple.com/documentation/arkit/arfaceanchor/2968193-righteyetransform提供每个眼球中心的 3D 位置(相对于面部锚点)。 (还有每只眼睛的方向。)这可能对您的用例有帮助,但如果您实际上想要的与瞳孔或眼睛张开的位置/大小有关......

没有 API 可以为您执行此操作。 ARKit 确实提供了您可以用来自行查找的信息,但不能保证始终有效。

ARFaceGeometry https://developer.apple.com/documentation/arkit/arfacegeometry为您提供一个三角形网格,以在会话中拓扑稳定的方式映射面上大约数百个点。也就是说,例如,假设网格中的第 57 个顶点是鼻尖,即使面部皱纹和拉伸以及该点相对于其他点的位置发生变化,它也会保留在鼻尖上。

问题:

  • API 不会告诉您哪些顶点(网格中的点)是哪些(就眼角、鼻尖等面部标志而言)。
  • 网格的拓扑在会话内是稳定的,但 Apple 不保证它不会在 iOS 版本、设备等之间发生变化。

因此,通过一些实验,您可能能够计算出哪些顶点是左眼的内角、左眼的外角等。一旦您这样做了,您就可以查看它们的位置来估计有用的数量,例如眼睛然而,这些测量结果是基于对网格的假设,而这些假设可能并不总是成立,因此您不知道它何时会对应用程序的用户造成破坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CATransform3D 可以用来获取 Face Mesh 中的眼睛尺寸吗? 的相关文章

  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • 在运行时获取 iPhone 应用程序的产品名称?

    如何才能实现这一目标 我想获取名称 以便可以在应用程序中显示它 当然 每次更改名称时不必在代码中更改它 Try this NSBundle bundle NSBundle mainBundle NSDictionary info bundl
  • 无法在 iOS 企业应用程序中连接到 example.com

    我面临着一个严重的问题 我正在尝试使企业应用程序上线 通过使用 BetaBuilder 我按照以下步骤操作 myApp ipa manifest plist index html 清单 plist
  • 如何提高包含大量小图像的 UCollectionView 的性能?

    在我的 iOS 应用程序中我有UICollectionView显示大约 1200 个小 35x35 点 图像 图像存储在应用程序包中 我正确地重用了UICollectionViewCell但仍然存在性能问题 具体取决于我处理图像加载的方式
  • 相当于 Interface Builder 中 UIButton 的动态类型“自动调整字体”设置?

    UILabel 有一个Dynamic Type Automatically Adjusts FontInterface Builder 属性检查器中的复选框 Interface Builder 中是否有等效项用于自动调整 UIButton
  • Xcode 无法找到 strip-frameworks.sh 目录

    我最近将 Xcode 更新到版本 7 1 其中包括 Swift 2 1 我安装了 Swift 2 1 没有遇到任何问题 在尝试运行我的项目后 我意识到我需要获取最新版本的 Realm 因为之前的版本不支持 Swift 2 1 我删除了旧框架
  • 获取对 iOS 应用程序中最顶层视图/窗口的引用

    我正在创建一个可重用的框架 用于在 iOS 应用程序中显示通知 我希望将通知视图添加到应用程序中其他所有内容的顶部 有点像 UIAlertView 当我初始化监听 NSNotification 事件并添加视图作为响应的管理器时 我需要获取对
  • 如何使用MKMapView完成加载委托,可能的“完成显示”委托?

    当用户在选择注释后点击 保存 时 我尝试保存地图视图的缩略图 当用户尚未放大该注释时会出现问题 因此尚未加载关闭缩放级别 这就是用户点击保存后我正在做的事情 将布尔值 saving 设置为 true 居中并放大注释 无动画 当调用mapVi
  • 如何在 Xcode 4 中在 .h 和 .m 之间切换

    刚刚安装的 Xcode 4 到目前为止一切顺利 除了 Apple 更改了所有键盘快捷键 有人知道如何在 h 和 m 之间切换吗 苹果改变了各种快捷键 但要在标头和实现之间切换 新的快捷键是 You can change it back to
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • 带有 Core Data 对象的动态 UITableView 高度

    过去几天我一直在试图解决一个谜团 即为什么我的批处理大小为 20 的 NSFetchedResultsController 总是在获取完成后立即错误 即加载到内存中 我的所有对象 从而导致请求需要约 20 秒 事实证明 这是因为在我的 he
  • 在 Flutter 中显示 iOS 的 PDF 内联文件

    我正在 flutter 中专门为 iOS 开发一个应用程序 现阶段 我需要向其中添加 PDF 文件 问题是 flutter 没有原生的方式来显示 PDF 文件 据我研究 由此tread https github com flutter fl
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • 图像目录中矢量 pdf 的渲染模式设置为模板,但 UIImageView 不会在自定义单元格中对图像进行着色

    我已将所有图像文件迁移到资产目录中 它们都是大小为 1x 的 pdf 向量 它们被设置为呈现为模板 它们的大小和颜色在任何地方都表现得很好 但是有一个来自 xib 的自定义 TableView Cell 我有 6 个 UIImageView
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定
  • iOS 10 的错误? NSDate 日本地区时间描述和 24 小时休息

    这似乎是 iOS 10 的一个错误 在 iOS 8 和 9 中都可以 NSDate date description 的小时描述是错误的 它附加了 24 小时描述和 12 小时描述 我没有使用 NSDateFormatter 只是默认设置

随机推荐

  • connect/expressjs 中的“签名”cookie 是什么?

    我试图弄清楚 签名cookie 到底是什么 网上没有太多 如果我尝试这个 app use express cookieParser A secret 但仍然 Cookies在浏览器上仍然是100 正常的 而且我真的不知道这里的 签名 是什么
  • 如何使用 ZF3 设置延迟加载(任何地方都没有 ServiceLocator 模式)

    我正在编写一个新的 ZF2 应用程序 我注意到 从任何地方 调用服务的 ServiceLocator 使用模式已从 ZF3 中弃用 我想为ZF3编写代码 我能够设置我的控制器在构造函数时调用所有依赖项 但这意味着加载 即Doctrine在我
  • body-parser - 扩展选项(qs 与查询字符串)

    在当前版本中正文解析器 https github com expressjs body parser the extended使用时的选项bodyParser urlencoded 现在需要 在自述文件中 它解释了 扩展选项允许选择使用 q
  • filter_var 和验证整数值

    我正在尝试验证我的变量是否是 32 位有符号整数 我以为我可以用filter var and FILTER VALIDATE INT但显然 PHP 对 int 的定义完全不同 999999999999999999通过没有问题 看着PHP d
  • 内联汇编标签已定义错误[重复]

    这个问题在这里已经有答案了 我正在尝试编写我的第一个内联 asm 程序 它是一个素数函数 我收到这些错误 prime c 30 Error symbol loop top is already defined prime c 38 Erro
  • 从 GraphQL 响应中清除不需要的字段

    我有一个 GraphQL 客户端请求的对象 这是一个相当简单的对象 type Element content ElementContent elementId String name String notes String type Str
  • 导入 db phpMyAdmin - 错误格式参数不正确

    我正在尝试将生产 mysql 数据库导入本地 xampp 测试环境 通过连接到Web管理 mozff 并简单导出sql 不需要其他任何东西 然后转到本地phpmyadmin仪表板并导入 它抛出以下错误 Error 居住环境 数据库服务器 S
  • JScrollPane 滚动到最后添加的行

    我有 JTextArea 文本和 JScrollPane pane new JScrollPane text 我放置pane setAutoScrolls true 当我将一些文本附加到窗格在末尾 最后一行 滚动的组件文本时 如何获得该结果
  • 在 C# 中将 int[] 转换为 byte[]

    我知道如何长期执行此操作 通过创建所需大小的字节数组并使用 for 循环来转换 int 数组中的每个元素 我想知道是否有更快的方法 因为如果上面的方法似乎会崩溃int比一个大sbyte 如果你想要按位复制 即从一个 int 中获取 4 个字
  • 更新嵌套对象时 UseState 不重新渲染

    我通过将数据推送到旧状态对象并将其作为值返回来更新 useEffect 这段代码实际上改变了 useState 中的 series 变量 但没有重新渲染 为什么 import TimeSeries Pipeline Stream Event
  • 如何将windows上的代码文件与WSL/linux同步?

    基本上我有一些 C C 代码需要在 Linux 机器上构建和调试 不幸的是 我的 Windows 笔记本电脑没有足够的可用硬盘空间来安装某些 Linux 发行版 也没有足够的可用 RAM 来舒适地运行 VM 到目前为止 我使用 WSL 处理
  • 存储来自 Google JavaScript API 请求的响应

    在使用 Google 尝试 Google 的 Javascript API 时 我遇到了一个障碍 var response var request gapi client request path plus v1 people THEUSE
  • 如何将图像从客户端发送到服务器节点 js 反应

    我正在尝试创建上传个人资料图像方法 帮助用户在网站上上传他们的个人资料图片 但我遇到了问题 我不知道如何将图像从客户端发送到服务器并使这些图像存储在 cloudinary 或 firebase 上 我的路线如下所示 ProfileAPI j
  • 在 Cocoa Objective-C 中创建模态对话框或窗口?

    我需要创建一个模式对话框 该对话框从 nib 文件加载 并应在主窗口中单击按钮时显示 我可以在 nib 文件中创建自定义窗口 并在单击按钮时加载自定义对话框 但这不是模式对话框 我可以切换回主窗口 MyWindowController is
  • “.tt”扩展名是什么?

    我和一群人一起工作something js tt使用 Knockout 和一堆的 JavaScript 文件something else ttHTML 文件 基础设施主要是带有 Perl 服务 API 的 C 后端 我们使用这些 tt文件来
  • 优化配分函数

    这是Python中的代码 function for pentagonal numbers def pent n return int 0 5 n 3 n 1 function for generalized pentagonal numbe
  • OS X 应用程序沙箱和任意文件访问 - 更新为基于文档?

    我的 OS X 应用程序 当前未沙箱 访问用户设置的目录中包含的文件 选择带有NSOpenPanel并且在整个执行过程中都会保留对该路径的引用 文件列表是通过生成的NSDirectoryEnumerator然后我使用读取和写入这些文件AVA
  • 除了越狱之外,iDevice 上的 UDID 会改变吗?

    我有一位 Beta 测试员 在最后一个 Beta 测试周期后 4 个月 我向他发送了新版本的应用程序的第一个 Beta 测试 当她说无法加载时 我们检查了她的 UDID 它与我们 4 个月前使用的不同 所以我的配置显然不起作用 她说这和以前
  • 构建静态库

    我正在尝试建立一个 a我的 iPhone 项目的静态库 所以 我创建了一个新项目 并使用了模板Cocoa Touch Static Library 然后 在XCode 4 0 我添加我的 m and h files 我已经成功构建了该项目
  • CATransform3D 可以用来获取 Face Mesh 中的眼睛尺寸吗?

    我正在尝试使用 ARKit 的 3D Face Mesh 获取眼睛的宽度和 2 只眼睛的距离 我用过CA变换3D of ARAnchor struct CATransform3D CGFloat m11 m12 m13 m14 CGFloa