增强人脸 API - 面部标志生成的原理是什么?

9
我是一名IT学生,想了解更多有关ARCore中增强面部API的信息。
我刚看到ARCore V1.7发布和新的增强面部API。我认为这个API有巨大的潜力。但是我没有看到任何关于这个主题的问题或文章。所以我在自问,下面是我对这个版本的一些假设/问题。

假设

  • ARCore团队正在使用(例如Instagram和Snapchat)机器学习,在脸上生成各种地标。可能使用 HOG人脸检测..

问题

  • ARCore如何在智能手机上在用户脸上产生468个点?即使在源代码中也找不到任何响应。
  • 他们如何从简单的智能手机摄像头中获得深度信息?
  • 如何将面部检测/跟踪转移到自定义对象或身体的其他部位,例如手?

所以如果您对这个问题有任何建议或意见,请分享!

2个回答

9
ARCore的新增强现实人脸API可以在前置摄像头没有深度传感器的情况下工作,提供了高质量的468点3D规范网格,允许用户将动画面具、眼镜、皮肤修饰等效果附加到他们的脸上。该网格提供坐标和特定区域的锚点,使得可以添加这些效果。
我相信,在ARCore 1.7的引擎内部,借助于计算机视觉算法生成了面部关键点检测。同时,重要的是指出,您可以通过启用“前置摄像头”和“增强现实人脸网格”模式来创建一个ARCore会话,从而开始使用Unity或Sceneform。请注意,使用前置摄像头时,其他AR功能(例如平面检测)目前不可用。增强现实人脸扩展自可跟踪物体,因此可以像平面、增强图像和其他可跟踪物体一样检测和更新人脸。

enter image description here

正如您所知,几年前谷歌发布了Face API,它执行面部检测,定位图片中的面部位置(在图片中的位置)和方向(相对于相机的朝向)。Face API允许您检测地标(脸上的感兴趣点)并执行分类,以确定眼睛是否睁开或闭合,以及面部是否微笑。Face API还可以检测和跟踪移动图像中的面部,这被称为面部跟踪。

因此,ARCore 1.7刚刚从Face API借鉴了一些架构元素,现在不仅可以检测面部地标并为其生成468个点,而且还可以以60 fps实时跟踪它们,并将3D面部几何形状粘贴到它们上面

请参阅谷歌的面部检测概念概述

enter image description here

计算移动RGB相机拍摄的视频中的深度通道并不是什么高深的科学。您只需要对跟踪到的特征应用视差公式即可。因此,如果静态物体上特征的振幅相当高,则跟踪的物体离相机更近;如果静态物体上特征的振幅相当低,则跟踪的物体离相机更远。这些计算深度通道的方法在像The Foundry NUKEBlackmagic Fusion这样的合成应用程序中已经使用了10多年。现在,同样的原理也可以在ARCore中使用。
您不能将面部检测/跟踪算法应用于自定义对象或身体的其他部位,例如手。增强面部API专门为面部开发。
以下是激活增强面部功能的Java代码示例:
// Create ARCore session that supports Augmented Faces
public Session createAugmentedFacesSession(Activity activity) throws 
                                                      UnavailableException {

    // Use selfie camera
    Session session = new Session(activity, 
                                  EnumSet.of(Session.Feature.FRONT_CAMERA));

    // Enabling Augmented Faces
    Config config = session.getConfig();
    config.setAugmentedFaceMode(Config.AugmentedFaceMode.MESH3D);
    session.configure(config);
    return session;
}

然后获取检测到的人脸列表:
Collection<AugmentedFace> fl = session.getAllTrackables(AugmentedFace.class);

最后呈现效果:
for (AugmentedFace face : fl) {

    // Create a face node and add it to the scene.
    AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
    faceNode.setParent(scene);

    // Overlay the 3D assets on the face
    faceNode.setFaceRegionsRenderable(faceRegionsRenderable);

    // Overlay a texture on the face
    faceNode.setFaceMeshTexture(faceMeshTexture);
}

1
非常感谢@ARGeo,我现在完全理解了人脸检测!我一直在寻找AugmentedFaces上的Trackable,因为我认为这样可以将其拒绝到各种自定义对象/身体部位。我可以像FaceDetection一样创建自己的手部关键点检测器,并像AugmentedFaces类扩展Trackable一样做同样的事情,然后能够生成一个网格来应用过滤器? - Zenocode
我想Google会在一段时间内为ARCore开发人员提供完整的独特工具和类库。让我们等待它的到来。目前连文档都还没有准备好。))) - Andy Jazz
增强现实面孔功能支持iOS吗? - Maulik Kundaliya
1
当我们在脸上添加3D物体,例如眼镜框架时,它的深度显示不正确。请查看屏幕截图。 https://drive.google.com/file/d/1NBAu64LpRLgfJ7M7UU8DDh0iuIzwUhKB/view?usp=sharing - Sonam Gupta
正如你所说,我创建了一个新的问题 https://dev59.com/zrjna4cB1Zd3GeqP_oAZ 请帮我解决这个问题。 - Sonam Gupta
显示剩余5条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接