基于ModelArts实现“蚂蚁牙黑”特效

网友投稿 645 2022-05-29

前言

最近几天,某音和朋友圈都在秀“蚂蚁牙黑”,加上特效和魔性的音乐纷纷被人模仿!这里,看了胡琦大大的教程之后,咱用 ModelArts 来制作实践跑一遍,我将重新从头到尾,简单操作实现生成“蚂蚁牙黑“魔性洗脑小视频。

整体流程

步骤一

创建桶,并将数据集导入到自己的OBS桶中

步骤二

进入ModelArts的控制台,找到开发环境->NoteBook,然后新建一个NoteBook,名称:任意;设置参数:python3;资源池:公共资源池;类型:GPU存储;配置:云硬盘EVS;规格:[限时免费]体验规格GPU版。

步骤三

新建Pytorch 1.0的.ipynb文件,利用 Moxing 拷贝文件到 JupyterLab,然后进行解压

步骤四

准备工作完成之后,切换到first-order-model目录,然后将 source_image_path中的路径替换为”素材脸”所在的路径,脸的照片可以直接通过 Notebook 的文件上传功能上传。当然您还可以将默认的“蚂蚁牙黑”视频替换为您自定义的视频,格式为 mp4。

步骤五

保存结果视频,然后下载安装剪辑神器软件moviepy,然后导入音频,最后加以合成到出成result.mp4

步骤六

最后,可以上传任意图片做水印,生成加水印后的视频,自此,单人版的”蚂蚁牙黑“全部完成

步骤一

首先,创建一个新的桶并命名。

然后创建一个文件夹data,用来存放AI Gallery胡琦大大提供的数据集,然后点击确认下载。(数据集-:点击 https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=00bc20c3-2a00-4231-bdfd-dfa3eb62a46d )

耐心等待2分钟左右,就会显示下载完成。

步骤二

登陆ModelArts控制台 https://console.huaweicloud.com/modelarts/?region=cn-north-4&locale=zh-cn#/dashboard

然后选择开发环境->Notebook->创建Notebook

名称:任意

设置参数:python3

资源池:公共资源池

类型:GPU

存储配置:云硬盘EVS

规格:[限时免费]体验规格GPU版

最后再确认一下参数

步骤三

新建Pytorch 1.0的.ipynb文件,利用 Moxing 拷贝文件到 JupyterLab,然后进行解压

简单测试一下是否可以运行代码

利用 Moxing 拷贝文件到 JupyterLab

将之前下载到 OBS 中的模型和素材通过 Moxing 拷贝过来,此处注意替换为您的 OBS 路径。02.mp4是“蚂蚁呀嘿”的模版视频,

# 用 Moxing 下载文件 import moxing as mox # 此处需要替换您的 OBS 地址 mox.file.copy_parallel('obs://mayiyahei88/data/first-order-motion-model/first-order-motion-model-20210226T075740Z-001.zip' , 'first-order-motion-model.zip') mox.file.copy_parallel('obs://mayiyahei88/data/first-order-motion-model/02.mp4' , '02.mp4')

# 解压 !unzip first-order-motion-model.zip # 模版视频 !mv 02.mp4 first-order-motion-model/

步骤四

准备工作完成之后,切换到first-order-model目录,然后将 source_image_path中的路径替换为”您的脸”所在的路径,脸的照片可以直接通过 Notebook 的文件上传功能上传。

当然您还可以将默认的“蚂蚁牙黑”视频替换为您自定义的视频,格式为 mp4。一路执行可以查看到合成前的预览。

cd first-order-model

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

基于ModelArts实现“蚂蚁牙黑”特效

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

import imageio

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.Animation as animation

from skimage.transform import resize

from IPython.display import HTML

import warnings

warnings.filterwarnings("ignore")

# 此处替换为您的图片路径,图片最好为 256*256,这里默认为普京大帝

source_image_path = '/home/ma-user/work/first-order-motion-model/02.png'

source_image = imageio.imread(source_image_path)

# 此处可替换为您的视频路径,这里默认为“蚂蚁牙黑”

reader_path = '/home/ma-user/work/first-order-motion-model/02.mp4'

reader = imageio.get_reader(reader_path)

# 调整图片和视频大小为 256x256

source_image = resize(source_image, (256, 256))[..., :3]

fps = reader.get_meta_data()['fps']

driving_video = []

try:

for im in reader:

driving_video.append(im)

except RuntimeError:

pass

reader.()

driving_video = [resize(frame, (256, 256))[..., :3] for frame in driving_video]

def display(source, driving, generated=None):

fig = plt.figure(figsize=(8 + 4 * (generated is not None), 6))

ims = []

for i in range(len(driving)):

cols = [source]

cols.append(driving)

if generated is not None:

cols.append(generated)

im = plt.imshow(np.concatenate(cols, axis=1), animated=True)

plt.axis('off')

ims.append([im])

ani = animation.ArtistAnimation(fig, ims, interval=50, repeat_delay=1000)

plt.()

return ani

HTML(display(source_image, driving_video).to_html5_video())

步骤五

保存结果视频

from demo import load_checkpoints generator, kp_detector = load_checkpoints(config_path='config/vox-256.yaml', checkpoint_path='/home/ma-user/work/first-order-motion-model/vox-cpk.pth.tar')

from demo import make_animation from skimage import img_as_ubyte predictions = make_animation(source_image, driving_video, generator, kp_detector, relative=True) # 保存结果视频 imageio.mimsave('../generated.mp4', [img_as_ubyte(frame) for frame in predictions], fps=fps) # 在 Notebook 根目录能找,/home/ma-user/work/ HTML(display(source_image, driving_video, predictions).to_html5_video())

给视频配音,安装剪辑合成软件

# 安装视频剪辑神器 moviepy !pip install moviepy

小tips:当*号变成了步骤数字代码才执行完毕了

为视频添加蚂蚁牙黑背景音乐

# 为生成的视频加上源视频声音 from moviepy.editor import * videoclip_1 = VideoFileClip(reader_path) videoclip_2 = VideoFileClip("../generated.mp4") audio_1 = videoclip_1.audio videoclip_3 = videoclip_2.set_audio(audio_1) videoclip_3.write_videofile("../result.mp4", audio_codec="aac")

步骤六

给视频添加水印

# 还可以给视频加水印 video = VideoFileClip("../result.mp4") # 水印图片请自行上传 logo = (ImageClip("/home/ma-user/work/first-order-motion-model/hw.png") .set_duration(video.duration) # 水印持续时间 .resize(height=50) # 水印的高度,会等比缩放 .margin(right=0, top=0, opacity=1) # 水印边距和透明度 .set_pos(("left","top"))) # 水印的位置 final = CompositeVideoClip([video, logo]) final.write_videofile("../result_water.mp4", audio_codec="aac") final_reader = imageio.get_reader("../result_water.mp4") fps = final_reader.get_meta_data()['fps'] result_water_video = [] try: for im in final_reader: result_water_video.append(im) except RuntimeError: pass reader.() result_water_video = [resize(frame, (256, 256))[..., :3] for frame in result_water_video] HTML(display(source_image, driving_video, result_water_video).to_html5_video())

自此,单人版的蚂蚁牙黑全程已经跑完了。

注意

本实验到此完成,需要请大家注意:

示例中我们建议大家选择的都是免费规格,如果大家开通了套餐或者有代金券的,可以尝试使用付费规格获得更好的体验,但记得及时关闭相应服务哦!

Tips:实验结束后请及时停止在线服务,不然在线服务会持续收费有可能导致欠费,致使华为云账号被冻结而影响使用。 我们在在线服务管理页面单击对应服务列表后的"停止"按钮即可停止本在线服务。

总结

OBS的路径很重要,填错了会下载不了数据集

脸部图片和视频存放的路径要与代码填写的路径一致,不然报错not found

找不到result.mp4的原因是当前的路径是在根目录,而../relust.mp4就会报错找不到,你在/home/ma-user/work/first-order-motion-model路径下,切换才会正常。

展望

这次的蚂蚁牙黑只实现了单人版的动效,多人版同屏的还有待研究,大家一起研究看看吧!!!!

AI开发平台ModelArts 视频

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云都发布了哪些安全服务呢?
下一篇:整整这一年!
相关文章