2024-12-14

在 Android 上安裝圖像背景移除工具

雖然 Android 有很多不同的背景移除工具,但這些工具普遍都不是免費,即使是免費,通常都是有限功能
而且由於這些工具通常都是網絡服務,部分還需要註冊帳戶才能使用服務,非常不方便
因此在下希望找到一些免費、能夠獨立運作的背景移除工具

安裝 PRoot-Distro

Termux 由 2022年12月 發佈的更新,將常見的 Linux發行版 整合到其套件庫
而且還提供 proot-distro 指令,讓使用者更簡單地下載及運作 Linux發行版

在 Termux 輸入

pkg install proot-distro

便會更新及安裝 proot-distro 到 Termux

安裝 Linux 發行版

輸入

proot-distro install debian

便會下載及安裝 Debian (約 41 MB) 到 Termux

除了 Debain ,閣下亦可以輸入

proot-distro list

列出所有其他已經整合到 Termux 的 Linux發行版 ,在下不詳細列舉

登入 Linux 發行版

安裝 Debian 後,輸入

proot-distro login debian

便會以 root 登入 Debian

以 root 登入 Debian 後,輸入

apt update
apt upgrade

更新 Debian 套件至最新版本

安裝 Python3 及 PIP

更新後,輸入

apt install python3-full python3-pip

安裝最新、完整版本的 Python3 及 PIP

安裝 RemBg

安裝 最新、完整版本的 Python3 及 PIP 後,輸入

pip install rembg[cli]

安裝 rembg[cli]

但卻出現 externally-managed-environment 錯誤而無法安裝 rembg

在下估計是因為 Termux 預設的安裝環境不能安裝 PIP套件
因此在下嘗試建立 Python虛擬環境 (Python Virtual Environment) 並將 PIP套件安裝到 Python虛擬環境,輸入

python3 -m venv .venv

(Python虛擬環境 不一定使用 .venv ,只是方便顯示用途)

輸入

.venv/bin/pip install rembg[cli]

終於能夠安裝 rembg (約 300 MB)

RemBg 網頁伺服器

由於 rembg 安裝在 Python虛擬環境 ,因此需要指定 Python虛擬環境 的 路徑才能正確執行 rembg

在下打算使用 網頁伺服器 功能,方便 Android 能在 網頁瀏覽器 以互動操作,輸入

.venv/bin/rembg s

(rembg 預設使用 連接埠 7000 ,可以使用參數 --port <port> 來更改 連接埠)

網頁伺服器運作後,開啟網頁瀏覽器,前往 http://127.0.0.1:7000/ 便會顯示 rembg 的頁面

在 Android 除了能夠在 網頁瀏覽器 中 選擇系統中的檔案 , 還能夠 直接使用鏡頭拍攝相片

暫時不設定其他選項, 選取檔案 或 拍攝相片 後 按 Submit , rembg 便會開始分析圖像並將背景移除

由於第一次分析沒有圖像模型參考, rembg 需要下載圖像模型才能分析圖像
亦即是 rembg 能夠將模型下載到本機,以離線方式運作,不需要依賴網上服務

分析圖像時離開頁面有機會中斷分析
如果發生沒有運作的情況,需要重新整理,再拍 選取檔案 或 拍攝相片 及 提交即可

分析圖像時, Output 的背景會顯示分析進度(但執行時間不一定完全匹配預計時間)

分析完成後, Output 會顯示背景移除的圖片

(由於 JPEG 沒有透明通道,因此圖片會強制轉換為 PNG)

  • Model - 分析圖片時使用的模型,可以選擇:
    • isnet-anime 用於區分動漫角色 (約 176 MB)
    • isnet-general-use 通用模型 (約 179 MB)
    • sam 通用模型,需要設定過濾器 (約 359 MB)
    • silueta 效果與 u2net 相似,能較減少輸出圖像的體積 (約 44 MB)
    • u2net_cloth_seg 用於區分人物與衣物 (約 176 MB)
    • u2net_custom 自訂區分目標 (在下無法下載模型)
    • u2net_human_seg 用於區分人物 (約 176 MB)
    • u2net 通用模型,適合真實照片 (約 176 MB)
    • u2netp 分析速度較快的 u2net (約 5 MB)
  • Foreground threshold - 設定資源分析影像屬於前景內容,數值越高越準確
  • Background threshold - 設定資源分析影像屬於背景內容,數值越高越準確
  • Erosion size - 分析影像侵蝕的範圍,數值越高侵蝕越高,前景圖像與背景圖像的模糊邊緣越少
  • Only mask - 啟動時會提高準確度,但需要較多時間
  • Post process mask - 後期處理分析後的影像,可以作某程度上的美化,但需要較多時間
  • Arguments - 額外參數,不非所有模型都支援

RemBg 指令

RemBg 除了能以網頁伺服器方便基本使用者以互動方式操作外,亦可以使用指令方式操作批次處理

rembg d

下載所有 RemBg 模型

rembg i [options] <input-image> <output-image>

將指定圖像的背景移除並輸出到指定位置

rembg p [options] <input-directory> <output-directory>

將指定目錄中的圖像的背景移除並輸出到指定位置

指令亦可以加入參數

  • -m model-name - 指定模型,預設 u2net
  • -a alpha-matter - 使用 Alpha遮罩
  • -af integer - 設定 Foreground threshold
  • -ab integer - 設定 Background threshold
  • -ae integer - 設定 Erosion size
  • -om - 使用 Only Mask
  • -ppm - 使用 Post Process Mask
  • -w - 顯示進度,只支援目錄指令
  • -d - 刪除原圖,只支援目錄指令(不建議使用)
  • -bgc red green blue alpha - 設定背景顏色,以 RGBA 順序設定數值
  • -x argument - 額外參數
  • --host ip - 設定網頁伺服器的 IP ,預設(及通常)使用 0.0.0.0 ,只支援網頁伺服器指令
  • --port port - 設定網頁伺服器的 連接埠 ,預設使用 7000 ,只支援網頁伺服器指令

總結

以往通常都是需要在電腦上使用圖像編輯軟件,將需要保留的圖像內容選取
再將選取的圖像內容複製並貼上到空白畫板,或將反向選取後移除不需要的內容
如果需要選取的圖像的內容非常複雜,便需要花費大量時間選取圖像內容的邊緣
稍一不慎取消選取的圖像內容,便需要重新選取,是非常花時間的人手操作

現在有大量網上服務及應用程式可以方便移除背景比過去方便得多,使用手提裝置便可以完成
然而這些服務普遍都需要付款,而且這些服務都需要依賴互聯網服務才能使用,因此無法獨立運作
而 RemBg 卻是能夠獨立運作的應用服務,克服必須連接互聯網才能使用的限制
RemBg 是其中一套 Python 函式庫,由於 Android 可以在 Termux 上運行 Linux 環境
配合 Android 能在網頁瀏覽器中直接開啟 鏡頭拍攝 或 選擇相片 亦非常方便

參考資料

沒有留言 :

張貼留言