FOSS AI image background removal software.
去背功能,從GIMP這類修圖軟體誕生以來便存在的操作,是許多修圖者必學的基本功。過去要慢慢用工具圈選背景修圖,如果背景很複雜那真的會修到想死。現今,在AI模型的幫助下,已經可以做一鍵去背操作。
很多軟體都有AI協助去背,比方說GIMP可以安裝 remove.bg的插件,透過線上API去背。
不過,本文我的重點將專注在離線運算的AI去背軟體。
GitHub上有很多去背軟體的開源專案和函式庫,我選擇星星最多的「rembg」。
經實測,給複雜的背景去背,rembg效果良好,速度也非常快。
rembg軟體本身也提供了豐富的API介面,可以輕鬆整合到其他專案使用。如果你不想要打指令,可以跳到本文最後一段看「搭配圖形軟體使用rembg」的方法。
1. 安裝rembg#
rembg軟體由Daniel Gatis開發,主程式用Python寫成,原始碼位於 Github,可於Linux/Windows/macOS安裝。
此處安裝使用Ubuntu Linux做示範。
conda create -n rembg python=3.11.7
conda activate rembg
- 用pip安裝rembg套件
# 純CPU版
pip install rembg[cli]
# 或是裝GPU加速版
pip install rembg[gpu,cli]
- rembg支援多種模型,預設載入的是處理通用圖像的u2net。若要採用其他特化用途的模型,請在指令中指定,rembg會自動下載,並將其放到
~/.u2net
目錄。
rembg提供的模型如下:
- u2net:基於Qin Xue Bin等人發表的 U2-Net所訓練的通用模型。個人認為比較適合真實照片。
- u2netp:輕量版u2net模型。
- u2net_human_seg:專為分割人物訓練的模型。
- u2net_cloth_seg:從人像分割衣服的模型。衣服種類分為上半身、下半身、全身。
- silueta:功能跟u2net一樣,檔案大小縮減到43MB。
- isnet-general-use:基於Qin Xue Bin等人發表的 DIS所訓練的通用模型,效果比u2net更好。
- isnet-anime:專為動漫角色訓練的高精確度分割模型。
- sam:基於 Meta的Segment Anything訓練的通用模型,檔案更大,且需要額外輸入提示詞。
2. rembg命令行使用方式#
例如我要將/home/user/Downloads/input.png
圖片去背,並輸出為/home/user/Downloads/output.png
注意要去背的圖片主體不可以跟背景顏色太接近,否則AI還是會誤判。
指定參數i,給單個檔案去背。輸出為png的話,去背的部份就會變成透明圖層。
rembg i /home/user/Downloads/input.png /home/user/Downloads/output.png
p可以給整個目錄的圖片去背,例如處理input
目錄下的所有圖片,並輸出到output
rembg p /home/user/Downloads/input /home/user/Downloads/output
om僅回傳遮罩,方便在修圖軟體做後續處理
rembg i -om /home/user/Downloads/input.png /home/user/Downloads/output.png
m使用特定模型去背
rembg i -m isnet-anime /home/user/Downloads/input.png /home/user/Downloads/output.png
不過sam模型比較特殊,需要使用以下格式的指令,提供精確的圖片主體座標,SAM才能分割出物件。圖片座標請開GIMP看。
# 座標選取,處理圖片中(390,350)座標的物件
rembg i -m sam -x '{ "sam_prompt": [{"type": "point", "data": [390, 350], "label": 1}] }' /home/user/Downloads/input.png /home/user/Downloads/output.png
# 正方形選取,從圖片左上角(0,30)座標為基準,畫出744x980長寬的選取區域。
rembg i -m sam -x '{ "sam_prompt": [{"type": "rectangle", "data": [0, 30, 744, 980], "label": 1}] }' /home/user/Downloads/input.png /home/user/Downloads/output.png
3. rembg搭配圖形界面軟體使用#
GIMP#
你可以在GIMP使用rembg,這裡使用的是 James Huang製作的RemoveBG.py外掛。
Linux的話先透過 Flatpak安裝GIMP
接著下載作者提供的 RemoveBG-Flatpak.zip,解壓縮,編輯裡面的
RemoveBG.py
,將aiExe =
指向rembg執行檔所在路徑。
aiExe = "/home/user/.local/bin/rembg"
- 賦予
RemoveBG.py
執行權限,並移動到GIMP的plug-ins目錄
chmod +x RemoveBG.py
mv ~/Downloads/RemoveBG.py ~/.var/app/org.gimp.GIMP/config/GIMP/2.10/plug-ins
- 開放GIMP存取session bus
flatpak --user override --socket=session-bus org.gimp.GIMP
之後RemoveBG的選單就會出現在GIMP的濾鏡 → Python-fu
點選後勾選啟用遮罩,並選取要使用的模型(如果沒有你要的模型,請修改
RemoveBG.py
,在陣列加入模型名字)這樣程式會將目前的圖層複製,再加上遮罩。對其按右鍵「套用遮罩」,再按檔案 → 匯出PNG。
Stable Diffusion#
Stable Diiffusion WebUI的作者有開發rembg的擴充功能: stable-diffusion-webui-rembg
透過網頁安裝擴充功能,重新啟動WebUI。
進入Extra頁面,上傳圖片
勾選下方的
Remove Background
,再選取模型,其他都不要勾,點選Generate就會完成去背。
4. 延伸閱讀:AI影片去背#
BackgroundRemover by Johnathan Nader:影片版的Rembg,這個程式的問題就是輸出的mov檔案太巨大了。
Transparent Background by Taehun Kim使用教學:影片去背並生成綠幕,我覺得這個效果比較好。