音视频开发之旅(80)- AI数字人-腾讯开源AniPortrait-音频驱动的肖像动画

本文主要是介绍音视频开发之旅(80)- AI数字人-腾讯开源AniPortrait-音频驱动的肖像动画,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、前言

2、效果展示

3、原理学习

4、遇到的问题与解决方案

5、资料

一、前言

一个月前阿里Emo发布,通过音频驱动的非常自然的肖像视频,引起很大反响。具体看下面的视频,但是并没有开源其代码。

这两天腾讯开源了其音频驱动的肖像视频的项目AniPortrait,它也实现了类似功能:音频驱动、参考视频表情动作驱动,或者通过预先生成的pose关键点视频来驱动。

AniPortrait开发者在EMO的issue上留言,哈哈

图片

二、效果展示

效果来看和EMO差距还是蛮大,主要是唇形不自然,官方给出的效果就可用看出唇形特别是牙齿的问题。当使用自己的素材生成时,问题更明显

2.1 官方展示效果

Aragaki

lyl

2.2 自己使用效果

Aragaki

sd

solo

三、原理学习

图片

分为两个阶段:从音频提取关键点信息和从关键点信息生成视频

音频处理阶段(Audio2Lmk)

在这个阶段,系统首先解析音频信号,以抓取驱动动态人脸模型的关键数据。

  1. 音频输入: 包含人声的音频片段

  2. Audio2Pose: 从音频中提取头部姿势信息

  3. Audio2Mesh: 从音频中提取面部网格的变形信息(面部表情变化)

4. Neutral Mesh: 标准的没有任何表情的基础3D面部模型

5. Mesh Offset: 结合音频提取的信息,生成表达特定情绪或语音的目标面部模型。

6. Target Meshes: 经过偏移和调整后得到的一系列面部模型,它们将用来产生动画中人物的表情。

7. Project: 将复杂的3D面部数据转换为2D平面上的点集,为下一步的视频生成做准备。

视频生成阶段(Lmk2Video)

经过第一阶段的处理,得到了可以描述面部动态的2D关键点。在第二阶段,这些关键点将被用于生成最终的视频。

  1. Reference Image: 提供一个参考帧,通常是一张静态的、人物正面的照片。

  2. Reference Pose Image: 参考图像中人物姿势的一个标准表示,用于帮助系统理解参考帧中的人物姿势。

  3. Denoising Unet:用于去除编码的潜在表示中的噪声,确保生成的图像尽可能清晰。

  4. VAE Decoder:将去噪后的潜在表示解码成2D图像,反映了目标视频帧的姿势。

  5. Motion Module:负责生成连续、平滑的面部运动,以创建逼真的视频。

四、遇到的问题与解决方案

1. audio2vid嘴唇动得太快 https://github.com/Zejun-Yang/AniPortrait/issues/7

可以在之后对预网格应用平滑AniPortrait/scripts/audio2vid.pyLine 155 in bfa1574
pred = pred + face_result['lmks3d'] 
, similar to what is done at,类似于在AniPortrait/scripts/generate_ref_pose.pyLine 85 in bfa1574pose_arr_smooth = smooth_pose_seq(pose_arr_interp)

2. video2video,源video需要和ref_image对齐吗?https://github.com/Zejun-Yang/AniPortrait/issues/27

将参考图片和参考视频处理成半身肖像的形式,尺寸作为正方形即可。可以参照demo中的样式,不需要严格对齐图片和视频的头部位置。

3. Audio driven 可以生成独立的视频吗?https://github.com/Zejun-Yang/AniPortrait/issues/48

​​​​​​​

目前audio2video方法生成30fps的视频时口型较准确。您无需调整L参数大小,生成视频后使用其他补帧方法提升到60fps即可。需要更高清视频也可以使用其他视频超分方法进行后处理,如果算力有余量,也可以尝试修改指令为-W 768 -H 768。另外,如果需要去掉输出结果中的pose video,对audio2video.py文件作出如下修改:AniPortrait/scripts/audio2vid.pyLine 210 in 415eb04
 video = torch.cat([ref_image_tensor, pose_tensor, video], dim=0) --》video = torch.cat([ref_image_tensor, video], dim=0)

4. 音频驱动的视频图像闪烁 https://github.com/Zejun-Yang/AniPortrait/issues/20

​​​​​​​

闪烁问题可能归因于扩散模型,我们正在积极努力在未来解决这个问题。FreeNoise 可以减少闪烁。只需使用时域中值滤波器再次将其传递给 FFMPEG:ffmpeg.exe -i .\input.mp4 -filter:v "tmedian=3" output.mp4这将显着减少闪烁

5.Face reenacment inference error:RuntimeError: CUDA error: device-side assert triggered  https://github.com/Zejun-Yang/AniPortrait/issues/42

​​​​​​​

RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.For debugging consider passing CUDA_LAUNCH_BLOCKING=1.Compile with TORCH_USE_CUDA_DSA to enable device-side assertions

解决方案:

​​​​​​​​​​​​​​

更改视频路径并重试它应该在配置文件中起作用。`pretrained_base_model_path: './pretrained_model/stable-diffusion-v1-5'pretrained_vae_path: './pretrained_model/sd-vae-ft-mse'image_encoder_path: './pretrained_model/image_encoder'
denoising_unet_path: "./pretrained_model/denoising_unet.pth"reference_unet_path: "./pretrained_model/reference_unet.pth"pose_guider_path: "./pretrained_model/pose_guider.pth"motion_module_path: "./pretrained_model/motion_module.pth"
inference_config: "./configs/inference/inference_v2.yaml"weight_dtype: 'fp16'
test_cases:  "./configs/inference/ref_images/Aragaki.png":    - "./configs/inference/head_pose_temp/pose_ref_video.mp4"`

五、资料

1、项目:https://github.com/Zejun-Yang/AniPortrait

2、论文:https://arxiv.org/pdf/2403.17694.pdf

感谢你的阅读

接下来我们继续学习输出AIGC相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流

这篇关于音视频开发之旅(80)- AI数字人-腾讯开源AniPortrait-音频驱动的肖像动画的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/864445

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1