Files
remove_backgroud/README.md
2026-01-20 13:44:28 +08:00

5.6 KiB
Raw Blame History

图片去背景工具

使用rembg库实现的Python去背景工具

快速开始

# 激活虚拟环境
source ~/venv/bin/activate

# 使用默认参数处理images文件夹
python remove_background.py

# 处理单个文件
python remove_background.py input.jpg output.png

# 查看所有参数-m, --model)

不同模型适用于不同场景:

| 模型名称 | 大小 | 适用场景 | 推荐度 |
|---------|------|---------|--------|
| **isnet-general-use** | 179MB | 通用场景 | ⭐⭐⭐⭐⭐ 默认推荐 |
| birefnet-general | 250MB | 通用场景,质量更高 | ⭐⭐⭐⭐⭐ |
| birefnet-portrait | 250MB | 人像专用 | ⭐⭐⭐⭐⭐ |
| u2net | 176MB | 经典通用模型 | ⭐⭐⭐⭐ |
| u2netp | 4.7MB | 快速处理 | ⭐⭐⭐ |
| u2net_human_seg | 176MB | 人物分割 | ⭐⭐⭐⭐ |
| isnet-anime | 179MB | 动漫角色 | ⭐⭐⭐⭐ |
| silueta | 43MB | 精简快速 | ⭐⭐⭐ |

**使用示例**:
```bash
# 使用默认模型
python remove_background.py input.jpg

# 使用人像专用模型
python remove_background.py input.jpg output.png -m birefnet-portrait

# 使用快速模型
python remove_background.py input.jpg output.png -m u2netp
``
```bash
ls -lh ~/.u2net/

模型大小参考

模型名称 文件大小 特点
u2net 176MB 通用模型
u2netp 4.7MB 轻量级,速度快
isnet-general-use 179MB 新一代通用,推荐
birefnet-general ~250MB 最新通用模型
birefnet-portrait ~250MB 人像专用

手动下载模型(网络问题时)

# 创建目录
mkdir -p ~/.u2net/

# 下载指定模型以isnet-general-use为例
curl -L "https://github.com/danielgatis/rembg/releases/download/v0.0.0/isnet-general-use.onnx" \
  -o ~/.u2net/isnet-general-use.onnx

清理模型缓存

# 删除所有已下载的模型
rm -rf ~/.u2net/

# 删除特定模型
rm ~/.u2net/u2net.onnx

可调整参数说明

1. 模型选择 (model_name)

不同模型适用于不同场景:

  • u2net (默认): 通用模型,适合大多数场景
  • u2netp: 轻量版,速度更快但精度稍低
  • u2net_human_seg: 专门用于人物分割
  • silueta: 精简版u2net (43MB),速度快
  • isnet-general-use: 新一代通用模型,效果可能更好
  • isnet-anime: 专门用于动漫角色
  • birefnet-general: 最新的通用模型,推荐尝试
  • birefnet-portrait: 专门用于人像
  • birefnet-general-lite: 轻量版birefnet

建议: 如果u2net效果不好试试 isnet-general-usebirefnet-general

2. Alpha Matting 参数

Alpha Matting 是后处理步骤,可以显著改善边缘质量,特别是头发、毛发等细节。

alpha_matting (True/False)

  • 作用: 是否启用alpha matting
  • 默认: False
  • 建议: 如果边缘不自然,启用此选项

alpha_matting_foreground_threshold (0-255)

  • 作用: 前景阈值,控制哪些区域被认为是前景
  • 默认: 240
  • 调整建议:
    • 值越大(如270): 保留更多细节,但可能保留一些背景
    • 值越小(如210): 去除更彻底,但可能丢失细节
    • 如果前景被过度去除,增加此值
    • 如果背景残留太多,减小此值

alpha_matting_background_threshold (0-255)

  • 作用: 背景阈值,控制哪些区域被认为是背景
  • 默认: 10
  • 调整建议:
    • 值越大(如20-30): 去除背景更彻底
    • 值越小(如5): 保留更多过渡区域
    • 如果背景残留,增加此值

alpha_matting_erode_size (像素)

  • 作用: 侵蚀大小,用于平滑边缘
  • 默认: 10
  • 调整建议:
    • 值越大(如15-20): 边缘更平滑,但可能损失细节
    • 值越小(如5-8): 保留更多细节,但边缘可能不够平滑

3. Mask后处理 (post_process_mask)

  • 作用: 对mask进行额外的后处理
  • 默认: False
  • 建议: 可以尝试启用看效果是否改善

常见问题解决

问题1: 前景被过度去除

解决方案:

alpha_matting = True
alpha_matting_foreground_threshold = 270  # 增加此值
alpha_matting_background_threshold = 10   # 保持较小

问题2: 背景残留太多

解决方案:

alpha_matting = True
alpha_matting_foreground_threshold = 240  # 保持默认或减小
alpha_matting_background_threshold = 20   # 增加此值
post_process_mask = True                  # 启用后处理

问题3: 边缘不自然、有锯齿

解决方案:

alpha_matting = True
alpha_matting_erode_size = 15  # 增加平滑程度

问题4: 毛发、头发细节丢失

解决方案:

model_name = "birefnet-portrait"  # 使用人像专用模型
alpha_matting = True
alpha_matting_foreground_threshold = 270  # 增加以保留细节
alpha_matting_erode_size = 5             # 减小以保留细节

推荐配置

配置1: 高质量人像

model_name = "birefnet-portrait"
alpha_matting = True
alpha_matting_foreground_threshold = 260
alpha_matting_background_threshold = 15
alpha_matting_erode_size = 10
post_process_mask = True

配置2: 通用高质量

model_name = "birefnet-general"
alpha_matting = True
alpha_matting_foreground_threshold = 250
alpha_matting_background_threshold = 12
alpha_matting_erode_size = 10
post_process_mask = True

配置3: 快速处理

model_name = "u2netp"
alpha_matting = False
post_process_mask = False

测试不同参数

建议按以下顺序调整:

  1. 先尝试不同的模型
  2. 启用alpha_matting
  3. 调整foreground_threshold和background_threshold
  4. 最后调整erode_size

每次修改后运行脚本,对比结果。