快来给你的宠物视频加个表情特效吧

news2024/9/21 2:38:35
摘要:我们将给猫贴一张卡通脸,给 Elon Musk 贴上小胡子,给小狗贴上驯鹿角!

本文分享自华为云社区《视频AI,给你的宠物加个表情特效!》,作者:HWCloudAI。

GAN 监督学习是一种联合端到端学习判别模型及其 GAN 生成的训练数据的方法。GANgealing将框架应用于密集视觉对齐问题。受经典 Congealing 方法的启发,GANgealing 算法训练空间变换器将随机样本从在未对齐数据上训练的 GAN 扭曲为共同的、联合学习的目标模式。目标模式已更新,以使空间转换器的工作“尽可能简单”。Spatial Transformer 专门针对 GAN 图像进行训练,并在测试时自动推广到真实图像。

我们可以使用它来进行密集跟踪或创建物镜。例如,我们将给猫贴一张卡通脸,给 Elon Musk 贴上小胡子,给小狗贴上驯鹿角!

实验步骤

1.安装依赖包

安装完成之后需要重启Kernel,重启之后才会加载新安装的PyTorch库

!export CXX=g++
!pip install ninja==1.11.1 ray==2.1.0 plotly==4.14.3 torch==1.10.1 torchvision==0.11.2 moviepy==0.2.3.5 lmdb==0.99

2.下载代码

import os
import moxing as mox
if not os.path.exists('gangealing/'):
    mox.file.copy_parallel('obs://weilin/gangealing/', 'gangealing/')

3.进入案例文件夹

cd gangealing/gangealing

model:要检测的物体,celeba 代表人、dog代表狗、 cat代表猫、 cub代表鸟

pic:要添加的特效图片

video_name:要添加特效的视频

model = 'cat' #@param ['celeba', 'dog', 'cat', 'cub']
pic = 'ModelArts.png'
video_name = 'demo.mp4'
os.environ['RAW_VIDEO_PATH'] = video_name
!chmod 777 ./ffmpeg
os.environ['FFMPEG_BINARY'] = os.path.join(os.getcwd(), 'ffmpeg')

4.对视频进行抽帧

from pathlib import Path
from utils.download import download_model, download_video
from applications.mixed_reality import run_gangealing_on_video
from applications import load_stn
from glob import glob
video_resolution = "512" #@param [128, 256, 512, 1024, 2048, 4096, 8192]
pad_mode = 'center' #@param ["center", "border"]
os.environ['FFMPEG_BINARY'] = os.path.join(os.getcwd(), 'ffmpeg')
os.environ['VIDEO_SIZE'] = video_size = str(video_resolution)
os.environ['PAD'] = pad_mode
video = Path(os.environ['RAW_VIDEO_PATH']).stem
os.environ['FRAME_PATH'] = f'data/video_frames/{video}'
os.environ['VIDEO_NAME'] = video
video_path = f'data/{video}'
!chmod 777 process_video.sh
!./process_video.sh "$RAW_VIDEO_PATH"
!python prepare_data.py --path "$FRAME_PATH" --out "data/$VIDEO_NAME" --pad "$PAD" --size "$VIDEO_SIZE"

5.为视频添加特效

根据视频的长度和硬件规格,运行此单元需要几分钟,您可以在下方监控进度。

fps = 30
batch_size = 1
use_flipping = False
memory_efficient_but_slower = False
if 'cutecat' in video_path:
    fps = 60
class MyDict(): 
 def __init__(self): pass
args = MyDict()
args.real_size = int(video_size)
args.real_data_path = video_path
args.fps = fps
args.batch = batch_size
args.transform = ['similarity', 'flow']
args.flow_size = 128
args.stn_channel_multiplier = 0.5
args.num_heads = 1
args.distributed = False # Colab only uses 1 GPU
args.clustering = False
args.cluster = None
args.objects = True
args.no_flip_inference = not use_flipping
args.save_frames = memory_efficient_but_slower
args.overlay_congealed = False
args.ckpt = model
args.override = False
args.out = 'visuals'
if pic == 'dense tracking':
    args.label_path = f'assets/masks/{model}_mask.png'
 # Feel free to change the parameters below:
    args.resolution = 128
    args.sigma = 1.3
    args.opacity = 0.8
    args.objects = False
else:  # object lense
    args.label_path = f'assets/objects/{model}/{pic}'
    args.resolution = 4 * int(video_size)
    args.sigma = 0.3
    args.opacity = 1.0
    args.objects = True
stn = load_stn(args)
print('Running Spatial Transformer on frames...')
run_gangealing_on_video(args, stn, classifier=None)
print('Preparing videos to be displayed...')
from IPython.display import HTML
from base64 import b64encode
num = len(list(glob(f'{video}_compressed*')))
compressed_name = f'{video}_compressed{num}.mp4'
congealed_compressed_name = f'{video}_compressed_congealed{num}.mp4'
path = f'visuals/video_{video}/propagated.mp4'
congealed_path = f'visuals/video_{video}/congealed.mp4'
os.system(f"ffmpeg -i {path} -vcodec libx264 {compressed_name}")
os.system(f"ffmpeg -i {congealed_path} -vcodec libx264 {congealed_compressed_name}")

6.添加特效前的视频

mp4 = open(video_name,'rb').read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
HTML("""<video width=512 autoplay controls loop><source src="%s" type="video/mp4"></video>""" % (data_url))

7.添加特效后的视频

mp4_1 = open(compressed_name,'rb').read()
data_url_1 = "data:video/mp4;base64," + b64encode(mp4_1).decode()
HTML("""<video width=512 autoplay controls loop><source src="%s" type="video/mp4"></video>""" % (data_url_1))

8.制作自己的特效视频

上传自己的视频,将视频放在gangealing/gangealing/下面

上传自己的图片,将图片放在gangealing/gangealing/assets/objects/*/对应的种类的文件夹下面,自己制作的特效图片尺寸要是8192x8192

修改步骤3里的3个参数,重新运行一遍即可!

点击关注,第一时间了解华为云新鲜技术~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android适配【入坑指南+解决痛点】

Android适配是一个大坑&#xff0c;你可能早有耳闻。适配问题到底有多坑&#xff1f;为什么坑&#xff1f;以及如何从坑里爬出来&#xff1f; 概述 Android屏幕尺寸各异&#xff0c;而我们不可能根据各种尺寸都设计一套原型图去匹配&#xff0c;我们需要利用适配这一个过程把…

冷热电气多能互补的微能源网鲁棒优化调度附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

基于Session的认证与授权实践

Spring Security系列文章 认证与授权之Cookie、Session、Token、JWT基于Session的认证与授权实践 基于Session的认证方式 基于 session 的认证方式如下图&#xff1a; 基于 Session 的认证机制由 Servlet 规范定制&#xff0c;Servlet 容器已实现&#xff0c;用户通过 HttpSes…

Matplotlib入门[05]——注释与标签

Matplotlib入门[05]——注释与标签 参考&#xff1a; https://ailearning.apachecn.org/ Matplotlib官网 plt.legend参数 使用Jupyter进行练习 注释 使用文本框进行注释 import numpy.random import matplotlib.pyplot as pltfig plt.figure(1, figsize(5,5)) # plt.clf…

ag-Grid Enterprise v28.2.1 企业版注册版

世界上最好的 JavaScript 网格 ag-Grid Enterprise v28.2.1 功能丰富 ag-Grid Enterprise v28.2.1 的性能、功能集和质量在 JavaScript 数据网格中前所未见。AG Grid 中的许多功能都是 AG Grid 独有的&#xff0c;并且只是将 AG Grid 归为一类&#xff0c;而不会影响质量或性能…

(详解错误情况,及解决方法)Vue 数据更新了但页面没有更新的情况

点个关注&#xff0c;赞一下栓Q 背景 在vue项目中&#xff0c;有些我们会遇到修改完数据&#xff0c;但是视图却没有更新的情况。具体的场景不一样&#xff0c;解决问题的方法也不一样。在网上看了很多文章&#xff0c;在此总结汇总一下。针对&#xff0c;数据更新视图没有更…

你知道哪些常用快捷键?电脑快捷键大全,打工人必备!

所谓的电脑快捷键&#xff0c;就是利用电脑键盘上的一个或几个按键组合完成一个功能命令&#xff0c;从而提高电脑的操作速度&#xff0c;带给我们更便捷的操作方式。电脑常用的快捷键是什么&#xff1f;以下是一些常用电脑快捷键的使用和功能的简要介绍。希望电脑快捷键大全能…

演讲实录 | OpenMLDB 整合自动特征工程

本文整理自 OpenMLDB 社区开发者、伊利诺伊大学 徐鹏程 在 OpenMLDB Meetup No.7 中的分享——《OpenMLDB 整合自动特征工程》。 大家好&#xff0c;我是来自伊利诺伊大学的硕士在读学生&#xff0c;也是 OpenMLDB 开源社区的贡献者——徐鹏程。我参与开发的项目&#xff0c;也…

RabbitMQ——RabbitMQ的六种工作模式详解

RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用之间共享数据&#xff0c;RabbitMQ是使用Erlang(高并发语言)语言来编写的&#xff0c;并且RabbitMQ是基于AMQP协议的 AMQP协议 Advanced Message Queuing Protocol&#xff08;高级消…

JVM之垃圾回收器一

如何判断对象是否存活 引用计数器 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加1&#xff1b;当引用失效时&#xff0c;计数器值就减1&#xff1b;任何时刻计数器都为0的对象就是不可能再被使用的。 Java语言中没有选用引用计数算法…

对比分析小游戏引擎孰优孰劣

随着微信生态中&#xff0c;小程序应用指数级的增长&#xff0c;许多休闲游戏变成为了众多游戏厂商流量变现的新手段。以近期很火的“羊了个羊”为例&#xff0c;它便是我们常常所说的小游戏。 游戏和小游戏的区别 要盘点小游戏开发引擎之前&#xff0c;我们得先来了解下游戏…

leetcode 638. 大礼包-思路整理

题目 在 LeetCode 商店中&#xff0c; 有n件在售的物品。每件物品都有对应的价格。然而&#xff0c;也有一些大礼包&#xff0c;每个大礼包以优惠的价格捆绑销售一组物品。 给你一个整数数组price表示物品价格&#xff0c;其中price[i]是第i件物品的价格。另有一个整数数组nee…

扩散模型(Diffusion)最新综述+GitHub论文汇总-A Survey On Generative Diffusion

扩散模型(Diffusion Model)最新综述GitHub论文汇总-A Survey On Generative Diffusion 本综述来自香港中文大学Pheng-Ann Heng、西湖大学李子青实验室和浙江大学陈广勇团队&#xff0c;对现有的扩散生成模型进行了全面的回顾。本文首先提出了diffusion model改进算法的细化分类…

Thread类及常见方法

文章目录一、Thread常见构造方法二、Thread常见属性三、Thread常见方法start()获取当前线程休眠当前线程中断线程join()一、Thread常见构造方法 Thread类是JVM用来管理线程的一个类&#xff0c;每个线程都有唯一一个Thread对象与之对应&#xff0c;JVM会将这些对象组织起来&am…

世界杯征文活动 | 神奇!一段JavaScript代码生成会动的足球

世界杯征文活动 | 神奇&#xff01;一段JavaScript代码生成会动的足球 文章目录前言一、效果展示二、代码解析1.把足球图片转换为base64格式2.根据base64格式的字符串&#xff0c;创建img标签图片对象3.创建存放图片img的div标签对象4.使div旋转起来总结前言 花有重开日&#…

python中的import详解

0. 什么是导入&#xff1f; 导入从本质上讲&#xff0c;就是载入另一个文件&#xff0c;并能够读取那个文件的内容 0.1 模块和属性 模块往往就是变量名的封装&#xff0c;被认作是命名空间属性就是绑定在特定对象上的变量名 0.2 from和import 通过import得到了具有属性的模…

697226-52-1, 细胞穿膜肽TAT-amide

TAT-amide 是一种细胞穿透肽。细胞穿透肽 (CPPs) 是能够进入不同细胞的短氨基酸序列&#xff0c;用于细胞的物质细胞递送。TAT-amide is a cell penetrating peptide. Cell-penetrating peptides (CPPs) are short amino acid sequences able to enter different cells[1][2]. …

软件测试工程师应该学Python还是学Java?

前言 对于一个软件测试工程师来说&#xff0c;选哪一门语言来入手编程一直是件非常纠结的事情&#xff0c;当然立志做一辈子功能测试的人除外。 当你学完软件测试基本理论&#xff0c;掌握业务测试流程&#xff0c;功能测试可以搞定&#xff0c;数据库和linux玩的也很溜时&am…

Day822.Happens-Before 规则 -Java 并发编程实战

Happens-Before 规则 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Happens-Before 规则的内容。 可见性、原子性、有序性这三者在编程领域属于共性问题&#xff0c;所有的编程语言都会遇到&#xff0c;Java 在诞生之初就支持多线程&#xff0c;自然也有针对这三者…

Blender 雕刻

文章目录简介.基本操作.进入雕刻.雕刻工作区.动态拓扑.动态拓扑属性.重构网格.物体数据属性重构网格.雕刻自带的重构网格.简介. 1 雕刻的本质是是用笔刷对顶点进行移动 2 被雕刻的物体要有足够多的顶点才行&#xff0c;可以使用动态拓扑解决顶点不够的问题 基本操作. 进入雕…