作者李一林,飞桨星河社区开发者,大二在读学生,致力于使用AIGC技术与传统文化结合,给予传统文化新的活力。
个人主页链接: https://aistudio.baidu.com/personalcenter/thirdview/2945966
京剧作为中国传统戏曲之一,源远流长,承载了丰富的文化内涵和艺术特色。水墨画则是中国传统绘画的瑰宝,以其独特的墨色表达和极简的形式赢得了广泛的赞誉。本项目将这两种艺术形式巧妙结合,通过技术手段将京剧人物与水墨画风格融合在一起,并以视频表演的形式展现出来,呈现出独特的视觉和艺术效果,通过创新的技术手段和文化表达方式,弘扬传统文化,提高大家对京剧和水墨画的认识,并增强对传统文化的自信心。
我们进行了一项关于公众对戏剧传统文化认知与兴趣的调查,旨在深入了解当前戏剧传统文化在社会中的传播状况及其面临的挑战。通过广泛收集调查问卷,我们发现了一系列值得关注的现象,特别是戏剧传统文化正面临逐渐没落的趋势,如下图所示。
https://aistudio.baidu.com/projectdetail/8021427
https://www.bilibili.com/video/BV1kk4y137sV
整体技术架构说明:基于飞桨框架的PaddleHub将戏剧人物与水墨画风格进行融合,接着使用PaddleGAN中的FOM模型进行视频人物的面部动作迁移融合,如下图所示。PaddleGAN不仅为大家提供各类经典的生成对抗网络的复现及应用,同时还为大家准备好了各类项目的大合集,并且此项目将持续不断更新与补充,还希望大家持续关注Repo--PaddleGAN!
Python
#安装paddlehub及其模型
!pip install paddlehub
# 下载模型
%%capture
!hub install stylepro_artistic==1.0.1
Python
import paddlehub as hub
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
picture = '/home/aistudio/work/image_source.jpg'
style_image = '/home/aistudio/work/style.png'
stylepro_artistic = hub.Module(name="stylepro_artistic")
content_image = Image.open(picture).convert('RGB')
style_image = Image.open(style_image).convert('RGB')
content_image = np.array(content_image)
style_image = np.array(style_image)
images = [
{
'content': content_image,
'styles'
: [style_image],
'weights': [0.3]
}
]
result = stylepro_artistic.style_transfer(
images=images,
visualization=True
)
!mv ./transfer_result/* ./transfer_result.jpg
!rm -rf ./transfer_result
!mv ./transfer_result.jpg ./output/transfer_result.jpg
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
image_paths = [
'/home/aistudio/work/image_source.jpg',
'/home/aistudio/work/style.png',
'./output/transfer_result.jpg'
]
titles = [
'Original Image',
'Style Reference Image',
'Output Result'
]
for i, ax in enumerate(axes):
ax.set_title(titles[i])
ax.axis('off')
ax.imshow(plt.imread(image_paths[i]))
print("图片保存路径为/home/aistudio/output/transfer_result.jpg")
1)
PaddleGAN
中的FOM模型(面部动作迁移)
First Order Motion Model(FOM)的任务是让图片动起来,给定一张源图片,给定一个驱动视频,生成一段视频。其中主角是源图片,动作是驱动视频中的动作。源图像通常包含一个主体,驱动视频包含一系列动作。
Python
# 从github上克隆PaddleGAN代码
# 从github上克隆PaddleGAN代码(如下载速度过慢,可用gitee源)
!git clone https://gitee.com/paddlepaddle/PaddleGAN
#!git clone https://github.com/PaddlePaddle/PaddleGAN
# 安装所需安装包
%cd PaddleGAN/
!pip install -r requirements.txt
!pip install imageio-ffmpeg
!pip install ppgan
-
driving_video: 驱动视频中人物的表情动作作为待迁移的对象。
-
source_image: 原始视频中人物的表情动作将迁移到该原始图片中的人物上。
-
relative: 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形。
-
adapt_scale: 根据关键点凸包自适应运动尺度。
Python
# 生成的结果保存的路径如下 ---> /home/aistudio/PaddleGAN/applications/output/result.mp4
%cd /home/aistudio/PaddleGAN/applications/
!mkdir output
!export PYTHONPATH=$PYTHONPATH:/home/aistudio/PaddleGAN && python -u tools/first-order-demo.py --driving_video ~/work/京剧.MP4 --source_image ~/work/京剧.png --relative --adapt_scale
print("生成的视频路径/home/aistudio/PaddleGAN/applications/output/result.mp4")
Python
# 库安装
!pip install moviepy
Python
from moviepy.editor import *
videoclip_1 = VideoFileClip("/home/aistudio/work/京剧.MP4")
videoclip_2 = VideoFileClip("./output/result.mp4")
audio_1 = videoclip_1.audio
videoclip_3 = videoclip_2.set_audio(audio_1)
videoclip_3.write_videofile("./output/京剧result.mp4", audio_codec="aac")
print("添加音频后的视频路径为/home/aistudio/PaddleGAN/applications/output/京剧result.mp4")
2) PaddleGAN的唇形迁移能力--Wav2lip
Wav2Lip是一种用于语音合成和嘴唇同步的模型。它通过将语音和嘴部动作之间的联系进行建模,实现从声音到人脸图像的转换。总的来说,Wav2Lip利用语音和嘴部动作之间的联系,将声音特征与嘴部动作对齐,并使用生成对抗网络生成与声音相匹配的人脸图像。这种模型在实现语音合成和嘴唇同步方面具有较好的效果。
-
声音特征提取:首先,Wav2Lip使用语音识别模型(如DeepSpeech)从输入的声音中提取出声音特征。这些特征描述声音的频谱和时域信息。
-
嘴部动作提取:接下来Wav2Lip使用面部关键点检测器(如FaceMesh)从一段视频中提取嘴部动作的关键点位置,这些关键点描述了嘴唇的形状和运动。
-
嘴部动作对齐:为了将声音和嘴部动作进行关联,Wav2Lip使用一种嘴部动作对齐算法,在时间上对齐声音特征和嘴部动作。这样就能够确保声音和嘴部动作在时间上是同步的。
-
人脸图像生成:最后,Wav2Lip使用对抗生成网络(GAN)来生成与声音相匹配的人脸图像。GAN包括生成器和鉴别器两个部分。生成器接受声音特征和嘴部动作,并生成与之相匹配的人脸图像。鉴别器则尝试判断生成的人脸图像是否真实。通过生成器和鉴别器之间的博弈,Wav2Lip可以生成逼真的人脸图像。