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

相关推荐

  • AI视频生成|发光裙子

    本文详解抖音热门的“AI发光裙舞视频”变现技术,覆盖LiblibAI、即梦AI、可灵AI三大工具的操作指南。从图片生成(SD本地/在线)、动态特效优化,到视频合成的全流程实战,揭秘单条视频涨粉几十万的秘密,并对比免费与付费工具的效率差异,助你快速入局AI内容变现。

    2025-02-27
    00253
  • 视频补全抠像去水印|ProPainter

    ProPainter该项目用于将视频中的人物或水印移除,效果还是不错的,美中不足的是需要自己对视频需要处理的主体进行抠像。

    2023-09-30
    024.3K
  • Roop|AI快速换脸

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

    2023-06-08
    0177.9K
  • FaceFusion|AI快速换脸|Roop升级版

    Roop升级版AI换脸软件免费开源FaceFusion下载安装使用教程,使用FaceFusion您可以将一段视频中的人脸替换成您选择的人脸,只需要一个所需人脸的图像,无需数据集和训练。速度快,体积小。

    2023-08-28
    0147.0K
  • AnimateDiff|文本生成视频

    AnimateDiff是一个用于实现个性化文本到图像扩散模型的动画化,动画化你的个性化文本到图像扩散模型。 可以通过文字生成视频,效果比Stable Diffusion中的图生图更好,闪烁趋近于无。

    2023-07-14
    024.4K

发表回复

登录后才能评论
微信