高清背景移除算法

news/2024/11/23 5:13:52/

环境

  • ubuntu 18.04 64bit

  • pytorch 1.7.1 + cu101

简介

BackgroundMattingV2 是一个实时的、可应用于高分辨率的背景移除器。论文地址:https://arxiv.org/abs/2012.07810

254733f9e0f8b5ca2673c3442363f826.gif

BackgroundMattingV2

算法体验

# 下载源码
git clone https://github.com/PeterL1n/BackgroundMattingV2.git
cd BackgroundMattingV2# 安装pytorch gpu版
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

模型下载地址

链接:https://pan.baidu.com/s/1GsPQtCI2HpD_kRlWWhhIfQ
提取码:p1r1

解压后放在源码根目录,其中 Resource 有下文要用到的视频及背景图片

工程中提供了三个演示程序:

  • inference_images.py: 图片背景移除

  • inference_video.py: 视频背景移除

  • inference_webcam.py: 从摄像头读取进行背景移除

这里以视频背景移除为例,其它2个示例类似,执行命令

# 没有gpu的,device处就写cpu或不写这个参数
python inference_video.py --model-type mattingrefine --model-backbone resnet50 --model-backbone-scale 0.25 --model-refine-mode sampling --model-refine-sample-pixels 80000 --model-checkpoint BackgroundMattingV2models/PyTorch/pytorch_resnet50.pth --device cuda --video-src d2.mp4 --video-bgr d2.png --output-dir video_output --output-types com

处理完毕得到的视频,原背景已经被消除了,换成了默认的绿色

98c15a5d698ed6d7e0a78a9fb4655448.png

BackgroundMattingV2

如果想要自定义背景,可以通过添加参数 --video-target-bgr images/background.jpg 来实现,不过这里,会报错,出错信息如下

Traceback (most recent call last):File "inference_video.py", line 182, in <module>for input_batch in tqdm(DataLoader(dataset, batch_size=1, pin_memory=True)):File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/tqdm/std.py", line 989, in __init__total = len(iterable)File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 397, in __len__return len(self._index_sampler)File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/torch/utils/data/sampler.py", line 243, in __len__return (len(self.sampler) + self.batch_size - 1) // self.batch_size  # type: ignoreFile "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/torch/utils/data/sampler.py", line 70, in __len__return len(self.data_source)File "/home/xugaoxiang/workshop/github/BackgroundMattingV2/dataset/zip.py", line 14, in __len__return max(len(d) for d in self.datasets)File "/home/xugaoxiang/workshop/github/BackgroundMattingV2/dataset/zip.py", line 14, in <genexpr>return max(len(d) for d in self.datasets)
ValueError: __len__() should return >= 0
Exception ignored in: <function tqdm.__del__ at 0x7ff206daf9d0>
Traceback (most recent call last):File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/tqdm/std.py", line 1147, in __del__self.close()File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/tqdm/std.py", line 1266, in closeif self.disable:
AttributeError: 'tqdm' object has no attribute 'disable'

tqdmissue 里也看到了这个问题,很多人反馈,貌似,问题还是存在,讨论链接:https://github.com/tqdm/tqdm/issues/487

如果是改纯色背景的话,我们就不用这个参数 --video-target-bgr,然后直接去修改代码 inference_video.py,如下,(120, 255, 155)是默认的绿色,自行替换就可以了

c59d4a7490a98e5b8003364044bd9c07.png

BackgroundMattingV2

比如将颜色改为 (226, 43, 138),效果如下

8e3a4aaae02e38ff4b957ce856ed02ec.png

BackgroundMattingV2

上例中使用的是 pytorch 的模型,BackgroundMattingV2 还支持 TorchScriptTensorFlowONNX,至于它们的使用方法,可以参考文档 https://github.com/PeterL1n/BackgroundMattingV2/blob/master/doc/model_usage.md

插件应用

BackgroundMattingV2 还提供了一个插件( plugin )程序来处理摄像头的数据,目前这个插件只能运行在 linux 平台上,ok,下面我们也来体验一下

首先还是下载源码

git clone https://github.com/andreyryabtsev/BGMv2-webcam-plugin-linux.git
cd BGMv2-webcam-plugin-linux

插件依赖于内核模块 v4l2loopback ,通过这个模块来创建并串流到虚拟的视频设备节点

首先安装工具

sudo apt-get install v4l2loopback-utils -y

如果已经安装过了 BackgroundMattingV2 的环境,那就只需要再装个 pyfakewebcam,否则就执行 pip install -r requirements.txt

pip install pyfakewebcam

接下来就开始创建设备节点

sudo modprobe v4l2loopback devices=1

但是这里报错了

(base) xugaoxiang@1070Ti:~/workshop/github/BackgroundMattingV2/BGMv2-webcam-plugin-linux$ sudo modprobe v4l2loopback devices=1
modprobe: ERROR: could not insert 'v4l2loopback': Bad address

解决方法如下,首先卸载掉原来安装的包

sudo apt-get remove v4l2loopback-dkms

然后,下载 v4l2loopback 源码

git clone https://github.com/umlaeute/v4l2loopback.git

编译源码,生成内核模块 ko 文件

make

107960181a892981e86994d538149546.png

v4l2loopback

最后安装

sudo make install

4dc9b1efe31209c239fff57c3ee9a2b7.png

v4l2loopback

安装过程中出现了 ssl 相关的错误,可以忽略

为了让模块在系统启动时自动加载,执行

sudo depmod -a

depmod 命令用于生成 modules.depmap 文件,用于在启动时模块的自动加载。

再次创建设备节点 sudo modprobe v4l2loopback devices=1

最后执行

python demo_webcam.py --model-checkpoint ../BackgroundMattingV2models/TorchScript/torchscript_resnet50_fp32.pth

但是,我这里报错了

Corrupt JPEG data: 4 extraneous bytes before marker 0xd6
Corrupt JPEG data: 1 extraneous bytes before marker 0xd2
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Corrupt JPEG data: 4 extraneous bytes before marker 0xd6
Traceback (most recent call last):File "demo_webcam.py", line 586, in <module>fake_camera = pyfakewebcam.FakeWebcam(args.camera_device, cam.width, cam.height)File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/pyfakewebcam/pyfakewebcam.py", line 54, in __init__fcntl.ioctl(self._video_device, _v4l2.VIDIOC_S_FMT, self._settings)
OSError: [Errno 22] Invalid argument
Corrupt JPEG data: 1 extraneous bytes before marker 0xd2
FATAL: exception not rethrown
Aborted (core dumped)

通过命令 v4l2-ctl --list-devices 查看设备节点信息

(pytorch1.7) xugaoxiang@1070Ti:~/workshop/github/BackgroundMattingV2/BGMv2-webcam-plugin-linux$ v4l2-ctl --list-devices
Dummy video device (0x0000) (platform:v4l2loopback-000):/dev/video2UVC Camera (046d:081b) (usb-0000:00:14.0-8):/dev/video0/dev/video1

可以看到 v4l2loopback 节点是 /dev/video2,因此需要去修改下源码 demo_webcam.py,将默认的设备节点由原来的 dev/video1 改为 dev/video2

parser.add_argument('--camera-device', type=str, default='/dev/video2)

然后,再次执行命令 python demo_webcam.py --model-checkpoint ../BackgroundMattingV2models/TorchScript/torchscript_resnet50_fp32.pth

模糊背景效果

5e51df3a62e0ac69ab8c24917371a723.png

自定义背景效果

9e4ffc1110c0da1d578058113f1a2a79.png

BGMv2-linux-plugin

备注

要求测试图片或者视频分辨率要能够被4整除,否则报错

Traceback (most recent call last):File "inference_images.py", line 132, in <module>pha, fgr, _, _, err, ref = model(src, bgr)File "/home/xugaoxiang/anaconda3/envs/pytorch1.7/lib/python3.8/site-packages/torch/nn/modules/module.py", line 727, in _call_implresult = self.forward(*input, **kwargs)File "/home/xugaoxiang/workshop/github/BackgroundMattingV2/model/model.py", line 163, in forwardassert src.size(2) // 4 * 4 == src.size(2) and src.size(3) // 4 * 4 == src.size(3), \
AssertionError: src and bgr must have width and height that are divisible by 4

测试图片及视频

下载地址: https://drive.google.com/drive/folders/16H6Vz3294J-DEzauw06j4IUARRqYGgRD

关联阅读

  • backgroundremover去背

  • rembg去背

  • https://github.com/PeterL1n/BackgroundMattingV2

  • https://github.com/umlaeute/v4l2loopback

  • https://github.com/andreyryabtsev/BGMv2-webcam-plugin-linux


http://www.ppmy.cn/news/439310.html

相关文章

HTML背景

1: background-color设置背景色 2、 设置背景图片 语法&#xff1a;background-image:url(./img) ; _可以同时设置背景色&#xff0c;火绒背景图片&#xff0c;如果同时设置&#xff0c;背景色是在背景图下面 --图片在元素中的位置 如果背景图片大于元素&#xff0c;默认是…

按头安利!好看又实用的中国风 古风高清背景图片素材看这里!

想必大家都在为找中国风 古风高清背景图片而头疼吧&#xff0c;今天小编都为大家整理好咯&#xff0c;超多的中国风 古风高清背景图片资源&#xff0c;大家喜欢的可以先行收藏哈&#xff0c;之后会持续更新哒~ 因为小编的工作原因&#xff0c;经常会使用到中国风 古风高清背景…

【0210】frontend接收到Backend进程的认证请求报文后,如何作出回应 (12)

文章目录 1. 校验消息体(message body)完整度2. 初始化auth_req_received3. 获取请求认证的类型4. 处理身份认证报文的额外数据(extra data)5. 前端完成身份验证交互相关文章: 【0206】Backend 向客户端发送身份认证请求报文(Client authentication) (10 - 1) 【0207】…

windows和android平板,平板的系统,到底该选Windows还是安卓?

原标题&#xff1a;平板的系统&#xff0c;到底该选Windows还是安卓&#xff1f; 2012年微软下定决心推出自己的平板设备surface&#xff0c;最初的surface RT并未搭载完整的windows而饱受诟病&#xff0c;但另一支surface pro经过了4代的演变&#xff0c;已经成为了移动办公、…

平板win10 android哪个耗电,买平板电脑时,应该选win10还是安卓系统?

原标题&#xff1a;买平板电脑时&#xff0c;应该选win10还是安卓系统&#xff1f; 哈喽小伙伴们大家好&#xff0c;我是节奏君~ 科技不断进步&#xff0c;大家对科技产品的要求也越来越高&#xff0c; 今天&#xff0c;我们就一起来讨论一下买平板电脑选系统的事~ 很多小伙伴都…

在Qgis中使用QMetaTiles插件进行XYZ瓦片离线下载方法

目录 前言 一、Qgis插件库 1、插件库简介 2、QMetaTiles介绍 二、QMetaTiles插件安装 1、在线安装 2、离线安装 三、瓦片下载 1、打开QmeaTiles插件 2、Leaflet加载下载的瓦片 总结 前言 电子地图是地图类应用的基石&#xff0c;作为整个系统的基础。其它的图层要素都构…

SpringCloud Alibaba-Seata分布式事务

SpringCloud Alibaba-Seata 1 常用事务解决方案模型1.1 DTP模型1.2 2PC1.3 3PC1.4 TCC 2 Seata2.1 Seata术语2.1 Seata AT模式2.1.1 AT模式及工作流程2.1.2 Seata-Server安装2.1.3 集成springcloud-alibaba 4.2 Seata TCC模式 3 Seata注册中心3.1 服务端注册中心配置3.2 客户端…

win7 改装linux系统教程,linux系统改装win7

正版Windows7系统光驱安装方法&#xff1a; 1.启动计算机&#xff0c;在Linux系统尚未启动前速度按下F12&#xff1b; 2.先放入安装光盘&#xff0c;使用键盘上的“↓”键&#xff0c;将光标移动到带有“CD-ROM”的选项上&#xff0c;按回车键(Enter)确定&#xff1b; 3.出现“…