From 57cd9a1f392b63a1de61edb225cfabbb6eac1424 Mon Sep 17 00:00:00 2001 From: douboer Date: Tue, 20 Jan 2026 13:44:28 +0800 Subject: [PATCH] first commit --- .DS_Store | Bin 0 -> 8196 bytes .gitignore | 36 ++++++ README.md | 208 ++++++++++++++++++++++++++++++++++ output/.DS_Store | Bin 0 -> 6148 bytes remove_background.py | 258 +++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 + 6 files changed, 505 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 README.md create mode 100644 output/.DS_Store create mode 100644 remove_background.py create mode 100644 requirements.txt diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a9c3e120d5d554d353b3b5b5e44077c20f190373 GIT binary patch literal 8196 zcmeHMPfrs;6n_Iqw;-}W!HUsr(!_YEfdU1I2Wr6>)C6KH7Wq@R?NB#tck1qzf=JS{ z9{m7*0Pn_+;1|%7iJm?A0X+C-XA5PKglHlfXOfxU+c)pM>HBqdw{HpnBwZ^d0HOe( zVCSfIf9p{Fe;y=YxiwW6H;dK=09kgI59|cA(m8C}SPq`Di|-d~68xTrsAo9*FNs z{1Sr*cbwO_IbzDkhCtyCM7RU-S0;XiLcG<{PxH)yqy)-QG9Vc^$^ft3JHdbo=ui&S z@9zp#({S9;(T}99z2i)0NC_$3%39_Lt7lx@tvPAkUg1|+#>_%f)(cApt>@LqEVEqQ zu&C`h7$u4(s}BvU#Oi5Qvr3NVn-LRASPAFV==R5GrOPfhN{wcY8l(YQ7-KDoCS zRt94uH}2;*&5Ffdh%|`*D1e?oS}%h+8O1ICOoDuB=JZ+ZYi1Sh>OR|Zu2=2rABgl1 z_74q3&POi{4PP9-lvf7|dU3OC^UpiWOlGIe8eJ*dMk!O(i-uLsxpdpj7|&>4?GKpV zr=|4+Rd%O}Hjx8`7w)!AspZ96*w}EWn`@DmAL-lK{ph_;(PpN($Q;8pn6

Ao24q zt;|~+3>V)*(if_H%2}eegP2zXKDjkhFHm#AN;B7Gm1W(wb*oI%JKT~-D>7@*raV&4 zK$)i%oB1Z#jiv53g{wkPAtnTX*vuCpDv_qjM-t9j%%b5~YSGsya1CZ*0dlzKp2I76 z4R7EryoV3)6~2=$5+PT}2)Ryfk~`!cc|g`lo>a+GvPJ45LR<5DzkGNt(!lFOdwDBk zTPCy0sOLVNz@P>$RQcF)PIW5#Jc-*pF*?q-d15@7h-*{H>0jFCEjb194YlSAW2c>Q zVsaAi=H$e0-r0ey0y)d~KW=o{Bm*a4pk3HRdHsLu`1Ai0M3N?w0m;C>$^hw@%gm+m z(>H%u1ry=5wub#NcHX#ML!jq^gIA6tdgVCc{vU=YYiP=SQa&~Wq6V8h2=Hi-gJj^3 GGVlYeElqU* literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2de9ca2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ + +# Other files and folders +.settings/ + +node_modules/ +public/ +myenv/ +venv/ +package.json +package-lock.json + +# Executables +*.swf +*.air +*.ipa +*.apk + +# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` +# should NOT be excluded as they contain compiler settings and other important +# information for Eclipse / Flash Builder. + +*.mov +*.mp4 +cert/nginx/*.crt +cert/nginx/*.key + +*.jpg +*.heic +*.jpeg +*.png + diff --git a/README.md b/README.md new file mode 100644 index 0000000..105efc3 --- /dev/null +++ b/README.md @@ -0,0 +1,208 @@ +# 图片去背景工具 + +使用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 + +每次修改后运行脚本,对比结果。 diff --git a/output/.DS_Store b/output/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0