1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
ARCore 新的Augmented Faces API用于不帶深度傳感器的前置攝像頭,提供高質(zhì)量的
468-point
3D 標(biāo)準(zhǔn)網(wǎng)格,允許用戶將動(dòng)畫(huà)蒙版、眼鏡、皮膚修飾等效果附加到他們的臉上。網(wǎng)格提供坐標(biāo)和區(qū)域特定的錨點(diǎn),可以添加這些效果。
我堅(jiān)信在 ARCore 1.7 的引擎蓋下借助計(jì)算機(jī)視覺(jué)算法生成面部標(biāo)志檢測(cè)。同樣重要的是,您可以通過(guò)創(chuàng)建啟用“前置攝像頭”和增強(qiáng)面“網(wǎng)格”模式的 ARCore 會(huì)話來(lái)開(kāi)始使用 Unity 或 Sceneform。請(qǐng)注意,使用前置攝像頭時(shí),平面檢測(cè)等其他 AR 功能目前不可用。AugmentedFace
extends Trackable
,因此可以像平面、增強(qiáng)圖像和其他 Trackable 一樣檢測(cè)和更新人臉。
如您所知,2 多年前,Google 發(fā)布
Face API
了執(zhí)行面部檢測(cè)的功能,該功能可在圖片中定位人臉,以及他們的位置(他們?cè)趫D片中的位置)和方向(他們面對(duì)的方向,相對(duì)于相機(jī))。人臉 API 允許您檢測(cè)地標(biāo)(臉上的興趣點(diǎn))并執(zhí)行分類(lèi)以確定眼睛是睜著還是閉著,以及臉部是否在微笑。人臉 API 還檢測(cè)和跟蹤運(yùn)動(dòng)圖像中的人臉,這稱(chēng)為人臉跟蹤。
因此,ARCore 1.7 只是從 Face API 中借用了一些架構(gòu)元素,現(xiàn)在它不僅可以檢測(cè)面部地標(biāo)并為其生成 468 個(gè)點(diǎn),還可以以 60 fps 的速度實(shí)時(shí)跟蹤它們并將 3D 面部幾何圖形粘貼到它們上。
請(qǐng)參閱 Google 的人臉檢測(cè)概念概述。
計(jì)算由移動(dòng) RGB 相機(jī)拍攝的視頻中的深度通道并不是一門(mén)火箭科學(xué)。您只需將視差公式應(yīng)用于跟蹤的特征。因此,如果靜態(tài)對(duì)象上特征的平移幅度非常高——被跟蹤對(duì)象更靠近相機(jī),而如果靜態(tài)對(duì)象上特征的幅度非常低——被跟蹤對(duì)象離相機(jī)更遠(yuǎn)。十多年來(lái),這些計(jì)算深度通道的方法對(duì)于The Foundry NUKE和Blackmagic Fusion等合成應(yīng)用程序來(lái)說(shuō)非常常見(jiàn)?,F(xiàn)在,在 ARCore 中可以使用相同的原理。
您不能拒絕對(duì)自定義對(duì)象或身體的其他部位(如手)進(jìn)行人臉檢測(cè)/跟蹤算法。僅針對(duì)面孔開(kāi)發(fā)的增強(qiáng)面孔 API 。
下面是激活增強(qiáng)面孔功能的 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;
}
然后獲取檢測(cè)到的人臉列表:
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);
// .......
}
添加回答
舉報(bào)