- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 ARKit 的 3D 面部网格获取眼睛的宽度和两只眼睛的距离。
我使用了ARAnchor的CATransform3D;
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)) " )
}
作为 leftcaTransform3DValue 的结果,我得到了这样的值;
m11 = -5.22553711590422e-315
...
...
...
m44 = 2.13285635582599e-314
rightcaTransform3DValue 也是如此。
所以我的问题是这些值是否指定了任何尺寸或尺寸测量值?
我可以计算眼睛的宽度和两只眼睛之间的距离吗?
非常感谢任何帮助。
最佳答案
So my question is do these values specify any dimension or size measurement?
没有。你得到的数字是胡说八道,因为你得到它们的方式是……也许不是胡说八道,但非常接近。
blendShapes
ARFaceAnchor
上的字典记录为具有 NSNumber
类型的值,其中 NSNumber
的基础数值是介于 0.0 和 1.0 之间的 float 。
NSNumber
是许多可能类型的标量数值的对象包装器。它具有将其基础值作为各种类型获取的方法(通过转换为相同数字的不同表示)。但鉴于这些特定数字被记录为介于 0 和 1 之间的浮点值,因此获取 intValue
或 boolValue
等没有多大意义。
NSNumber
是 NSValue
的子类,它是许多种类的对象包装器,这些类型不能以其他方式表示为对象——范围、大小、指针和 3D 变换矩阵等。这些类型不能像数字那样相互转换,因此从 NSValue
中提取的唯一有意义的类型是它创建时使用的类型。任何其他类型都会让你胡说八道。
返回blendShapes
- 进一步记录了字典中的每个混合形状值不仅仅是一个数字,而是一个告诉你动画参数进度的数字。 eyeBlinkLeft
并没有声称会告诉您任何关于左眼的位置或大小的信息——它会告诉您左眼睑“眨眼”(闭合)的程度。
你找错了树,但如果你查看你正在使用的类和属性的文档,你以后就能更好地做出有根据的猜测。
Can I calculate width of the eyes and distance between two eyes?
更新:在“ARKit 2”(iOS 12 中的 ARKit)中,leftEyeTransform
和 rightEyeTransform
提供每个眼球中心的 3D 位置(相对于面部 anchor )。 (还有每只眼睛的方向。)这可能对您的用例有帮助,但如果您实际需要的是与瞳孔或眼睛开口的位置/大小有关...
没有 API 可以为您执行此操作。 ARKit 确实提供了您可以用来自己找到它的信息,但并不能保证始终有效。
ARFaceGeometry
给你一个三角形网格,它以一种在 session 中拓扑稳定的方式在脸上映射几百个左右的点。也就是说,例如,假设网格中的第 57 个顶点是鼻尖,即使面部皱纹和拉伸(stretch)以及该点相对于其他点的位置发生变化,它也会留在鼻尖上。
问题:
因此,尽管进行一些实验,您也许能够找出哪些顶点是左眼的内角、左眼的外角等。一旦您这样做了,您就可以查看它们的位置来估计有用的眼宽、瞳孔间距等数量。但是,这些测量值是基于可能并不总是适用的网格假设,因此您不知道应用程序的用户何时会中断。
关于ios - CATransform3D 能否用于获取面部网格中的眼睛大小尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50286403/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!