音视频开发之旅(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

相关文章

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

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后