【问题标题】:Augmented Faces API – How facial landmarks generated?Augmented Faces API – 面部地标是如何生成的?
【发布时间】:2019-07-19 01:53:49
【问题描述】:

我是一名 IT 学生,想了解(了解)更多关于 ARCore 中的 Augmented Faces API 的信息。

我刚刚看到ARCore V1.7 release 和新的Augmented Faces API。我得到了这个 API 的巨大潜力。但我没有看到任何关于这个主题的问题或文章。所以我在质疑自己,这里有一些关于这个版本的假设/问题。

假设

  • ARCore 团队正在使用(如 Instagram 和 Snapchat)机器学习,在整个面部生成地标。应该是HOG Face Detection..

问题

  • ARCore 如何在智能手机上的用户脸上生成 468 个点?即使在源代码中也找不到任何回应。
  • 他们如何从简单的智能手机摄像头中获得深度?
  • 如何拒绝人脸检测/跟踪到自定义对象或身体的其他部位(如手)?

因此,如果您对此主题有任何建议或意见,让我们分享!

【问题讨论】:

    标签: java kotlin augmented-reality arcore sceneform


    【解决方案1】:
    1. ARCore 的新 Augmented Faces API 可用于不带深度传感器的前置摄像头,提供高质量的468-point 3D 规范网格,允许用户使用将动画蒙版、眼镜、皮肤修饰等效果附加到他们的脸上。网格提供了坐标和特定区域的锚点,可以添加这些效果。

    我坚信在 ARCore 1.7 的引擎盖下借助计算机视觉算法生成面部标志检测。同样重要的是,您可以通过创建启用“前置摄像头”和增强面“网格”模式的 ARCore 会话来开始使用 Unity 或 Sceneform。请注意,使用前置摄像头时,平面检测等其他 AR 功能目前不可用。 AugmentedFace 扩展了 Trackable,因此可以像平面、增强图像和其他 Trackables 一样检测和更新人脸

    如您所知,2 多年前,Google 发布了Face API,它执行人脸检测,定位图片中的人脸,以及他们的位置(他们在图片中的位置)和方向(他们面对的方向,相对到相机)。 Face API 允许您检测地标(脸上的兴趣点)并执行分类以确定眼睛是睁着还是闭着,以及脸部是否在微笑。 Face API 还可以检测和跟踪运动图像中的人脸,这就是所谓的人脸跟踪。

    所以,ARCore 1.7 只是从 Face API 中借用了一些架构元素,现在它不仅可以检测面部地标并为其生成 468 个点,还可以以 60 fps 和将 3D 面部几何体贴在他们身上

    请参阅 Google 的 Face Detection Concepts Overview

    1. 计算由移动 RGB 相机拍摄的视频中的深度通道并不是一门火箭科学。您只需将视差公式应用于跟踪的特征。因此,如果静态对象上特征的平移幅度非常高——被跟踪对象更靠近相机,而如果静态对象上特征的幅度非常低——被跟踪对象离相机更远。这些计算深度通道的方法对于The Foundry NUKEBlackmagic Fusion 等合成应用程序已经使用了10 多年。现在,在 ARCore 中可以使用相同的原理。

    2. 您不能拒绝对自定义对象或身体的其他部位(例如手)进行人脸检测/跟踪算法。 Augmented Faces 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> faceList = session.getAllTrackables(AugmentedFace.class);
    

    最后渲染效果:

    for (AugmentedFace face : faceList) {
    
        // 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);
        
        // .......
    }
    

    【讨论】:

    • 非常感谢@ARGeo,我现在完全了解 FaceDetection 了!我在AugmentedFaces 上寻找Trackable,因为这就是为什么我认为可以拒绝它用于各种自定义对象/身体部位。我可以像 FaceDetection 一样创建自己的手部地标检测器,并与AugmentedFaces 类扩展Trackable 一样,然后能够生成一个网格以对其应用过滤器?
    • 我想 Google 会在一段时间内为 ARCore 开发人员提供对独特工具和类的完全访问权限。让我们拭目以待。目前,甚至文档还没有准备好。 )))
    • 增强面是否支持 ios?
    • 我不知道。我还没有尝试过适用于 iOS 的 Augmented Faces。
    • 当我们在脸上添加像眼镜框这样的 3d 对象时。它没有以正确的深度显示。请查看屏幕排序。 drive.google.com/file/d/1NBAu64LpRLgfJ7M7UU8DDh0iuIzwUhKB/…
    猜你喜欢
    • 2020-03-06
    • 2021-10-02
    • 2010-10-10
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多