所以我的问题是这些值是否指定任何尺寸或尺寸测量?
不。你得到的数字是无稽之谈,因为你得到它们的方式是……也许不完全是无稽之谈,但非常接近。
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 版本、设备等之间发生变化。
因此,通过一些实验,您可能能够计算出哪些顶点是左眼的内角、左眼的外角等。一旦您这样做了,您就可以查看它们的位置来估计有用的数量,例如眼睛然而,这些测量结果是基于对网格的假设,而这些假设可能并不总是成立,因此您不知道它何时会对应用程序的用户造成破坏。