rembg 可以用本地模型批量移除图片背景。对于要处理一组自有图片、保留透明 PNG 和异常记录的开发者,复用同一个模型会话比每张图重新加载更合适。这里明确选择 u2net 本地后端,不使用文档中的云 API 后端。
按当前要求安装 CPU 后端
项目 README 当前要求 Python≥3.11 且<3.14,本例用 Python 3.11。准备 inputs 文件夹,先放几张主体清晰的 JPG 或 PNG;输出另存 cutouts。

python -m pip install "rembg[cpu]" pillow
首次 new_session 会取得所选模型文件,需要可用网络和磁盘空间;之后能否离线运行取决于缓存是否完整。本文未下载 u2net 运行推理,不声称样例已经抠图成功。
复用会话并保留文件对应关系
保存为 local_cutout.py,运行 python local_cutout.py。
from pathlib import Path
import csv
from PIL import Image
from rembg import remove, new_session
source = Path("inputs")
output = Path("cutouts")
output.mkdir(exist_ok=True)
files = sorted(p for p in source.iterdir()
if p.suffix.lower() in {".jpg", ".jpeg", ".png"})
if not files:
raise ValueError("no supported images")
session = new_session("u2net")
with (output / "status.csv").open("w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["input", "output", "status", "alpha_range", "error"])
for path in files:
name = path.name + ".png"
try:
with Image.open(path) as image:
result = remove(image.convert("RGB"), session=session).convert("RGBA")
alpha_range = result.getchannel("A").getextrema()
result.save(output / name)
writer.writerow([path.name, name, "needs_visual_review", alpha_range, ""])
except (OSError, ValueError, RuntimeError) as error:
writer.writerow([path.name, "", "error", "", type(error).__name__])
print("review cutouts/status.csv and every output image")
完整输入文件名加 .png 保留同名不同扩展名的区别。needs_visual_review 表示文件已产生,尚未人工确认边缘;不因为透明通道存在就标成合格。
透明通道怎么检查
alpha_range 记录透明通道最小值和最大值;若全是 255,图片没有透明像素,若全是 0,主体可能全部丢失。即使范围是 0–255,也只说明存在透明度变化,不能证明抠图正确。
把 PNG 放在深色和浅色两种背景上,检查发丝、半透明区域、边缘白边及主体缺口;逐张对照原图,确认不该删掉的区域仍在。JPEG 不能保留透明背景,因此本例输出 PNG。
批量运行的边界
本例只处理 inputs 第一层;运行前核对输入数量,运行后核对 status.csv 行数和输出文件。失败条目单独检查,不把清单里有行等同于生成成功。
u2net 不发送图片到云后端,但项目还支持其他后端;切换模型或接入云服务前重新核对数据流和许可。需要网页上的手工局部修补时另选编辑器,本例不能保证复杂玻璃或网状物体的完美边缘。
资料与适用范围
本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30752.html