如何将照片或者视频中的背景图抠掉,机器学习开源项目使用 | 机器学习
目录
前言
开源项目介绍
项目结构
模型下载
测试数据下载
训练数据下载
依赖下载
测试图片的抠图效果
测试视频的抠图效果
总结
前言
本文主要介绍一个神奇有意思的开源项目: BackgroundMattingV2
该项目可以将照片或者视频中人的背景扣掉,变成带alpha通道的图片。怎么样?可以设想一下有什么其他用法,可以给个思路,如果可以拿到抠出背景后的图片,可以贴在任意背景上,不就可以任意替换照片人物的背景了吗?还挺有意思哦。
该项目的训练部分,我会简述。
开源项目介绍
我们进入项目GitHub页面,在README部分,我们可以看到作者给出的一些效果。还是很不错的。
项目对照片与视频的效果不太一样。
1)照片是通过原始照片与原始照片的背景图,两张图,抠出带透明通道的png。
2)视频是通过原始视频与背景图,抠出纯绿色背景的人物视频。
项目给出的素材下载的地址很全。我下面按照项目验证效果的顺序,来把项目跑起来。
项目结构
Pycharm把Github地址项目clone下来。
颜色不一致的是我自己添加的代码,可忽略。
我们看到作者提供了现成的inference,可以直接去使用。
模型下载
模型下载地址项目README给出了:模型地址
选择pytorch里面pytorch_resnet50.pth,另一个也可以,看心情。
测试数据下载
我们下载一些测试数据:测试数据
选择一些图片、视频以及对应的背景图,下载下来做测试使用。
训练数据下载
这部分数据看你的需要,如果直接使用作者提供的模型可以忽略这部分。地址:dataset地址
数据还是
依赖下载
项目中的requirements.txt提供了项目所需要的依赖。如下:
kornia==0.4.1
tensorboard==2.3.0
torch==1.7.0
torchvision==0.8.1
tqdm==4.51.0
opencv-python==4.4.0.44
onnxruntime==1.6.0
需要注意一下,本机电脑的NVIDIA显卡驱动是否安装正确。具体可以参考我的另一篇文章,里面有介绍:Pycharm代码docker容器运行调试 | 机器学习系列_阿良的博客-CSDN博客介绍常规的本地化运行机器学习代码,安装Anaconda+cuda显卡驱动支持,许多文章都有介绍,不在此多做赘述了。本文主要是为了解决在工作环境中,本机电脑没有显卡,需要将程序运行在带显卡的远程服务器上。本文会介绍如何部署使用显卡的docker容器、如何使用pycharm连接docker容器运行机器学习代码。版本Pycharm: 2020.1.3docker:19.03.12python: 3.6.13demo算法: BackgroundMattingV2部署下面我会按照.https://huyi-aliang.blog.csdn.net/article/details/120556923
测试图片的抠图效果
先观察一下作者给的inferance_images.py,需要那些参数:
parser = argparse.ArgumentParser(description='Inference images')parser.add_argument('--model-type', type=str, required=True, choices=['mattingbase', 'mattingrefine'])
parser.add_argument('--model-backbone', type=str, required=True, choices=['resnet101', 'resnet50', 'mobilenetv2'])
parser.add_argument('--model-backbone-scale', type=float, default=0.25)
parser.add_argument('--model-checkpoint', type=str, required=True)
parser.add_argument('--model-refine-mode', type=str, default='sampling', choices=['full', 'sampling', 'thresholding'])
parser.add_argument('--model-refine-sample-pixels', type=int, default=80_000)
parser.add_argument('--model-refine-threshold', type=float, default=0.7)
parser.add_argument('--model-refine-kernel-size', type=int, default=3)parser.add_argument('--images-src', type=str, required=True)
parser.add_argument('--images-bgr', type=str, required=True)parser.add_argument('--device', type=str, choices=['cpu', 'cuda'], default='cuda')
parser.add_argument('--num-workers', type=int, default=0, help='number of worker threads used in DataLoader. Note that Windows need to use single thread (0).')
parser.add_argument('--preprocess-alignment', action='store_true')parser.add_argument('--output-dir', type=str, required=True)
parser.add_argument('--output-types', type=str, required=True, nargs='+', choices=['com', 'pha', 'fgr', 'err', 'ref'])
parser.add_argument('-y', action='store_true')args = parser.parse_args()
主要看一下required为True的参数,都属于必填参数。为了比较直观的看到参数的使用,我们不采用直接命令执行的方式。我们通过subprocess调用命令,代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/13 22:43
# @Author : 至尊宝
# @Site :
# @File : main1.py
import subprocesscmd = 'python inference_images.py \--model-type mattingrefine \--model-backbone resnet50 \--model-backbone-scale 0.25 \--model-refine-mode sampling \--model-refine-sample-pixels 80000 \--model-checkpoint "content/pytorch_resnet50.pth" \--images-src "content/img/" \--images-bgr "content/bgr/" \--output-dir "content/output/" \--output-type com'
print(cmd)
child = subprocess.Popen(cmd, shell=True)
child.wait()
命令说明
1、我们下载的模型是pytorch_resnet50.pth,所以model-backbone选择resnet50。
2、注意图片抠图的images-src与images-bgr为图片目录,其中根据文件名产生对应关系。
3、output-types的类型可以支持'com', 'pha', 'fgr', 'err', 'ref',我们就取com,最终输出的带alpha通道的图片。
执行看看效果
效果很不错,头发也比较清楚的抠出来了。
测试视频的抠图效果
观察一下作者给出的inferance_video.py给出的参数。
parser = argparse.ArgumentParser(description='Inference video')parser.add_argument('--model-type', type=str, required=True, choices=['mattingbase', 'mattingrefine'])
parser.add_argument('--model-backbone', type=str, required=True, choices=['resnet101', 'resnet50', 'mobilenetv2'])
parser.add_argument('--model-backbone-scale', type=float, default=0.25)
parser.add_argument('--model-checkpoint', type=str, required=True)
parser.add_argument('--model-refine-mode', type=str, default='sampling', choices=['full', 'sampling', 'thresholding'])
parser.add_argument('--model-refine-sample-pixels', type=int, default=80_000)
parser.add_argument('--model-refine-threshold', type=float, default=0.7)
parser.add_argument('--model-refine-kernel-size', type=int, default=3)parser.add_argument('--video-src', type=str, required=True)
parser.add_argument('--video-bgr', type=str, required=True)
parser.add_argument('--video-target-bgr', type=str, default=None, help="Path to video onto which to composite the output (default to flat green)")
parser.add_argument('--video-resize', type=int, default=None, nargs=2)parser.add_argument('--device', type=str, choices=['cpu', 'cuda'], default='cuda')
parser.add_argument('--preprocess-alignment', action='store_true')parser.add_argument('--output-dir', type=str, required=True)
parser.add_argument('--output-types', type=str, required=True, nargs='+', choices=['com', 'pha', 'fgr', 'err', 'ref'])
parser.add_argument('--output-format', type=str, default='video', choices=['video', 'image_sequences'])args = parser.parse_args()
我们通过subprocess调用命令,代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/14 0:28
# @Author : 至尊宝
# @Site :
# @File : main2.py
import subprocesscmd = '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 "content/pytorch_resnet50.pth" \--video-src "content/video/b8.mp4" \--video-bgr "content/video/b8.png" \--output-dir "content/output1/" \--output-type com'
print(cmd)
child = subprocess.Popen(cmd, shell=True)
child.wait()
参数说明
1、基本和图片处理的参数差不多,只是换了两个参数video-src与video-bgr。
2、准备好视频和背景图。
验证一下效果
效果还不错,头发还是可以看出来的。
总结
这个开源项目还是很优越的,之后我会把这个项目改造改造,变成可以直接用的工具。
说说项目缺点,都是小缺点。
1、图片的处理需要使用目录所谓参数,而不是一张图,如果需要对单一张图处理的话,仍然需要使用文件夹存储图片,有点麻烦。
2、每次都会询问是否需要创建output-dir,看一下代码中的逻辑:
# Create output directory
if os.path.exists(args.output_dir):if args.y or input(f'Directory {args.output_dir} already exists. Override? [Y/N]: ').lower() == 'y':shutil.rmtree(args.output_dir)else:exit()
总的来说,该模型的抠图效果还是很不错的,只是需要我们二次创作。
分享:
白马非马不算境界,白马是鹿才是境界。——《雪中悍刀行》
如果本文对你有用的话,请不要吝啬你的赞,谢谢!
如何将照片或者视频中的背景图抠掉,机器学习开源项目使用 | 机器学习相关推荐
- 如何将模糊照片人脸恢复清晰,GFPGAN机器学习开源项目使用 | 机器学习
目录 前言 环境安装 验证模型 总结 前言 最近看到一个有意思的机器学习项目--GFPGAN,他可以将模糊的人脸照片恢复清晰.开源项目的Github地址:https://github.com/Tenc ...
- 微信动态中的背景图更换
初衷: 图一中的红框中的部分,作为用户自定义的背景图,如果用户没有上传也会为其自动设置一张背景图,当用户点击时则会出现图二中的选项 ,点击取消则选项消失,点击从相册选择则会跳转本机的相册,选择照片后会 ...
- php背景图添加字,怎样给视频后面加背景图 视频加背景图片并添加一行广告文字...
有不少广告小视频中,视频画面是一张海报背景图片,图片上显示一个小视频播放,并且在画面上还有显示一行广告字幕.这样的宣传视频制作其实蛮简单的,怎样给视频后面加背景图片的方法倒是挺多,要给视频加背景图片的 ...
- 如何在eclipse制作的APP中添加背景图
如何在eclipse制作的APP中添加背景图 1.首先把图片拉入drawable-hdpi中,a1.jpg(注:图片名不可为中文) 2.在.xml文件中加入android:background=&qu ...
- vue中动态绑定背景图, 图片水平垂直居中
vue中动态绑定背景图,并且使宽高不等的图片水平垂直居中 外层父元素固定宽高,让图片垂直居中的方法 <div style="width:200px;height:200px;" ...
- 怎么把视频中动态的人物P掉,把视频中不要的人物去掉
怎么把视频中动态的人物P掉?很多小伙伴试过ps抠图,但是你试过视频人物抠图吗?其实道理是一样的,但是操作过程却变难了.今天就给大家带来一个简单的方法,轻松去除视频中的人物.不影响整个画面的呈现. 在拍 ...
- Android项目中最火最常用的优秀开源项目(很有用)
Android项目中最火最常用的优秀开源项目 分类 详细 框架名称 简介 Star 数 最近 更新 UI 刷新 SmartRefreshLayout Android 智能下拉刷新框架 7.7k 1天 ...
- 如何去除视频中的背景?
我们生活在一个图像的时代!随着网络带宽的不断提升,尤其是即将到来的5G时代,我们交流.传播和表达内容的载体也在不断进化,视频已经成为越来越普遍的表达形式.很多网络平台都有非常火的短视频内容.视频和传统 ...
- 针对无人机航拍视频中动态背景下的目标检测
目录 目录 传统目标检测技术 传统目标检测技术 1. 帧间差分 通过连续两帧相同位置像素点间的灰度差来确定目标移动.但只适用于静态背景和目标单一条件的目标检测.仅适用于无人机悬停状态下的目标检测. 2 ...
最新文章
- 【转】使用Javascript改变HTML内容
- Map获取键值,Map的几种遍历方法
- 患上乳腺癌后开发AI诊断模型,这位MIT女科学家获得AAAI首届百万美元最高奖
- HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】
- Vim进阶2 map映射
- 2天后mysql_mysql 学习笔记 第二天
- Linux工作笔记024---Centos7 下查看本机公网IP
- 【岗位详情】腾讯广告后台开发工程师(北京)
- linux netperf的安装
- 台式电脑计算机怎么添加任务栏,win10系统任务栏添加计算机快捷图标的详细技巧...
- html列自动变高,HTML_CSS三行三列DIV高度自适应的设置,用脚本控制三行三列div高度自 - phpStudy...
- 【ICLR 2018】模型集成的TRPO算法【附代码】
- 跳过授权列表--skip-grant-list--案例
- 两年,关于我的四台3D打印机
- redhat 7.4系统安装英伟达独立显卡驱动步骤
- Spring Boot实训开发个人博客4
- 超算入门笔记:大型机上如何运行WRF模式?一文总结(并行运算、Linux基础、作业调度、WRF运行)
- PO,VO,DAO,BO,POJO之间的区别与解释
- 稳压二极管、肖特基二极管、ESD静电保护二极管、TVS瞬态抑制保护管
- 计算机安装重装出现错误,电脑重装系统老是失败要怎么办?我教你几个方法,一定能装上去!...