30行代码实现一个带UI界面的图片背景移除工具:并附带web网页

简介: 人工智能技术正处于蓬勃发展中,移除图片背景的方法众多,涵盖了各式各样的实现途径和模型。然而,这些方法往往在安装和配置环境方面稍显复杂。今天,介绍一种极其简便的方法——大约30行代码,就能实现这一功能。虽然相比之下可能稍显简单,但对于不太苛刻的需求来说,这种方法颇为方便实用。

人工智能技术正处于蓬勃发展中,移除图片背景的方法众多,涵盖了各式各样的实现途径和模型。然而,这些方法往往在安装和配置环境方面稍显复杂。今天,介绍一种极其简便的方法——大约30行代码,就能实现这一功能。虽然相比之下可能稍显简单,但对于不太苛刻的需求来说,这种方法颇为方便实用。

最终效果图

软件UI

Web UI

前置:python3是必须的,>=3.8,<=3.12

创建并激活虚拟环境

一个项目使用一个独立的虚拟环境,这是一个好习惯,避免模块冲突,同时也方便未来可能的打包。


创建一个英文目录并进入该文件夹,地址栏输入cmd回车,会打开一个cmd窗口,在窗口中输入命令python -m venv venv && .\venv\scripts\activate 创建并激活了虚拟环境


用pip安装2个库

  • pillow:这是python中用来处理图片的著名库
  • rembg:这是用来移除背景的核心库,主角就是它


执行命令安装:

pip install pillow rembg

非必须但建议

有条件最好搞个代理,以加速从github下载模型,当然没有也可以,但你懂的原因,速度很慢

如果有代理,加速代理地址端口是 127.0.0.1:10809,在cmd窗口中分别执行2条命令

set http_proxy=http://127.0.0.1:10809
set https_proxy=http://127.0.0.1:10809

创建个 start.py 文件

输入以下30行代码

from tkinter import *
from rembg import remove
from PIL import Image
from tkinter import filedialog
root = Tk()
root.geometry("800x400")
root.maxsize(800, 400)
root.minsize(800, 400)
root.title("移除图片背景")
caption = Label(root, text="")
def removeImageBg():
    filename = filedialog.askopenfilename(initialdir="/", title="选择一个png格式图片", filetypes=(("png图片", "*.png*"),))
    try:
        if(filename == ""):
            caption.configure(text="必须选择图片", fg="red")
        else:
            caption.configure(text="处理中请稍后...", fg="#333333")
            root.update_idletasks()
            openimg = Image.open(filename)
            removeBg = remove(openimg)
            removeBg.save(f"{filename}-已删除背景.png")
            caption.configure(text="处理完成", fg="#11934A")
            root.update_idletasks()
    except Exception as e:
        caption.configure(text=f"出错了{str(e)}", fg="red")
selectImgBtn = Button(text="选择png图片立即移除", padx=30, pady=10, bg="#76ABAE", fg="#31363F", cursor="hand2",   command=removeImageBg)
selectImgBtn.pack(side=TOP, anchor=CENTER, pady=20)
caption.pack(side=TOP, anchor=CENTER)
root.mainloop()

其实核心就是这3行

openimg = Image.open(filename)
removeBg = remove(openimg) 
removeBg.save(f"{filename}-已删除背景.png")
  • 读取要移除背景的原始图片:openimg = Image.open(filename)
  • 移除图片openimg中的背景: removeBg = remove(openimg)
  • 然后将移除背景后的新图片保存到计算机: removeBg.save(f"{filename}-已删除背景.png")


其他都是构建ui界面、输出处理信息等辅助元素。

执行 start.py

cmd窗口输入 python start.py,会显示开头的ui图,点击按钮选择要处理的原始png格式图片。


例如原始图片

选择原始图片后将立即自动处理。

处理完成


完成后将在原始图片同目录下创建“原图片名-已删除背景.png”图片,如下图,效果还凑合吧。

第一次使用时将自动下载模型

不论是ui界面形式还是命令行形式,第一次使用,将从GitHub上自动下载模型(167MB),如果未填写代理,下载可能很慢,或许只有几十几百kb,耐心等待哦。

如果有代理,速度或可到几MB,十几MB,下载将很快。

image.gif 编辑

到此就实现了 移除图片中的背景功能,而且除第一次使用需要联网下载模型,后续使用无需联网。

完整ui模式代码

from tkinter import *
from rembg import remove
from PIL import Image
from tkinter import filedialog
root = Tk()
root.geometry("800x400")
root.maxsize(800, 400)
root.minsize(800, 400)
root.title("移除图片背景")
caption = Label(root, text="")
def removeImageBg():
    filename = filedialog.askopenfilename(initialdir="/", title="选择一个png格式图片", filetypes=(("png图片", "*.png*"),))
    try:
        if(filename == ""):
            caption.configure(text="必须选择图片", fg="red")
        else:
            caption.configure(text="处理中请稍后...", fg="#333333")
            root.update_idletasks()
            openimg = Image.open(filename)
            removeBg = remove(openimg)
            removeBg.save(f"{filename}-已删除背景.png")
            caption.configure(text="处理完成", fg="#11934A")
            root.update_idletasks()
    except Exception as e:
        caption.configure(text=f"出错了{str(e)}", fg="red")
selectImgBtn = Button(text="选择png图片立即移除", padx=30, pady=10, bg="#1d7dfa", fg="#ffffff", cursor="hand2",   command=removeImageBg)
selectImgBtn.pack(side=TOP, anchor=CENTER, pady=20)
caption.pack(side=TOP, anchor=CENTER)
root.mainloop()

image.gif


不想要界面,只想要命令行使用

那么代码将更简单,仅需5行

from rembg import remove
from PIL import Image
input=Image.open("./2.png")
output=remove(input)
output.save("./2-remove.png")

image.gif

2.png为原始要处理的图片,2-remove.png 是处理后的图片。

想使用GPU加速:有英伟达显卡,并且不那么旧

cmd窗口中分别执行下面2条命令(莫忘了激活虚拟环境哦)

pip uninstall -y rembg
pip install onnxruntime rembg[gpu,cli]

image.gif

然后重新去执行python start.py 即可

想构建一个web界面,在网页中使用

也很简单,继续执行命令

pip install gradio aiohttp watchdog filetype asyncer

image.gif

执行完毕后,接着执行

rembg s --host 0.0.0.0 --port 7000

image.gif

将自动打开web界面


相关文章
|
4月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
526 27
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
201 3
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
458 2
|
7月前
|
人工智能 搜索推荐 IDE
突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案
本文介绍了Web Unlocker API、Web-Scraper和SERP API三大工具,助力解决AI训练与微调数据集获取难题。Web Unlocker API通过智能代理和CAPTCHA绕过技术,高效解锁高防护网站数据;Web-Scraper支持动态内容加载,精准抓取复杂网页信息;SERP API专注搜索引擎结果页数据抓取,适用于SEO分析与市场研究。这些工具大幅降低数据获取成本,提供合规保障,特别适合中小企业使用。粉丝专属体验入口提供2刀额度,助您轻松上手!
389 2
|
9月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
530 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
8月前
|
移动开发 前端开发 API
鸿蒙web加载本地网页资源异常
在鸿蒙NEXT Api 12中,为解决Web组件加载本地资源(如图片、CSS等)失败的问题,我们采用拦截机制。具体步骤如下: 1. **替换路径**:通过正则表达式将HTML和CSS中的资源路径替换为带有标记的URL(如`http://local`),以便后续识别。 2. **拦截与返回**:在资源加载时,拦截带有标记的URL,读取对应的本地文件并返回给Web组件。此过程确保了本地资源能正确加载和显示。 代码实现包括路径替换、资源拦截及响应构建,确保Web页面能够顺利加载本地资源。
437 7
|
8月前
|
运维 网络安全 文件存储
找不到类似 Docker Desktop 的 Web 管理界面?试试这些开源方案
Docker Desktop 是本地容器化开发的利器,但存在无法通过 Web 远程管理、跨平台体验不一致等问题。为此,推荐几款轻量级、可 Web 化管理的 Docker 工具:Portainer 功能全面,适合企业级运维;CasaOS 集成应用商店和 NAS 功能,适合家庭/个人开发环境;Websoft9 提供预集成环境,新手友好。这些工具能有效提升容器管理效率,满足不同场景需求。
454 3
|
9月前
|
存储 JSON JavaScript
WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法
本文介绍了如何使用MxPluginContext动态控制MxCAD项目的UI界面。通过该上下文对象,开发者可以灵活设置UI配置,如控制操作栏显隐、编辑按钮、添加侧边栏等。具体方法包括调用`getUiConfig()`获取并修改`mxUiConfig.json`中的属性,实现界面的定制化。此外,还提供了控制命令行聚焦的功能,解决输入框焦点锁定问题。详细代码示例和效果对比图展示了具体实现步骤,帮助开发者更好地适配项目需求。
|
11月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
10396 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
556 8

热门文章

最新文章

下一篇
oss云网关配置