如何将照片或者视频中的背景图抠掉,机器学习开源项目使用 | 机器学习

article/2025/8/25 2:46:47

目录

前言

开源项目介绍

项目结构

模型下载

测试数据下载

训练数据下载

依赖下载

测试图片的抠图效果

测试视频的抠图效果

总结


前言

本文主要介绍一个神奇有意思的开源项目: 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()

 总的来说,该模型的抠图效果还是很不错的,只是需要我们二次创作。

分享:

        白马非马不算境界,白马是鹿才是境界。——《雪中悍刀行》

如果本文对你有用的话,请不要吝啬你的赞,谢谢!

 


http://chatgpt.dhexx.cn/article/aqStFYQ6.shtml

相关文章

机器学习进阶路上不可错过的 28 个视频

想自学机器学习和深度学习?不妨边看专家讲解视频边自学。不仅能感受世界各地专家的熏陶,也能快速获取知识,一举两得。这篇文章整理了一个 YouTube 视频列表,供希望在该领域学习的朋友使用。 视频观看建议 我将视频分为三类:机器学…

机器学习--降维

降维(Dimensionality Reduction) 视频参考:【机器学习】【白板推导系列】【合集 1~33】_哔哩哔哩_bilibili 笔记参考:降维 语雀 (yuque.com) PCA原理详解:主成分分析(PCA)原理详…

机器学习简介

本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:清风数学建模:https://www.bilibili.com/video/BV1DW411s7wi 注: 因为要用到机器学习工具箱,所以至少需要安装MATLAB2017a的版本&…

python机器学习视频教程百度网盘下载(2023完整版)

文末扫码领资料全套学习路线图和 视频及配套资料 在Python中有很多机器学习的模块,比如Sklearn、Tensorflow、Caffe等,可以很方便地调用一些机器学习的算法。如果你对Python机器学习感兴趣,python机器学习教程哪个好?这份python机…

吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)

强烈感谢黄海广博士给的文章思路 本文中提及的作者便是黄海广博士本人 吴恩达老师的机器学习课程,可以说是机器学习入门的第一课和最热门课程,作者在github开源了吴恩达机器学习个人笔记,用python复现了课程作业,成为热门项目&am…

机器学习视频教程

1. Hadoop—Spark企业应用实战(推荐版) 链接:http://pan.baidu.com/s/1eSJsUTc 密码:q5lt 2. 西安交大应用统计分析SPSS1-48讲 链接:http://pan.baidu.com/s/1slSzYHJ 密码:8twg 3. Python科学计算 链接:http://pa…

机器学习必看的28个视频

想自学机器学习和深度学习?不妨边看专家讲解视频边自学。不仅能感受世界各地专家的熏陶,也能快速获取知识,一举两得。这篇文章整理了一个 YouTube 视频列表,供希望在该领域学习的朋友使用。 转自: http://easygeek.com.cn/articl…

struct timespec 和 struct timeval

转自&#xff1a;http://www.cnblogs.com/book-gary/p/3716790.html time()提供了秒级的精确度 . 1、头文件 <time.h> 2、函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在的秒数 用time()函数结合其他函数&#xff08;如&#xff1a;lo…

time.Timer

文章目录 前言一、代码二、DB三、效果 前言 今天观摩前辈的代码,看到time.Timer的使用,发现对于定时任务可以这样做达到js的setInterval()效果 一、代码 package mainimport ("fmt""gorm.io/driver/postgres""gorm.io/gorm""gorm.io/gorm…

软件测试之性能测试面试题合集(含答案分析细节)

前言 最近这一年&#xff0c;对性能测试有了更多的认知。 压力、强度测试&#xff1a;在一定软硬件环境下&#xff0c;通过高负载的手段来使服务器资源&#xff08;强调服务器资源&#xff0c;硬件资源&#xff09;处于极限状态&#xff0c;测试系统在极限状态下长时间运行是…

2023最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

软件测试面试必杀篇:【2023软件测试面试八股文宝典】

800道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、App测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题&am…

【面经】2023年软件测试面试题大全(持续更新)附答案

整理了一些软件测试方面的资料、面试资料&#xff08;接口自动化、web自动化、app自动化、性能安全、测试开发等&#xff09;&#xff0c;有需要的小伙伴可以文末关注我的VX公众号&#xff0c;无套路自行领取~ 前阵子一位读者告诉我&#xff0c;某位大厂HR给他发了我之前做的面…

软件测试常考面试题-软件测试面试宝典(一篇足矣)

软件测试常考面试题-软件测试面试宝典_MJ813的专栏-CSDN博客&#xff0c;对原文进行整理 扫码关注每日思悟&#xff1a; 介绍解决锻炼思维问题的思路和方法&#xff0c;从不同角度分析问题&#xff0c;让思维变强大&#xff0c;变宽广的同时在测试方面进行学习和方法的拓展&a…

2022最新整理软件测试常见面试题附答案

包含的模块&#xff1a; 本文分为十九个模块&#xff0c;分别是&#xff1a;软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以找我获取&…

软件测试的常用的面试题【带答案】

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫XXX&#xff0c;今年24岁&#xff0c;来自XX&#xff0c;就读专业是电子商务&#xff0c;毕业后就…

十道必问的软件测试面试题(含答案解析)

前言 &#xff08;第一个就刷掉一大批人&#xff09; 有很多“会自动化”的同学来咨询技术问题&#xff0c;他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问&#xff1a;你是定位不到吗&#xff1f;通常结果都是说确实定位不到。 做自…

软件测试最全面试题及答案整理(2022最新版)

目录 1、你的测试职业发展是什么? 2、你认为测试人员需要具备哪些素质 3、你为什么能够做测试这一行 4、测试的目的是什么? 5、测试分为哪几个阶段? 6、单元测试的测试对象、目的、测试依据、测试方法? 7、怎样看待加班问题 8、结合你以前的学习和工作经验&#xf…

软件测试面试——常见的面试问题总结(大全)

目录 1.软件测试级别&#xff1f; 2.软件测试类型&#xff1f; 3.测试方法&#xff1a;动态测试、静态测试&#xff1b;黑盒测试、白盒测试、灰盒测试。 、黑盒测试方法&#xff1a; 3、白盒测试方法&#xff1a; 4.alpha测试和beta测试的区别 5.测试设计方法&#xff1…

2021年软件测试面试题大全

目录 一、面试基础题 简述测试流程: 什么是软件测试&#xff1f;软件测试的目的与原则 问&#xff1a;软件生存周期及其模型是什么&#xff1f; 什么是软件质量&#xff1f; 自动化测试脚本开发的主要步骤: 目前主要的测试用例设计方法是什么&#xff1f; 常见的测试用例…