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

209 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 图片去背景工具
使用rembg库实现的Python去背景工具
## 快速开始
```bash
# 激活虚拟环境
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 | 人像专用 |
### 手动下载模型(网络问题时)
```bash
# 创建目录
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
```
### 清理模型缓存
```bash
# 删除所有已下载的模型
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-use``birefnet-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: 前景被过度去除
**解决方案**:
```python
alpha_matting = True
alpha_matting_foreground_threshold = 270 # 增加此值
alpha_matting_background_threshold = 10 # 保持较小
```
### 问题2: 背景残留太多
**解决方案**:
```python
alpha_matting = True
alpha_matting_foreground_threshold = 240 # 保持默认或减小
alpha_matting_background_threshold = 20 # 增加此值
post_process_mask = True # 启用后处理
```
### 问题3: 边缘不自然、有锯齿
**解决方案**:
```python
alpha_matting = True
alpha_matting_erode_size = 15 # 增加平滑程度
```
### 问题4: 毛发、头发细节丢失
**解决方案**:
```python
model_name = "birefnet-portrait" # 使用人像专用模型
alpha_matting = True
alpha_matting_foreground_threshold = 270 # 增加以保留细节
alpha_matting_erode_size = 5 # 减小以保留细节
```
## 推荐配置
### 配置1: 高质量人像
```python
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: 通用高质量
```python
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: 快速处理
```python
model_name = "u2netp"
alpha_matting = False
post_process_mask = False
```
## 测试不同参数
建议按以下顺序调整:
1. 先尝试不同的模型
2. 启用alpha_matting
3. 调整foreground_threshold和background_threshold
4. 最后调整erode_size
每次修改后运行脚本,对比结果。