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

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

最终效果图

软件UI Web UI

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

不会安装就去看看这篇教程 juejin.cn/post/738391...

创建并激活虚拟环境

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

创建一个英文目录并进入该文件夹,地址栏输入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条命令

arduino 复制代码
set http_proxy=http://127.0.0.1:10809
set https_proxy=http://127.0.0.1:10809

创建个 start.py 文件

输入以下30行代码

ini 复制代码
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行

ini 复制代码
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,下载将很快。

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

完整ui模式代码

ini 复制代码
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()

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

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

lua 复制代码
from rembg import remove
from PIL import Image
input=Image.open("./2.png")
output=remove(input)
output.save("./2-remove.png")

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

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

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

pip uninstall -y rembg

pip install onnxruntime rembg[gpu,cli]

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

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

也很简单,继续执行命令

pip install gradio aiohttp watchdog filetype asyncer

执行完毕后,接着执行

rembg s --host 0.0.0.0 --port 7000

将自动打开web界面

更多功能和选项,可查看rembg文档 pypi.org/project/rem...

相关推荐
GL_Rain31 分钟前
【OpenCV】Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
人工智能·opencv·计算机视觉
nuclear20111 小时前
使用Python 在Excel中创建和取消数据分组 - 详解
python·excel数据分组·创建excel分组·excel分类汇总·excel嵌套分组·excel大纲级别·取消excel分组
Lucky小小吴2 小时前
有关django、python版本、sqlite3版本冲突问题
python·django·sqlite
GIS 数据栈2 小时前
每日一书 《基于ArcGIS的Python编程秘笈》
开发语言·python·arcgis
爱分享的码瑞哥2 小时前
Python爬虫中的IP封禁问题及其解决方案
爬虫·python·tcp/ip
向阳逐梦2 小时前
ROS机器视觉入门:从基础到人脸识别与目标检测
人工智能·目标检测·计算机视觉
有Li3 小时前
跨视角差异-依赖网络用于体积医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用
人工智能·计算机视觉
傻啦嘿哟3 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
B站计算机毕业设计超人3 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
IT古董4 小时前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习