RealityKit中的多人脸检测

时间:2020-01-06 19:49:51

标签: swift augmented-reality arkit realitykit reality-composer

我已经在Reality Composer中的人脸锚中添加了内容,稍后,在加载我在Reality Composer中创建的Experience之后,我创建了一个人脸跟踪会话,如下所示:

guard ARFaceTrackingConfiguration.isSupported else { return }
let configuration = ARFaceTrackingConfiguration()
configuration.maximumNumberOfTrackedFaces = ARFaceTrackingConfiguration.supportedNumberOfTrackedFaces
configuration.isLightEstimationEnabled = true

arView.session.delegate = self
arView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])

这并不是将内容添加到所有正在检测的面孔上,我知道它正在检测一个以上的面孔,因为其他面孔遮挡了粘附在另一张面孔上的内容,这是对{{1 }}或我在作曲家中缺少什么?实际上,由于它是如此简单和简单,所以很难错过。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用带有嵌入式Face Face Anchor的模型(即,来自Reality Composer的Face Tracking预设的模型),则无法在RealityKit中成功进行多面跟踪(您只能在.face中使用一个模型锚,不是三个)。或者,您可以使用此类模型,但是您需要删除这些嵌入式AnchorEntity(.face)锚点。尽管有更好的方法–只需以.usdz格式加载模型。

让我们看看有关嵌入式锚点的Apple文档says

您可以使用代码手动加载和锚定Reality Composer场景,就像处理其他ARKit内容一样。当您在代码中锚定场景时,RealityKit会忽略该场景的锚定信息。

Reality Composer支持5种锚点类型:HorizontalVerticalImageFaceObject。它针对每种锚点类型显示一组不同的指南,以帮助您放置内容。如果选择了错误的选项,或者稍后改变主意如何锚定场景,则可以稍后更改锚点类型。

有两种选择:

  1. 在新的Reality Composer项目中,取消选择启动时看到的操作表左下方的Create with default content复选框。

  2. 在RealityKit代码中,删除现有的Face Anchor并分配一个新的 boxAnchor.removeFromParent() 。后一种选择不是很好,因为您需要从头开始重新创建对象位置:

    AnchorEntity()

不过,我已经在ARAnchor实例方法中使用了session(:didUpdate:)renderer()初始化器(就像SceneKit的import ARKit import RealityKit extension ViewController: ARSessionDelegate { func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) { guard let faceAnchor = anchors.first as? ARFaceAnchor else { return } let anchor1 = AnchorEntity(anchor: faceAnchor) let anchor2 = AnchorEntity(anchor: faceAnchor) anchor1.addChild(model01) anchor2.addChild(model02) arView.scene.anchors.append(anchor1) arView.scene.anchors.append(anchor2) } } class ViewController: UIViewController { @IBOutlet var arView: ARView! let model01 = try! Entity.load(named: "angryFace") // USDZ file let model02 = try! FacialExpression.loadSmilingFace() // RC scene override func viewDidLoad() { super.viewDidLoad() arView.session.delegate = self guard ARFaceTrackingConfiguration.isSupported else { fatalError("Alas, Face Tracking isn't supported") } } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let config = ARFaceTrackingConfiguration() config.maximumNumberOfTrackedFaces = 2 arView.session.run(config) } } 实例方法一样)实现了多面跟踪。

这是我的代码:

leaflet.realtime