在计算机视觉处理中,人像抠图意义重大,当然PS技术可以达到类似的效果,其实本质也是代码的实现。在前两个视频中,我们使用了RVM人像抠图技术来实现人像抠图,效果视频如下:
人工智能人像挖掘为清华虚拟AI人华挖掘。
实时视频背景抠图技术让你不用绿布就能拍绿屏电影。
RVM是一种强大的实时视频人像抠图技术,由字节跳动项目组开发。与现有的将每一帧都视为单独图片的神经网络不同,RVM使用循环神经网络,该网络在处理视频流时具有时间记忆。RVM可以对任何视频进行实时高清键控。在英伟达GTX 1080Ti上实现4K 76FPS和HD 104FPS。开放源代码地址:
github.com/PeterL1n/RobustVideoMatting
我们可以从GitHub下载它的源代码。下载完成后,我们可以在项目文件夹中创建一个test.py文件。当然,在开始这段代码之前,我们需要安装以下第三方库。
一个
av==8.0.3
2
torch==1.9.0
三
torchvision==0.10.0
四
tqdm==4.61.1
五
pims==0.5
安装后,您需要下载项目的预训练模型。当然,你可以在GitHub上找到共享模型地址并下载。该模型包括两个预训练模型:
rvm _ mobilenet v3 . pthrvm _ resnet 50 . pthrvm _ mobilenet v3 . PTH模型体积小,速度快,可以按照这个模型试试。当然,如果计算机配置较高,可以使用rvm _ mobilenetv3.pth模型。
完成前面的准备工作后,在test.py文件中输入以下代码:
导入torchfrom模型导入MattingNetworkfrom推断导入convert _ video model=matting network(' mobilenet v3 ')。eval()。cuda() #或' resnet 50 ' model . load _ state _ dict(torch . load(' rvm _ mobilenet v3 . PTH ')#或rvm _ resnet 50 . PTH convert _ video(model,# The model,可以在任何设备上(cpu或cuda)。input_source='input.mp4 ',#视频文件或图像序列目录. output_type='video ',#选择' video '或' png_sequence'ou
tput_composition='output.mp4', # File path if video; directory path if png sequence.output_video_mbps=4, # Output video mbps. Not needed for png sequence.downsample_ratio=None, # A hyperparameter to adjust or use None for auto.seq_chunk=12, # Process n frames at once for better parallelism.)
model = MattingNetwork('mobilenetv3').eval().cuda(),这里模型可以选择mobilenetv3,当然也可以选择resnet50,若电脑没有GPU,删除此行代码中的cuda()即可
torch.load('rvm_mobilenetv3.pth')加载模型文件,此模型文件需要放置在test.py文件夹的根目录中
然后使用convert_video函数便可以成功生成背景为绿色的人像抠图视频了
convert_video函数:
参数一:model为前定义的预训练模型
参数二:input_source,输入视频地址路径
参数三:output_composition,输出视频的路径地址
参数四:output_video_mbps,输出视频的mbps参数
参数五:downsample_ratio,一些超参数调整,可以配置成None,软件自动配置
参数六:seq_chunk,由于此技术具有时间记忆功能,可以同时一次处理多个视频帧来加快视频处理的速度
当然若想输出Pha通道与fgr通道
添加参数如下:
output_alpha=‘输出路径’
output_foreground=‘输出路径’
然后运行test.py,待代码运行完成后,便在设置的目录下,自动生成抠图后的效果视频
当然项目也可以按照如下方式进行抠图
from torch.utils.data import DataLoaderfrom torchvision.transforms import ToTensorfrom inference_utils import VideoReader, VideoWriterimport cv2reader = VideoReader('415809648-1-208.mp4', transform=ToTensor())writer = VideoWriter('output1234.mp4', frame_rate=30)bgr = torch.tensor([.47, 1, .6]).view(3, 1, 1) # Green background.rec = [None] * 4 # Initial recurrent states.downsample_ratio = 0.25 # Adjust based on your video.with torch.no_grad(): for src in DataLoader(reader): # RGB tensor normalized to 0 ~ 1. fgr, pha, *rec = model(src, *rec, downsample_ratio) # Cycle the recurrent states. com = fgr * pha + bgr * (1 - pha) # Composite to green background. #cv2.imshow('com',com) writer.write(com) # Write frame.
当然也可以直接使用API 的方式
# Load the model.model = torch.hub.load("PeterL1n/RobustVideoMatting", "mobilenetv3") # or "resnet50"# Converter API.convert_video = torch.hub.load("PeterL1n/RobustVideoMatting", "converter")
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/56714.html