一、准备工作

Code地址:GitHub - PeterL1n/RobustVideoMatting: Robust Video Matting in PyTorch, TensorFlow, TensorFlow.js, ONNX, CoreML!
models地址:Google Drive 或者 Baidu Pan (code: gym7)
官方提供的视频效果如下:
https://raw.githubusercontent.com/PeterL1n/RobustVideoMatting/master/documentation/image/teaser.gif

字节跳动最新 AI 人物抠像论文效果展示_哔哩哔哩_bilibili
想测试下这个模型的效果,本地竟然没有合适的视频,在知乎里找了几个提供免费视频下载的网站:
收藏 | 5个高质量视频下载网站,无版权,无水印,新手必备放心使用 - 知乎

网站

下载是否免费

是否可商用

https://www.newcger.com

Free Stock Video Footage, Royalty Free Videos for Download

https://pixabay.com

Mixkit - Awesome free assets for your next video project

我测试的视频来源于这个网站:Free Stock Videos, Download Royalty Free Videos | Mixkit

二、测试本地视频

根据README提示,可以新建一个测试文件如下:

from inference import convert_videoimport torch
from model import MattingNetworkmodel1 = MattingNetwork('mobilenetv3').eval().cuda()  # 可以选择mobilenetv3或者resnet50
model1.load_state_dict(torch.load('Models/rvm_mobilenetv3.pth'))  # 根据选择的模型选择对应的权重
convert_video(model1,                           # The model, can be on any device (cpu or cuda).input_source='myvideos/demo1.mp4',        # 视频文件路径或者图片的文件夹output_type='video',              # 可选"video" 或 "png_sequence"output_composition='output/demo1_com.mp4',    # 输出视频的路径或者输出图片的文件夹路径.output_alpha="output/demo1_pha.mp4",          # [Optional] Output the raw alpha prediction.output_foreground="output/demo1_fgr.mp4",     # [Optional] Output the raw foreground prediction.output_video_mbps=4,             # Output video mbps. Not needed for png sequence.downsample_ratio=None,           # 下采样的倍数可选(0-1)之间或者为Noneseq_chunk=12,                    # 一次性处理多少帧
)

视频测试效果一:

(人物背景简单,效果较好)

视频测试效果二:

(人物的背景图比较复杂,大部分效果比较好)

三、测试摄像头

在inference.py的基础上进行修改,调用本地摄像头进行测试

import cv2
import time
from torchvision import transforms
from typing import Optional, Tuple
import torch
from model import MattingNetworkdef auto_downsample_ratio(h, w):"""Automatically find a downsample ratio so that the largest side of the resolution be 512px."""return min(512 / max(h, w), 1)def get_frame(num):cap = cv2.VideoCapture(num)while True:ret, frame = cap.read()fps= cap.get(cv2.CAP_PROP_FPS)print("摄像头帧速:", fps)yield framedef convert_video(model,input_resize: Optional[Tuple[int, int]] = None,downsample_ratio: Optional[float] = None,device: Optional[str] = None,dtype: Optional[torch.dtype] = None):"""Args:input_resize: If provided, the input are first resized to (w, h).downsample_ratio: The model's downsample_ratio hyperparameter. If not provided, model automatically set one.device: Only need to manually provide if model is a TorchScript freezed model.dtype: Only need to manually provide if model is a TorchScript freezed model."""assert downsample_ratio is None or (downsample_ratio > 0 and downsample_ratio <= 1), 'Downsample ratio must be between 0 (exclusive) and 1 (inclusive).'# Initialize transformif input_resize is not None:transform = transforms.Compose([transforms.Resize(input_resize[::-1]),transforms.ToTensor()])else:transform = transforms.ToTensor()# Inferenceprint("------------------------------------------------------------>")model = model.eval()if device is None or dtype is None:param = next(model.parameters())dtype = param.dtypedevice = param.devicebgr = torch.tensor([120, 255, 155], device=device, dtype=dtype).div(255).view(1, 1, 3, 1, 1)with torch.no_grad():rec = [None] * 4for src in get_frame(0):src = transform(src)src = src.unsqueeze(0)if downsample_ratio is None:downsample_ratio = auto_downsample_ratio(*src.shape[2:])src = src.to(device, dtype, non_blocking=True).unsqueeze(0)  # [B, T, C, H, W]t1 = time.time()fgr, pha, *rec = model(src, *rec, downsample_ratio)print("frame_cost:", (time.time() - t1) / src.shape[1])print("推理帧率:{:.2f}".format(1/((time.time() - t1) / src.shape[1])))com = fgr * pha + bgr * (1 - pha)frames = com[0]if frames.size(1) == 1:frames = frames.repeat(1, 3, 1, 1)  # convert grayscale to RGBframes = frames.mul(255).byte().cpu().permute(0, 2, 3, 1).numpy()  # [1, 480, 640, 3]yield frames[0]def show_frame(frames):for frame in frames:cv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF == ord('q'):exit()if __name__ == '__main__':# #-------测试摄像头是否可用------------## for frame in get_frame(0):#     cv2.imshow("capture", frame)#     if cv2.waitKey(1) & 0xFF == ord('q'):#         break# #----------------------------------##加载模型# model1 = MattingNetwork('mobilenetv3').eval().cuda()  # or "resnet50"# model1.load_state_dict(torch.load('Models/rvm_mobilenetv3.pth'))model1 = MattingNetwork('resnet50').eval().cuda()  # or "resnet50"model1.load_state_dict(torch.load('Models/rvm_resnet50.pth'))# 返回测试结果frames = convert_video(model1)# 展示推理结果show_frame(frames)

摄像头测试效果:

请自己测试^--^,这里就不放了!

小结:

通过测试对比,这个模型的效果还是不错的,完全能够满足实时性的要求。

参考资料:

GitHub - PeterL1n/RobustVideoMatting: Robust Video Matting in PyTorch, TensorFlow, TensorFlow.js, ONNX, CoreML!

RobustVideoMatting实时人像抠图实践相关推荐

  1. 【Matting】MODNet:实时人像抠图模型-NCNN C++量化部署

    相关链接: [Matting]MODNet:实时人像抠图模型-onnx python部署 [Matting]MODNet:实时人像抠图模型-笔记 [Matting]MODNet:实时人像抠图模型-on ...

  2. 【Matting】MODNet:实时人像抠图模型-笔记

    paper:MODNet: Real-Time Trimap-Free Portrait Matting via Objective Decomposition (AAAI 2022) github: ...

  3. 超强实时人像抠图算法开源,随心所欲背景替换!

    谈到人像抠图想必大家都不陌生.在影视剪辑.直播娱乐.线上教学.视频会议等场景中都有人像分割的身影,它可以帮助用户实时.精准地将人物和背景精准识别出来,实现更精细化的人物美颜.背景虚化替换.弹幕穿人等, ...

  4. untiy 实时人像抠图

    最近公司要求做一个抠图程序,作者想到接一个百度AI来实现抠图,做出来之后效果不是太好,然后领导说想要实时抠图,让用户现场体验更好些,没办法,只能推倒重来,然后在网上找个shader,然后自己改改,就实 ...

  5. android拍照自动裁剪_新功能上线!智能人像抠图、图片自由裁剪,PPT 还能这么玩?...

    众所周知,不少人买平板都是买前「生产力」,买后某奇艺.其实,要打破这个魔咒,一个 WPS 可能就够了. 安卓平板 WPS 不仅能拥有电脑版般的体验,还针对触屏推出了众多实用且前沿的新功能,帮助你快速提 ...

  6. 【视频课】图像分割重磅上新-人像抠图(Matting)实战

    课程介绍 图像分割在直播,电商,自动驾驶等行业中有着广泛的应用,有三AI此前推出了<深度学习之图像分割-理论实践篇>课程,让你以最短的时间掌握深度学习图像分割的基础知识并进行代码实践. 我 ...

  7. 识别速度3.6ms/帧!人像抠图、工业质检、遥感识别,用这一个分割模型就够了...

    支撑影视人像抠图.医疗影像分析.自动驾驶感知等万亿级市场背后的核心技术是什么?那就要说到顶顶重要的图像分割技术.相比目标检测.图像分类等技术,图像分割需要将每个像素点进行分类,在精细的图像识别任务中不 ...

  8. 一键抠图Portrait Matting人像抠图 (C++和Android源码)

    一键抠图Portrait Matting人像抠图 (C++和Android源码) 目录 一键抠图Portrait Matting人像抠图 (C++和Android源码) 1. 项目介绍: 2. MOD ...

  9. openvino c++推理华盛顿大学BackgroundMattingV2模型人像抠图

    使用openvino c++推理华盛顿大学BackgroundMattingV2模型人像抠图. 基本性能:仅使用CPU可以实现720P实时推理 开源项目:https://github.com/king ...

最新文章

  1. WinForm导出文件,你懂的……
  2. 枚举类型和各种类型之间转换
  3. Deep Learning菜鸡篇,我的第一个深度神经网络
  4. python学习-元组tuple(定义、删除、长度、复制、查找、遍历、operator,和列表的区别)
  5. android 自定义帧动画,Android 自定义方式实现帧动画效果
  6. 克制懒惰之飞鸽传书版
  7. 关于AI Architecture未来的一些思考
  8. 作为一位75后的职场宝妈
  9. 美国与中国互联网电视发展状况比较分析研究
  10. Eclipse中英文对照表(整理笔记)
  11. 关于城市旅游的HTML网页设计 HTML+CSS+JS学生旅游网页设计与实现
  12. RTX 3090 Ti和RX 6950 XT参数对比
  13. TIPTOP 4GL——自定义按钮前加图标
  14. linux安装软件apt或者编译安装说明
  15. 2006胡润百富榜发布 张茵荣登中国第一位女首富
  16. ofd在线预览功能开发 前端
  17. JQuery表单的提交方式
  18. 51单片机入门 第一篇:LED灯
  19. 学会用时间赚快钱是对的
  20. 控制台版账务管理系统

热门文章

  1. Tensorflow直播视频流鉴黄 完整项目
  2. 30+男生程序员中年如何破局
  3. 保证一天不困的25个小方法
  4. Easy Crypto 专题总结
  5. flutter图片聊天泡泡_Flutter/dart聊天实例|仿微信界面|红包|朋友圈
  6. 分析了b站敬汉卿的所有视频的弹幕,最多的弹幕居然是
  7. IE退役,Edge接棒,成为Windows 10和Windows 11默认浏览器
  8. android 10小米界面,小米MIUI 10界面提前曝光 升级机型列表曝光
  9. 优化 | 随机原始对偶混合梯度(SPDHG)算法及在图像处理中的应用
  10. 华为28条铁规,值得学习