前言
作者李一林,飞桨星河社区开发者,大二在读学生,致力于使用AIGC技术与传统文化结合,给予传统文化新的活力。
个人主页链接: https://aistudio.baidu.com/personalcenter/thirdview/2945966
京剧作为中国传统戏曲之一,源远流长,承载了丰富的文化内涵和艺术特色。水墨画则是中国传统绘画的瑰宝,以其独特的墨色表达和极简的形式赢得了广泛的赞誉。本项目将这两种艺术形式巧妙结合,通过技术手段将京剧人物与水墨画风格融合在一起,并以视频表演的形式展现出来,呈现出独特的视觉和艺术效果,通过创新的技术手段和文化表达方式,弘扬传统文化,提高大家对京剧和水墨画的认识,并增强对传统文化的自信心。
我们进行了一项关于公众对戏剧传统文化认知与兴趣的调查,旨在深入了解当前戏剧传统文化在社会中的传播状况及其面临的挑战。通过广泛收集调查问卷,我们发现了一系列值得关注的现象,特别是戏剧传统文化正面临逐渐没落的趋势,如下图所示。
飞桨项目链接:
https://aistudio.baidu.com/projectdetail/8021427?sUid=2945966&shared=1&ts=1720437478447
视频链接:
https://www.bilibili.com/video/BV1kk4y137sV?vd_source=124e91ee22ef9d114174eb947ac6159b
项目介绍
整体技术架构说明:基于飞桨框架的PaddleHub将戏剧人物与水墨画风格进行融合,接着使用PaddleGAN中的FOM模型进行视频人物的面部动作迁移融合,如下图所示。PaddleGAN不仅为大家提供各类经典的生成对抗网络的复现及应用,同时还为大家准备好了各类项目的大合集,并且此项目将持续不断更新与补充,还希望大家持续关注Repo--PaddleGAN!
1. 图像风格迁移
安装所需的环境和模型文件:
进行风格融合:
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 # 设置中文字体和编码 #plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #输入源图片与风格图片 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") |
- 面部动作迁移
- 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") |
使用MoviePy为生成的视频加上音乐:
Python # 库安装 !pip install moviepy |
Python #为生成的视频加上音乐 保存的路径为 ----> /home/aistudio/PaddleGAN/applications/output/京剧result.mp4 from moviepy.editor import * # videoclip_1放入想要加入的音频视频文件后续会提取音频。 videoclip_1 = VideoFileClip("/home/aistudio/work/京剧.MP4") # videoclip_2 放入上述生成的无声视频。 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") |
- PaddleGAN的唇形迁移能力--Wav2lip
Wav2Lip是一种用于语音合成和嘴唇同步的模型。它通过将语音和嘴部动作之间的联系进行建模,实现从声音到人脸图像的转换。总的来说,Wav2Lip利用语音和嘴部动作之间的联系,将声音特征与嘴部动作对齐,并使用生成对抗网络生成与声音相匹配的人脸图像。这种模型在实现语音合成和嘴唇同步方面具有较好的效果。
Wav2Lip的实现过程可以分为以下几个步骤:
- 声音特征提取:首先,Wav2Lip使用语音识别模型(如DeepSpeech)从输入的声音中提取出声音特征。这些特征描述声音的频谱和时域信息。
- 嘴部动作提取:接下来Wav2Lip使用面部关键点检测器(如FaceMesh)从一段视频中提取嘴部动作的关键点位置,这些关键点描述了嘴唇的形状和运动。
- 嘴部动作对齐:为了将声音和嘴部动作进行关联,Wav2Lip使用一种嘴部动作对齐算法,在时间上对齐声音特征和嘴部动作。这样就能够确保声音和嘴部动作在时间上是同步的。
- 人脸图像生成:最后,Wav2Lip使用对抗生成网络(GAN)来生成与声音相匹配的人脸图像。GAN包括生成器和鉴别器两个部分。生成器接受声音特征和嘴部动作,并生成与之相匹配的人脸图像。鉴别器则尝试判断生成的人脸图像是否真实。通过生成器和鉴别器之间的博弈,Wav2Lip可以生成逼真的人脸图像。
Python #face: 原始视频,视频中的人物的唇形将根据音频进行唇形合成--通俗来说,是你想让那个照片动起来。 #audio:驱动唇形合成的音频,视频中的人物将根据此音频进行唇形合成--通俗来说,想让这个人怎么说。 %cd /home/aistudio/PaddleGAN/applications/ !python tools/wav2lip.py \ --face /home/aistudio/43.jpeg \ --audio /home/aistudio/京剧.m4a\ --outfile /home/aistudio/output/pp_put.mp4 \ --face_enhancement print("保存的路径为/home/aistudio/output/pp_put.mp4") |
最终效果预览:
https://www.bilibili.com/video/BV1kk4y137sV?t=0.2
https://www.bilibili.com/video/BV1ph4y1c78v?t=0.2
总结
本创意项目的意义在于,它将传统文化与现代技术相结合,展现出传统与现代的完美融合。我们以京剧为基础,运用风格迁移和视频融合的创新手段,让这一古老艺术形式焕发出新的生机和活力。我们希望通过这个创意项目,能够让更多的人了解和欣赏京剧这一传统艺术,并且吸引更多年轻观众。我们相信,跨界融合的艺术形式能够激发人们的好奇心和创造力,推动文化的创新和发展,这才是人工智能的意义,这就是我们现在在做的事情,用生成式人工智能赋予传统文化新的活力!