人像抠图在计算机视觉处理中具有重要意义。当然,PS技术也能达到类似的效果。其实本质就是代码的实现。在前两个视频中,我们使用RVM人像抠图技术来实现人像抠图。效果视频如下:
清华虚拟人工智能人物华的人工智能人像抠图
实时视频背景抠图技术让你不用绿布就能拍出绿屏大片
RVM是一种强大的实时视频人像抠图技术,由字节跳动项目组开发。与现有的神经网络不同,现有的神经网络将每一帧视为一个独立的图片,RVM使用了一个循环神经网络,它在处理视频流时具有时间记忆。RVM可以对任何视频进行实时高清键控。在Nvidia GTX 1080Ti上实现4K 76FPS和高清104FPS。开放源地址:
GitHub.com/PeterL1n/RobustVideoMatting
github . com/Peter 1n/robustvodematting
我们可以从GitHub下载它的源代码。下载完成后,可以在项目文件夹中创建一个test.py文件。当然,在开始这段代码之前,需要安装以下第三方库。
Rvm_mobilenetv3.pth型号比较小,速度比较快,可以按照这个型号试试。当然,如果电脑配置高,可以使用rvm_mobilenetv3.pth型号。
完成前面的准备工作后,在test.py文件中输入以下代码:
从模型导入火炬 从推理导入matting network 导入convert _ video model = matting network(& # 39;mobilenetv3 & # 39).eval()。cuda() #或& # 34;resnet50 & # 34 model . load _ state _ dict(torch . load(& # 39;rvm _ mobilenetv3.pth & # 39))#或rvm _ resnet 50 . PTH convert _ video( 型号,#型号,可以在任何设备上(cpu或cuda)。 input _ source = & # 39;input.mp4 & # 39,#一个视频文件或一个图像序列目录。 output _ type = & # 39;视频& # 39;,#选择& # 34;视频& # 34;或者& # 34;png _ sequence & # 34 output _ composition = & # 39;output.mp4 & # 39,#文件路径如果是视频;png序列的目录路径。 output_video_mbps=4,#输出视频mbps。png序列不需要。 downsample_ratio=None,# A要调整的超参数或使用None进行自动调整。 seq_chunk=12,#一次处理n个帧以获得更好的并行性。 )model = matting network(& # 39;mobilenetv3 & # 39).eval()。cuda(),其中型号可以选择mobilenetv3或resnet50。如果电脑没有GPU,删除这行代码中的cuda()。
torch . load(& # 39;rvm _ mobilenetv3.pth & # 39)加载模型文件,需要放在test.py文件夹的根目录下。
然后使用convert_video函数成功生成绿色背景的人像抠图视频。
转换_视频功能:
参数1:模型是之前定义的预训练模型。
参数二:input_source,输入视频地址路径。
参数三:output_composition,输出视频的路径地址。
参数4: output_video_mbps,输出视频的mbps参数。
参数5: downsample_ratio,一些超参数调整,可以配置为无,软件自动配置。
参数6: seq_chunk,由于该技术具有时间记忆功能,可以同时处理多个视频帧,加快视频处理速度。
当然,如果你想输出Pha通道和fgr通道
添加以下参数:
Output _ alpha = '输出路径'
Output _ foreground = '输出路径'
然后运行test.py,代码运行后,在设定的目录下自动生成抠图后的效果视频。
当然,该项目也可以大致如下
from torch . utils . data import data loader from torch vision . transforms import to sensor from inference _ utils import video reader,video writer import cv2 reader = video reader(& # 39;415809648-1-208 . MP4 & # 39;,transform = ToTensor()) writer = video writer(& # 39;output1234.mp4 & # 39,frame _ rate = 30) bgr = torch . tensor([. 47,1,.. 6])。视图(3,1,1) #绿色背景。 rec = [None] * 4 #初始循环状态。 downsample_ratio = 0.25 #根据您的视频进行调整。 with torch . no _ grad(): for src in data loader(reader):# RGB张量归一化为0 ~ 1。 fgr,pha,*rec = model(src,*rec,downsample_ratio) #循环递归状态。 com = fgr * pha + bgr * (1 - pha) #复合到绿色背景。 # cv2 . im show(& # 39;com & # 39,com) 作家。write (com) # writeframe。当然,你也可以直接使用API。
#加载模型。 model = torch . hub . load(& # 34;Peter 1n/robustvodematting & # 34;, "mobilenetv3 & # 34)#或者& # 34;resnet50 & # 34 #转换器API。 convert _ video = torch . hub . load(& # 34;Peter 1n/robustvodematting & # 34;, "转换器& # 34;)