1 回答
TA贡献1830条经验 获得超9个赞
ARCore 新的Augmented Faces API用于不带深度传感器的前置摄像头,提供高质量的
468-point
3D 标准网格,允许用户将动画蒙版、眼镜、皮肤修饰等效果附加到他们的脸上。网格提供坐标和区域特定的锚点,可以添加这些效果。
我坚信在 ARCore 1.7 的引擎盖下借助计算机视觉算法生成面部标志检测。同样重要的是,您可以通过创建启用“前置摄像头”和增强面“网格”模式的 ARCore 会话来开始使用 Unity 或 Sceneform。请注意,使用前置摄像头时,平面检测等其他 AR 功能目前不可用。AugmentedFace
extends Trackable
,因此可以像平面、增强图像和其他 Trackable 一样检测和更新人脸。
如您所知,2 多年前,Google 发布
Face API
了执行面部检测的功能,该功能可在图片中定位人脸,以及他们的位置(他们在图片中的位置)和方向(他们面对的方向,相对于相机)。人脸 API 允许您检测地标(脸上的兴趣点)并执行分类以确定眼睛是睁着还是闭着,以及脸部是否在微笑。人脸 API 还检测和跟踪运动图像中的人脸,这称为人脸跟踪。
因此,ARCore 1.7 只是从 Face API 中借用了一些架构元素,现在它不仅可以检测面部地标并为其生成 468 个点,还可以以 60 fps 的速度实时跟踪它们并将 3D 面部几何图形粘贴到它们上。
请参阅 Google 的人脸检测概念概述。
计算由移动 RGB 相机拍摄的视频中的深度通道并不是一门火箭科学。您只需将视差公式应用于跟踪的特征。因此,如果静态对象上特征的平移幅度非常高——被跟踪对象更靠近相机,而如果静态对象上特征的幅度非常低——被跟踪对象离相机更远。十多年来,这些计算深度通道的方法对于The Foundry NUKE和Blackmagic Fusion等合成应用程序来说非常常见。现在,在 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> 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);
// .......
}
添加回答
举报