如何使用 ARKit 判断一张脸是否像图像一样平坦?

问题描述 投票:0回答:1

如何确定检测到的人脸是否像图像一样平坦或在 ARKit 中具有不同的地形?我目前正在使用

ARFaceTrackingConfiguration
.

我尝试的一种方法是找到每个顶点与面部几何形状之间的平均距离,如果它低于某个任意阈值,则认为面部是平坦的。

let vertices = faceGeometry.vertices
var totalDistance: Float = 0
for i in 0..<vertices.count {
    let vertex = vertices[i]
    totalDistance += simd_length(vertex)
}
let averageDistance: Float = totalDistance / Float(vertices.count)
if averageDistance < 0.07 {
    print("Flat face")
} else {
    print("Real face")
}

这个想法是,平均而言,平面通常会有更近的顶点。然而,这种方法在测试时提供了不同的结果。

我也试过比较假脸(图像)和真实 3D 脸的深度,但由于前者应该是平的,它们结果是一样的。

var minZ = Float.infinity
var maxZ = -Float.infinity
for vertex in faceAnchor.geometry.vertices {
    let vertexVector = simd_float4(vertex, 1)
    let worldVertex = faceAnchor.transform * vertexVector
    let transformedVertex = SCNVector3(worldVertex.x, worldVertex.y, worldVertex.z)
    minZ = min(minZ, transformedVertex.z)
    maxZ = max(maxZ, transformedVertex.z)
}

let depth = maxZ - minZ
print(depth)
ios swift scenekit arkit face-detection
1个回答
0
投票

您需要分析带有人脸(或具有真实拓扑结构的人)的平面图像的深度图,以了解灰色的均匀性。平面图像具有微妙的渐变(几乎是纯灰色),而真实面部具有大量灰色调。

© www.soinside.com 2019 - 2024. All rights reserved.