ARCore的新
增强现实人脸API可以在前置摄像头没有深度传感器的情况下工作,提供了高质量的
468点
3D规范网格,允许用户将动画面具、眼镜、皮肤修饰等效果附加到他们的脸上。该网格提供
坐标和特定区域的锚点,使得可以添加这些效果。
我相信,在ARCore 1.7的引擎内部,借助于计算机视觉算法生成了面部关键点检测。同时,重要的是指出,您可以通过启用“前置摄像头”和“增强现实人脸网格”模式来创建一个ARCore会话,从而开始使用Unity或Sceneform。请注意,使用前置摄像头时,其他AR功能(例如平面检测)目前不可用。
增强现实人脸
扩展自
可跟踪物体
,因此可以像平面、增强图像和其他可跟踪物体一样检测和更新人脸。
正如您所知,几年前谷歌发布了Face API
,它执行面部检测,定位图片中的面部位置(在图片中的位置)和方向(相对于相机的朝向)。Face API允许您检测地标(脸上的感兴趣点)并执行分类,以确定眼睛是否睁开或闭合,以及面部是否微笑。Face API还可以检测和跟踪移动图像中的面部,这被称为面部跟踪。
因此,ARCore 1.7刚刚从Face API借鉴了一些架构元素,现在不仅可以检测面部地标并为其生成468个点,而且还可以以60 fps实时跟踪它们,并将3D面部几何形状粘贴到它们上面。
请参阅谷歌的面部检测概念概述。
计算移动RGB相机拍摄的视频中的深度通道并不是什么高深的科学。您只需要对跟踪到的特征应用视差公式即可。因此,如果静态物体上特征的振幅相当高,则跟踪的物体离相机更近;如果静态物体上特征的振幅相当低,则跟踪的物体离相机更远。这些计算深度通道的方法在像
The Foundry NUKE和
Blackmagic Fusion这样的合成应用程序中已经使用了10多年。现在,同样的原理也可以在ARCore中使用。
您不能将面部检测/跟踪算法应用于自定义对象或身体的其他部位,例如手。
增强面部API专门为面部开发。
以下是激活增强面部功能的Java代码示例:
public Session createAugmentedFacesSession(Activity activity) throws
UnavailableException {
Session session = new Session(activity,
EnumSet.of(Session.Feature.FRONT_CAMERA));
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) {
AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
faceNode.setParent(scene);
faceNode.setFaceRegionsRenderable(faceRegionsRenderable);
faceNode.setFaceMeshTexture(faceMeshTexture);
}
AugmentedFaces
上的Trackable
,因为我认为这样可以将其拒绝到各种自定义对象/身体部位。我可以像FaceDetection一样创建自己的手部关键点检测器,并像AugmentedFaces
类扩展Trackable
一样做同样的事情,然后能够生成一个网格来应用过滤器? - Zenocode