我在华为云学习技术的日子Vlog 02--使用Modelarts制作”蚂蚁牙黑”魔性小视频

举报
@Wu 发表于 2021/03/09 08:33:41 2021/03/09
【摘要】 本文章为学习记录,欢迎大家一起交流讨论。

[联动]"蚂蚁牙黑"学习记录&实操练习


学习准备

1. 环境配置:

  • 1.1 本案例使用框架: Pytorch-1.0.0

  • 1.2本案例使用实验规格: GPU: 1*p100 CPU: 8 核 64GiB Multi-Engine 1.0 (Python3, Recommended)

2.运行代码方法:

  • 点击本页面顶部菜单栏的三角形运行按钮或按Ctrl+Enter键 运行每个方块中的代码

3.事项说明

  • 本实操案例参照胡琦老师的文档 文章链接
  • 本实操会使用OBS对象存储服务,会产生少量费用,3月18日前,楼主提供免费OBS数据源,供大家下载&实验。
    • 不定时资源停止分享,因为我套餐没资源了。

4.资源链接

  • 1.源代码地址

    //选择一个使用即可
    
    # 地址1 ,胡琦老师提供
    !git clone https://codehub.devcloud.cn-north-4.huaweicloud.com/ai-pome-free00001/first-order-model.git
    
    # 地址2, 博主Gitee链接
    !git clone https://gitee.com/JiegangWu/first-order-model.git
    
  • 2.模型下载

    • 通过AI市场下载数据模型

      //下载地址    
      https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=00bc20c3-2a00-4231-bdfd-dfa3eb62a46d
      
    • 通过博主提供的OBS文件分享下载

      //下载链接(随时可能失效)
      
      mox.file.copy_parallel('obs://lab-modelarts/lab01/first-order-motion-model-20210226T075740Z-001.zip' , 'first-order-motion-model.zip')
      

操作步骤

1.搭建实验环境

  • 使用ModelArts搭建实验环境
  • 创建开发环境

2.下载源代码

  • 下载实验源代码(2种方式任选一种)

3.下载模型和文件

  • 下载模型和文件(2种方式任选一种)

    import moxing as mox #引入包
    
  • 解压文件

    !unzip first-order-motion-model.zip
    
  • 模版视频移动位置

    !mv 02.mp4 first-order-motion-model/
    

4.替换变量运行程序

  • 源文件代码解析

    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_path = '/home/ma-user/work/first-order-motion-model/05.png'
    source_image_path = '/home/ma-user/work/05.png'
    source_image = imageio.imread(source_image_path)
    
    # 此处可替换为您的视频路径,这里默认为“蚂蚁牙黑”
    #reader_path = '/home/ma-user/work/first-order-motion-model/02.mp4'
    reader_path = '/home/ma-user/work/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.close()
    
    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[i])
            if generated is not None:
                cols.append(generated[i])
            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.close()
        return ani
    HTML(display(source_image, driving_video).to_html5_video())
    
  • 替换文件字段变量

      source_image_path  #源图片地址
      reader_path   #源视频地址
    
  • 配置模型

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

5、生成结果视频1-无声音

  • 视频代码块

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

6.生成结果视频2- 有声音

  • 安装第三方包
    # 安装视频剪辑神器 moviepy
    !pip install moviepy
    
  • 合成有声视频
    # 为生成的视频加上源视频声音
    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")
    

7.生成带水印视频

# 还可以给视频加水印
video = VideoFileClip("../result.mp4")
# 水印图片请自行上传
logo = (ImageClip("/home/ma-user/work/first-order-motion-model/water.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.close()
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())

8.视频版本正在赶来的路上。。。。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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