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

举报
运气男孩 发表于 2021/03/31 00:43:57 2021/03/31
【摘要】 前言  最近几天,某音和朋友圈都在秀“蚂蚁牙黑”,加上特效和魔性的音乐纷纷被人模仿!这里,看了胡琦大大的教程之后,咱用 ModelArts 来制作实践跑一遍,我将重新从头到尾,简单操作实现生成“蚂蚁牙黑“魔性洗脑小视频。整体流程步骤一        创建桶,并将数据集导入到自己的OBS桶中步骤二        进入ModelArts的控制台,找到开发环境->NoteBook,然后新建一个No...

前言

  最近几天,某音和朋友圈都在秀“蚂蚁牙黑”,加上特效和魔性的音乐纷纷被人模仿!这里,看了胡琦大大的教程之后,咱用 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

  • 步骤六

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

步骤一

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

image.png


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

image.png

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

image.png

步骤二

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

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


  • 名称:任意

  • 设置参数:python3

  • 资源池:公共资源池

  • 类型:GPU

  • 存储配置:云硬盘EVS

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


image.png


image.png

最后再确认一下参数

image.png

image.png

步骤三

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

image.png

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

image.png

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

image.png

image.png


# 用 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')

image.png

# 解压
!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

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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, (256256))[..., :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, (256256))[..., :3for frame in driving_video]
 
def display(source, driving, generated=None):
    fig = plt.figure(figsize=(8 + 4 * (generated is not None), 6))
 
    ims = []
    for 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())

image.png

步骤五

保存结果视频

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())

image.png

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

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

image.png

小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())

image.png

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

注意


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

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

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



总结

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

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

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

展望

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。