首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过MediaPipe解决方案来为虚拟主播带来更逼真真实感

查看引用/信息源请点击:映维网Nweon

通过MediaPipe Face Landmarker解决方案来为虚拟形象带来真实感

映维网Nweon 2023年07月12日)如果熟悉Bilibili或YouTube,你应该不会对,虚拟UP主/虚拟主播/VTuber感到陌生。这是指使用虚拟形象在视频网站进行投稿活动的主播。

拥有4000多万客户的日本电信运营商KDDI正在利用5G网络实验一系列的技术,但团队发现实时获得准确的动作和类人表情是一项挑战。所以,他们与谷歌进行合作,通过MediaPipe Face Landmarker解决方案来为虚拟形象带来真实感。

实时创建逼真虚拟主播

MediaPipe Face Landmarker解决方案最初于5月的Google I/O 2023发布。它可以检测面部landmark并输出blendshape score,以渲染与用户匹配的3D面部模型。通过MediaPipe Face Landmarker解决方案,KDDI和谷歌成功地为虚拟主播带来了真实感。

技术实现

使用Mediapipe强大而高效的Python包,KDDI开发人员能够检测表演者的面部特征并实时提取52个混合形状。

import mediapipe as mp from mediapipe.tasks import python as mp_python MP_TASK_FILE = "face_landmarker_with_blendshapes.task" class FaceMeshDetector: def __init__(self): with open(MP_TASK_FILE, mode="rb") as f: f_buffer = f.read() base_options = mp_python.BaseOptions(model_asset_buffer=f_buffer) options = mp_python.vision.FaceLandmarkerOptions( base_options=base_options, output_face_blendshapes=True, output_facial_transformation_matrixes=True, running_mode=mp.tasks.vision.RunningMode.LIVE_STREAM, num_faces=1, result_callback=self.mp_callback) self.model = mp_python.vision.FaceLandmarker.create_from_options( options) self.landmarks = None self.blendshapes = None self.latest_time_ms = 0 def mp_callback(self, mp_result, output_image, timestamp_ms: int): if len(mp_result.face_landmarks) >= 1 and len( mp_result.face_blendshapes) >= 1: self.landmarks = mp_result.face_landmarks[0] self.blendshapes = [b.score for b in mp_result.face_blendshapes[0]] def update(self, frame): t_ms = int(time.time() * 1000) if t_ms

Firebase Realtime Database数据库储储了52个blendshape浮动值的集合。每行对应一个特定的blendshape,按顺序列出。

_neutral, browDownLeft, browDownRight, browInnerUp, browOuterUpLeft, ...

当摄像头开启和FaceMesh模型运行时,blendshape值会不断实时更新。在每一帧中,数据库都反映最新的blendshape值,捕获FaceMesh模型检测到的面部表情的动态变化。

提取blendshapes数据后,下一步是将其传输到Firebase Realtime Database。通过利用这种先进的数据库系统,这可以确保实时数据无缝地流向客户端,从而消除了对服务器可扩展性的担忧,并确保KDDI能够专注于交付简化的用户体验。

import concurrent.futures import time import cv2 import firebase_admin import mediapipe as mp import numpy as np from firebase_admin import credentials, db pool = concurrent.futures.ThreadPoolExecutor(max_workers=4) cred = credentials.Certificate('your-certificate.json') firebase_admin.initialize_app( cred, { 'databaseURL': 'https://your-project.firebasedatabase.app/' }) ref = db.reference('projects/1234/blendshapes') def main(): facemesh_detector = FaceMeshDetector() cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() facemesh_detector.update(frame) landmarks, blendshapes = facemesh_detector.get_results() if (landmarks is None) or (blendshapes is None): continue blendshapes_dict = exe = pool.submit(ref.set, blendshapes_dict) cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() exit()

为了继续这一进程,开发人员将blendshapes数据实时从Firebase Realtime Database数据库无缝传输到Google Cloud的Immersive Stream for XR实例。作为说明,Google Cloud的Immersive Stream for XR是一项托管服务,它可以在云中运行Unreal引擎项目,实时渲染沉浸式逼真3D和增强现实体验,并将其传输到智能手机和浏览器。

这种集成确保KDDI能够驱动面部动画,并以最小的延迟实现面部动画的实时流式传输。

在Unreal引擎端,团队使用Firebase C++ SDK从Firebase无缝接收数据。通过建立数据库侦听器,可以在Firebase Realtime数据库表中发生更新时立即检索blendshape值。这种集成允许实时访问最新的blendshape数据,在Unreal引擎项目中实现动态和响应式面部动画。

从Firebase SDK中检索blendshape值后,可以在Unreal引擎中使用动画蓝图中的“Modify Curve修改曲线”节点来驱动人脸动画。每个blendshape值在每一帧单独分配给虚拟角色,允许对角色的面部表情进行精确和实时控制。

在虚Unreal擎中实现实时数据库侦听器的一个有效方法是利用GameInstance Subsystem,而它可以作为一个备选的单例模式。这允许创建一个专用的BlendshapesReceiver实例,负责在后台处理数据库连接、身份验证和连续数据接收。

通过利用GameInstance Subsystem,可以在游戏会话的整个生命周期中实例化和维护BlendshapesReceiver实例。当动画蓝图使用接收到的blendshape数据读取和驱动面部动画时,这确保了持久的数据库连接。

仅使用一台运行MediaPipe的本地PC,,KDDI成功捕获了真人演员的面部表情和动作,并实时创建了高质量的3D重定向动画。

团队表示,这个MediaPipe集成是KDDI消除真实世界和虚拟世界之间界限的一个例子。KDDI正在Web3时代提供服务,包括虚拟世界、虚拟直播和虚拟购物,塑造一个任何人都可以成为创造者的生态系统,并支持新一代用户在现实世界和虚拟世界之间轻松移动。若有兴趣了解更多信息,你可以查看官方文档。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OHa09s-be_8gYIvlp6yqnM3Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券