209 lines
5.6 KiB
Markdown
209 lines
5.6 KiB
Markdown
# 图片去背景工具
|
||
|
||
使用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
|
||
|
||
每次修改后运行脚本,对比结果。
|