MIT虚拟人AI-generated Characters

  • 一、项目简介
  • 二、原理简介
  • 三、代码实现
  • 1. 数据准备
  • 2. 函数定义
  • 3. 人物选择/上传
  • 4. 输入驱动选择/上传
  • 5. 视频生成


一、项目简介

麻省理工学院媒体实验室(MIT Media Lab)的研究人员开源了一个虚拟角色生成工具。该工具结合了面部、手势、语音和动作领域的人工智能模型,可用于创建各种音频和视频输出,一举登上《Nature Machine Intelligence》。

该项目主要用于音频或视频驱动视频,暂不支持文本驱动视频。主要用于医疗视频或其他视频通话时保护个人隐私视频驱动视频,使著名的历史或现代人栩栩如生。

项目地址:https://github.com/mitmedialab/AI-generated-characters

二、原理简介

  1. Character :可选择给定模板人物,也可自定义上传人物照片(单张图片)。
  2. Inputs:可录音,上传音频,以及上传视频。

首先使用 first-order-model 生成动态视频,然后通过 Wav2Lip 生成嘴型。

  • 若 Inputs 为音频,则调用案例视频驱动 Character 生成相应的动态视频,然后使用 inference.py 生成嘴型。
  • 若 Inputs 为视频,则使用该视频作为驱动生成动态视频,取出视频音轨再合并音视频。

三、代码实现

1. 数据准备

下载 first-order-model & Wav2Lip 以及人物图片。

JAVA AI 虚拟人 ai人工智能虚拟人物_语音识别


JAVA AI 虚拟人 ai人工智能虚拟人物_ide_02

2. 函数定义

  • 定义一些通用函数,比如选择/上传人物照片,记录/上传音频,上传视频,以及定义相关功能函数等。
  • 函数 animate_video 定义了,从 first-order-model 项目的 demo.py 文件里导入功能
    make_animation,将人物照片和驱动视频缩放至256x256,最后保存动态视频
    /content/vidvid.mp4(256x256,30fps)
def animate_video(img_filename, vid_filename):
   from demo import make_animation
   from demo import load_checkpoints
   # Resize image and video to 256x256
   source_image=resize(source_image, (256, 256))[..., :3]
   driving_video=[resize(frame, (256, 256))[..., :3] for frame in driving_video]
   # Make Animation
   predictions=make_animation(source_image, driving_video, generator, kp_detector, relative=True,adapt_movement_scale=False)
   #save resulting video
   imageio.mimsave('/content/vidvid.mp4', [img_as_ubyte(frame) for frame in predictions], fps=30)

3. 人物选择/上传

  • 选择模板人物或者自定义上传人物照片(单张图片)。
  • 模板人物:[“Van Gogh”, “Mona Lisa”, “Einstein”, “Lincoln”, “Nietzsche”, “Sokrates”]。
  • 自定义上传的人物图片必须宽高相等。

4. 输入驱动选择/上传

有三种方式输入驱动,分别是录音上传音频,和上传视频

JAVA AI 虚拟人 ai人工智能虚拟人物_语音识别_03

5. 视频生成

JAVA AI 虚拟人 ai人工智能虚拟人物_人工智能_04


首先使用 animate_video 生成动态视频。

  • 若前一步骤为音频输入,animate_video 所用的表情驱动为默认案例视频;
  • 若前一步骤为视频输入,animate_video 所用的表情驱动则为该视频。
video_driver = "/content/driving_video.mp4"

然后通过 Wav2Lip 生成嘴型。

  • 若前一步骤为音频输入,则用 inference.py 生成嘴型。
  • 若前一步骤为视频输入,则先取出视频音轨再合并音视频。

JAVA AI 虚拟人 ai人工智能虚拟人物_音视频_05