cv_effnetv2_video-human-matting|视频人像抠图

cv_effnetv2_video-human-matting视频人像抠图(Video human matting),输入一个视频(图像序列),得到对应视频中人像的alpha图,支持半透明度抠像效果。

cv_effnetv2_video-human-matting视频人像抠图

视频人像抠图(Video human matting)是计算机视觉的经典任务,输入一个视频(图像序列),得到对应视频中人像的alpha图,其中alpha与分割mask不同,mask将视频分为前景与背景,取值只有0和1,而alpha的取值范围是0到1之间,返回数值代表透明度。VHM模型处理1080P视频每帧计算量为10.6G,参数量只有6.3M。

模型介绍

该模型由四部分构成:backbone中间处理层decoder高分辨率处理层

其中backbone是基于efficientnetv2实现,为了实现更小的计算量和更好的效果,我们对原网络模块进行了一定修改后重新与unet结构进行人像分割任务训练,结果的backbone参数作为预训练载入; 中间处理层使用ASPP模块作为基本单元,多层空洞卷积扩大感受野; decoder部分将会逐步融合backbone各层特征,同时将原始图像特征作为一部分输入来引导网络学习,此外,我们将gru作为基础模块嵌入网络以便于处理时序相关信息; 高分辨率处理层基于DGF(Deep Guided Filter),实现对低分辨率后超分至原有分辨率,该层仍具有可学习参数,效果远优于直接上采样效果。

部署教程

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放cv_effnetv2_video-human-matting的相关环境依赖文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki\cv_effnetv2_video-human-matting

检测D盘是否在openai.wiki目录下有没有cv_effnetv2_video-human-matting文件夹,没有则创建该文件夹。

if not exist D:\openai.wiki\cv_effnetv2_video-human-matting mkdir D:\openai.wiki\cv_effnetv2_video-human-matting

强制切换工作路径为D盘的openai.wiki\cv_effnetv2_video-human-mattin文件夹。

cd /d D:\openai.wiki\cv_effnetv2_video-human-matting

为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda create -p D:\openai.wiki\cv_effnetv2_video-human-matting\ENV python=3.7

执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?提示,我们直接按下回车即可。

初始化Conda环境,避免后续可能报错。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate D:\openai.wiki\cv_effnetv2_video-human-matting\ENV

执行如下命令,安装阿里达摩院相关依赖。

pip install modelscope

执行如下命令,安装torch依赖。

pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

执行如下命令,安装moviepy依赖库。

pip install moviepy

执行如下命令,安装CV2依赖库。

pip install opencv-python

使用教程

推荐下载VS Code代码编辑器,然后在代码编辑器器内新建一个Python文件,粘贴如下代码,在代码编辑器的右下角选择Python环境为D:\openai.wiki\cv_effnetv2_video-human-matting\ENV

遮罩输出

默认情况下,使用该方式将会仅输出视频的黑白遮罩,如果您会使用PhotoShop或After Effects等软件,那么您肯定会了解遮罩的作用是什么,您可以理解为这个遮罩层的白色为保留区域,黑色删除的部分。

该模型官方并未给了示例,本站已经帮您写好了相关的代码,复制粘贴即可使用。

注意:请自行修改视频名称(Video_Name)为自己的视频文件名称,然后再执行,否则会报错。

# 本代码由openai.wiki提供,转载请注明出处。

import cv2
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.outputs import OutputKeys

# 原视频路径
input_video = 'D:/openai.wiki/cv_effnetv2_video-human-matting/Video_Name.mp4'
# Mask遮罩路径
maskoutput_video = 'D:/openai.wiki/cv_effnetv2_video-human-matting/video_name_mask.mp4'

video_matting = pipeline(Tasks.video_human_matting, 
                       model='damo/cv_effnetv2_video-human-matting')
result_status = video_matting({'video_input_path':input_video,
                           'output_path':maskoutput_video})
result = result_status[OutputKeys.MASKS]

抠图输出

执行如下代码,将会自动输出遮罩层,并将遮罩层自动叠加至原视频的颜色层,输出您想要的最终视频。

# 本代码由openai.wiki提供,转载请注明出处。

import cv2

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.outputs import OutputKeys

# 源视频路径
input_video = 'D:/openai.wiki/cv_effnetv2_video-human-matting/Video_Name.mp4'
# Mask遮罩路径
maskoutput_video = 'D:/openai.wiki/cv_effnetv2_video-human-matting/video_name_mask.mp4'
# 输出视频路径
output_video = 'D:/openai.wiki/cv_effnetv2_video-human-matting/video_name_final.mp4'

video_matting = pipeline(Tasks.video_human_matting, 
                       model='damo/cv_effnetv2_video-human-matting')
result_status = video_matting({'video_input_path':input_video,
                           'output_path':maskoutput_video})
result = result_status[OutputKeys.MASKS]

# 读取原始视频和抠图的mask视频
cap = cv2.VideoCapture(input_video)
mask_cap = cv2.VideoCapture(maskoutput_video)

# 获取视频帧率和大小
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 创建新的视频文件写入器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_video, fourcc, fps, (width, height))

while True:
    # 读取原始视频和抠图的mask视频的下一帧
    ret, frame = cap.read()
    ret_mask, mask_frame = mask_cap.read()
    
    # 如果没有读取到帧则退出循环
    if not ret or not ret_mask:
        break
        
    # 将抠图的mask视频转换为二进制掩码
    gray_mask = cv2.cvtColor(mask_frame, cv2.COLOR_BGR2GRAY)
    ret, binary_mask = cv2.threshold(gray_mask, 10, 255, cv2.THRESH_BINARY)
    
    # 将原始视频的每一帧与二进制掩码进行按位与运算
    result = cv2.bitwise_and(frame, frame, mask=binary_mask)
    
    # 将生成的每一帧写入到新的视频文件中
    out.write(result)

# 释放资源
cap.release()
mask_cap.release()
out.release()

效果展示

原视频

Mask遮罩

抠图效果

此文章由OpenAI开源维基百科原创发布,如若转载请注明出处:https://openai.wiki/cv_effnetv2_video-human-matting.html

(0)
上一篇 2023-04-07 12:04
下一篇 2023-04-07 22:54

相关推荐

  • VToonify|图片视频动漫化

    VToonify是一个较为新颖且免费开源可生成高质量艺术肖像视频的框架,使用StyleGAN的中分辨率和高分辨率层来渲染艺术肖像,并使用编码器提取的多尺度内容特征来更好地保留帧细节。

    2023-04-03
    0287.0K
  • VideoCrafter|视频生成工具

    VideoCrafter是一个开源视频生成和编辑工具箱,用于制作视频内容。支持从文本Prompt提示词生成视频,支持LoRA模型,另外对已有视频进行风格转换也是支持的,类似于SD绘画的图生图功能。

    2023-07-25
    012.2K
  • FaceSwap|Windows安装教程

    FaceSwap是一款强大的人脸转换软件,支持在Windows系统中运行。本文将详细介绍如何在Windows系统中安装FaceSwap,包括安装所需的工具和依赖项,以及步骤详细的安装教程。

    2022-12-14
    026.5K
  • Roop|AI快速换脸

    最近开源AI实时换脸项目比较火,使用roop工具您可以将一段视频中的人脸替换成您选择的人脸,只需要一个所需人脸的图像,无需数据集和训练。速度极快,提及小巧,在特定素材条件下的效果也还不错。

    2023-06-08
    0177.4K
  • StableVideo|稳定扩散视频生成

    StableVideo项目的宗旨是生成稳定的视频,通过文本驱动AI生成画面一致性,感知扩散视频编辑,对于显存的要求也并不高。

    2023-08-27
    001.8K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

微信