使用rembg库提取图像前景(移除图像背景),并构建web应用

1、图像中的前景与背景

在深度学习图像处理领域中,图像内容可以被定义为前景与背景两部分,其中感兴趣图形的被定义为前景,不感兴趣区域的背景。如在目标检测中,被框出来的目标则被定义为前景。此外,前景识别也可以理解外显著性识别,具体可以查看https://zhuanlan.zhihu.com/p/441836726。本博文所涉及的rembg库,就是基于显著性提取模型u2net所实现的。

在传统图像处理中,前景是无法被直接提取出来,都是通过将前景图像的灰度与梯度特征不断进行增强,使得其与背景呈现显著性差异;而在深度学习中,前景被明确定义为感兴趣的目标。我们可以使用rembg库,以深度学习的方式进行图像前景提取,其项目地址为:https://github.com/danielgatis/rembg。
在这里插入图片描述

2、安装使用rembg

rembg基于u2net实现前景提取,其默认使用u2net模型进行前景提取。此外,其还提供了u2net_human_seg、u2net_cloth_seg、u2netp等模型。相比于通用模型,u2net_human_seg、u2net_cloth_seg等专业模型效果更好。u2netp是相对于u2net的轻量化模型。

2.1 安装rembg

下面的第二个命令时用于安装命令行支持,如果不在终端使用,则可以不进行安装。

pip install rembg # for library
pip install rembg[cli] # for library + cli

后续使用过程中可能会出现以下报错 requests.exceptions.SSLError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url:
在这里插入图片描述
参考 https://blog.csdn.net/weixin_42210687/article/details/103480208进行解决,具体步骤为安装:

pip install cryptography
pip install pyOpenSSL
pip install certifi

如果安装后还有报错,则手动到 https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net.onnx下载文件,并保存到电脑用户目录下的.u2net文件夹中,具体如下所示
在这里插入图片描述

如果要使用u2net_human_seg、u2net_cloth_seg、u2netp等模型进行前景提取,也可以自行下载。
u2net_human_seg:https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net_human_seg.onnx
u2net_cloth_seg:https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net_cloth_seg.onnx
u2netp:
https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2netp.onnx

2.2 在终端中使用rembg

rembg cli指定模型进行前景提取

rembg i -m u2net_custom -x '{"model_path": "~/.u2net/u2net.onnx"}' path/to/input.png path/to/output.png

rembg 命令支持4种模式:

  • i 加载文件测试
  • p 测试文件夹
  • s 测试http图片
  • b RGB24格式的二进制图片

此外还有参数-m、-om 、-a,-m用于指定模型,-om用于设置保存背景,-a用于删除应用 Alpha 抠图的背景

可以使用以下命令查看命令使用帮助
rembg --help

执行以下命令实现将互联网中的图片进行前景提取,并保存为output.png

curl -s "https://raw.githubusercontent.com/danielgatis/rembg/master/examples/animal-2.jpg" -o output.png

结果图如下所示
请添加图片描述
原图如下所示:
在这里插入图片描述
处理本地文件夹,命令如下所示,./image为要处理的图片目录,image_out为处理结果的存放目录
rembg p -m u2net ./image ./image_out
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据官网说明,还有以下命令可用
在这里插入图片描述

提取视频帧进行前景识别

这里是b模式的使用,以下命令需要依赖ffmpeg
ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o folder/output-%03u.png

额外命令

官方项目还指出,可以基于sam 模型输入额外提示进行前景提取


rembg i -m sam -x '{ "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] }' examples/plants-1.jpg examples/plants-1.out.png

在这里插入图片描述

2.3 在代码中使用

以字节形式输入和输出

from rembg import remove

input_path = 'input.png'
output_path = 'output.png'

with open(input_path, 'rb') as i:
    with open(output_path, 'wb') as o:
        input = i.read()
        output = remove(input)
        o.write(output)

输入和输出为 PIL 图像

from rembg import remove
from PIL import Image

input_path = 'input.png'
output_path = 'output.png'

input = Image.open(input_path)
output = remove(input)
output.save(output_path)

输入和输出为 numpy 数组

from rembg import remove
import cv2

input_path = 'input.png'
output_path = 'output.png'

input = cv2.imread(input_path)
output = remove(input)
cv2.imwrite(output_path, output)

如何以高性能方式循环访问 通过这种模式调用,只加载一次模型

from pathlib import Path
from rembg import remove, new_session

session = new_session()

for file in Path('path/to/folder').glob('*.png'):
    input_path = str(file)
    output_path = str(file.parent / (file.stem + ".out.png"))

    with open(input_path, 'rb') as i:
        with open(output_path, 'wb') as o:
            input = i.read()
            output = remove(input, session=session)
            o.write(output)

3、在graio中构建web项目使用

使用gradio部署ai模型可以参考:https://blog.csdn.net/a486259/article/details/135219068?spm=1001.2014.3001.5501

3.1 python代码

代码如下所示,在代码同级目录下创建examples文件夹,存放5个图片,文件名如代码内所示。


import gradio as gr 
from PIL import Image

from pathlib import Path
from rembg import remove, new_session

session = new_session()
def predict(input_img,conf):
    output = remove(input_img, session=session)
    return output
if __name__=="__main__":
    gr.close_all() 
    #demo = gr.Interface(fn = cls_predict,inputs = gr.Image(type='pil'), outputs = gr.Label(num_top_classes=5), examples = ['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',])
    with gr.Blocks(title="在线抠图") as demo:
        gr.Interface(fn = predict,inputs = [gr.Image(type='pil')
                                                   ], 
                                        outputs = "image",
                                        examples = [['examples/1.jpg'],
                                                                ['examples/2.jpg'],
                                                                ['examples/3.jpg'],
                                                                ['examples/4.jpg'],
                                                                ['examples/5.jpg'],
                                                                ]
                                                       )
    demo.launch()

3.2 部署效果

在这里插入图片描述

3.3 生成exe

基于pyinstaller将gradio程序打包为exe可以参考 使用pyinstaller打包生成exe(解决gradio程序的打包问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/313810.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openssl快速生成自签名证书

系统:Centos 7.6 确保已安装openssl openssl version生成私钥文件 private.key (文件名自定义) openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048-out private.key:生成的私钥文件-algorithm RS…

从零学Java Set集合

Java Set集合 文章目录 Java Set集合1 Set 集合2 Set实现类2.1 HashSet【重点】2.2 LinkedHashSet2.3 TreeSet 3 Comparator 自定义比较器 1 Set 集合 特点:无序无下标、元素不可重复。 方法:全部继承自Collection中的方法。 常用方法: publ…

❤ Vue3 完整项目太白搭建 Vue3+Pinia+Vant3/ElementPlus+typerscript(一)yarn 版本控制 ltb (太白)

❤ 项目搭建 一、项目信息 Vue3 完整项目搭建 Vue3PiniaVant3/ElementPlustyperscript&#xff08;一&#xff09;yarn 版本控制 项目地址&#xff1a; 二、项目搭建 &#xff08;1&#xff09;创建项目 yarn create vite <ProjectName> --template vueyarn install …

最佳实践:如何在 SoapUI 中进行 REST 服务的测试

SoapUI 频繁地被选择为 SOAP 和 REST API 的自动化测试利器&#xff0c;得益于其友好的用户界面&#xff0c;测试人员毫不费力便可校验 REST 和 SOAP 协议的 Web 服务。它尤其适用于那些需要进行复杂测试的场合。 1、设置接口 我利用了 Swagger 去设置了一批即将投入使用的接…

zookeeper下载安装部署

zookeeper是一个为分布式应用提供一致性服务的软件&#xff0c;它是开源的Hadoop项目的一个子项目&#xff0c;并根据google发表的一篇论文来实现的。zookeeper为分布式系统提供了高效且易于使用的协同服务&#xff0c;它可以为分布式应用提供相当多的服务&#xff0c;诸如统一…

青年人格测验

青年人格量表也叫加州人格量表&#xff08;cpi&#xff09;&#xff0c;源于美国心理学家高夫的人格理论&#xff0c;共包含有18个维度&#xff0c;其中每个维度都是人格的基础元素&#xff0c;是人们在成长和外界交往中所形成的。 主要应用在人才测评领域&#xff0c;用来评估…

基于视频智能分析技术的AI烟火检测算法解决方案

一、背景需求 根据国家消防救援局公布的数据显示&#xff0c;2023年共接报处置各类警情213.8万起&#xff0c;督促整改风险隐患397万处。火灾危害巨大&#xff0c;必须引起重视。传统靠人工报警的方法存在人员管理难、场地数量多且分散等问题&#xff0c;无法有效发现险情降低…

Java并发之同步三:Condition条件队列

一、总览 二、源码分析 2.1 人口 public Condition newCondition() {return sync.newCondition();}final ConditionObject newCondition() {return new ConditionObject();}public class ConditionObject implements Condition, java.io.Serializable {private static final lo…

细说DMD芯片信号-DLP3

1&#xff0c; Block diagram 2. 信号介绍 2.1, LS interface&#xff1a; LD_Data_P/N(i), LD_CLK_P/N(i), LS_RDATA_A_BIST(O) 2.2, 视频信号: HSSI(High speed serial interface) High speed Differential Data pair lan A0~7 P/N, High speed Differential Clock A High…

《Vue2 进阶知识》动态挂载组件之Vue.extend + vm.$mount

前言 目前工作还是以 Vue2 为主&#xff0c;今早有人提问 如何动态挂载组件&#xff1f; 话说很久很久以前就实现过&#xff0c;今天再详细的整理一下此问题&#xff01; 开始 动态组件如下&#xff0c;是个简单的例子&#xff1a; 但请注意这里给了个 id"test2"…

CloudCompare——点云空间圆拟合

目录 1.概述2.软件实现3.完整操作4.算法源码5.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——点云空间圆拟合&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的To…

【Java反射】Java利用反射获取和设置对象某属性的值

通用工具类&#xff1a; package com.zlp.util;import com.fasterxml.jackson.annotation.JsonProperty;import java.lang.reflect.Field;public class ReflectUtil {/*** 反射获取对象的属性值** param object 对象&#xff08;要遍历的对象&#xff09;* param targetFieldN…

QT上位机开发(日志调试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 程序开发中有很多的调试方法&#xff0c;比如说IDE调试&#xff0c;也就是设置断点、查看变量等等&#xff1b;比如说日志调试&#xff1b;比如说c…

Vue2 实现带输入的动态表格,限制el-input输入位数以及输入规则(负数、小数、整数)

Vue2 实现el-input带输入限制的动态表格&#xff0c;限制输入位数以及输入规则&#xff08;负数、小数、整数&#xff09; 在这个 Vue2 项目中&#xff0c;我们实现一个限制输入位数&#xff08;整数16位&#xff0c;小数10位&#xff09;以及输入规则&#xff08;负数、小数、…

Python商业数据挖掘实战——爬取网页并将其转为Markdown

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言前言正则表达式进行转换送书活动 前言 在信息爆炸的时代&#xff0c;互联网上的海量文字信息如同无尽的沙滩。然而&#xff0c;其中真正有价值的信息往往埋…

如何高效编写测试用例

本话题暂不探讨是否有必要编写详细的测试用例&#xff0c;在确定要交付详细的测试用例这个前提下&#xff0c;分享如何更高效地完成测试用例的编写。 对齐测试用例需求 首先、明确要完成的测试用例文档目标要求&#xff0c;模板、范围、粒度等。 用例文档使用者&#xff1a;…

内网穿透NPS搭建以及使用

今天说一下 内网穿透代理&#xff08;NPS&#xff09;搭建以及使用&#xff0c;内网穿透必然有一个外网服务器做代理转发&#xff0c;市面上的NATAPP、花生壳等也都是一个原理。 需求&#xff1a; window 本地开发&#xff0c;外网访问本地服务联合调试 环境&#xff1a; 公网…

HackerGPTWhiteRabbitNeo的使用及体验对比

1. 简介 WhiteRabbitNeo&#xff08;https://www.whiterabbitneo.com/&#xff09;是基于Meta的LLaMA 2模型进行特化的网络安全AI模型。通过专门的数据训练&#xff0c;它在理解和生成网络安全相关内容方面具有深入的专业能力&#xff0c;可广泛应用于教育、专业培训和安全研究…

基于python的室内老人实时摔倒智能监测系统(康复训练检测+代码)

概述 导入所需的库&#xff0c;包括cv2、和numpy。 定义了一个用于计算角度的函数calculate_angle(a, b, c)&#xff0c;其中a、b和c是三个关键点的坐标。 初始化姿态检测和绘图工具。 打开并读取视频文件。 -摔倒检测&#xff08;fallen&#xff09; 循环遍历视频的每一帧…

【计算机组成-计算机基本结构】

课程链接&#xff1a;北京大学陆俊林老师的计算机组成原理课 1. 电子计算机的兴起 原因&#xff1a;二战对计算能力的需求世界上第一台通用电子计算机 ENIAC&#xff08;Electronic Numerical Integrator And Computer&#xff09;&#xff1a;时间&#xff1a;1946&#xff1…