セルフホスト出来る背景除去ツールです。モデル選択可能なほか、複数の画像にも対応しており、実用的なツールとなっています。
スクリプトの流れ
- apt パッケージを最低限インストール(libgl1, python3-venv など)
- 専用ユーザー
rembgと/opt/rembgディレクトリを作成 - Python venv に
rembg[cpu,cli]+ Gradio をインストール - u2net モデルを事前ダウンロード(~170MB)
- systemd サービスとして登録・自動起動設定
- 起動確認 → アクセス先URLを表示
#!/usr/bin/env bash
# ============================================================
# rembg UI セルフホスト インストールスクリプト
# 対象: Ubuntu 22.04 / 24.04 (LXD コンテナ / 直インストール両対応)
# 実行方法: bash install_rembg.sh
# ============================================================
set -euo pipefail
PORT=7000
INSTALL_DIR="/opt/rembg"
SERVICE_USER="rembg"
MODEL_DIR="/opt/rembg/models"
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
# ── 0. root チェック ──────────────────────────────────────────
[[ $EUID -eq 0 ]] || error "このスクリプトは root (または sudo) で実行してください"
# ── 1. 基本パッケージ ─────────────────────────────────────────
info "システムパッケージを更新中..."
apt-get update -qq
apt-get install -y --no-install-recommends \
python3 python3-pip python3-venv \
libgl1 libglib2.0-0 \
curl wget ca-certificates \
> /dev/null
# ── 2. 専用ユーザー & ディレクトリ ───────────────────────────
info "専用ユーザー '$SERVICE_USER' を作成中..."
id "$SERVICE_USER" &>/dev/null || useradd -r -m -d "$INSTALL_DIR" -s /bin/bash "$SERVICE_USER"
mkdir -p "$INSTALL_DIR" "$MODEL_DIR"
chown -R "$SERVICE_USER":"$SERVICE_USER" "$INSTALL_DIR"
# ── 3. Python 仮想環境 & rembg インストール ───────────────────
info "Python 仮想環境を作成中..."
sudo -u "$SERVICE_USER" python3 -m venv "$INSTALL_DIR/venv"
info "rembg[cpu,cli] をインストール中 (数分かかります)..."
sudo -u "$SERVICE_USER" "$INSTALL_DIR/venv/bin/pip" install --quiet --upgrade pip
sudo -u "$SERVICE_USER" "$INSTALL_DIR/venv/bin/pip" install --quiet \
"rembg[cpu,cli]" \
"gradio>=4.0" \
"onnxruntime"
# ── 4. モデルの事前ダウンロード ───────────────────────────────
info "デフォルトモデル (u2net) を事前ダウンロード中..."
sudo -u "$SERVICE_USER" env \
U2NET_HOME="$MODEL_DIR" \
HOME="$INSTALL_DIR" \
"$INSTALL_DIR/venv/bin/python3" -c "
from rembg.session_factory import new_session
new_session('u2net')
print('モデルのダウンロード完了')
" || warn "モデルの事前ダウンロードに失敗しました (起動時に自動ダウンロードされます)"
# ── 5. systemd サービス登録 ───────────────────────────────────
info "systemd サービスを登録中..."
cat > /etc/systemd/system/rembg.service << EOF
[Unit]
Description=rembg Background Removal UI Server
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=${SERVICE_USER}
Group=${SERVICE_USER}
WorkingDirectory=${INSTALL_DIR}
Environment="HOME=${INSTALL_DIR}"
Environment="U2NET_HOME=${MODEL_DIR}"
Environment="GRADIO_SERVER_NAME=0.0.0.0"
ExecStart=${INSTALL_DIR}/venv/bin/rembg s \
--host 0.0.0.0 \
--port ${PORT} \
--log_level info
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=rembg
# セキュリティ強化
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=${INSTALL_DIR}
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable rembg
systemctl restart rembg
# ── 6. 起動確認 ──────────────────────────────────────────────
info "サービスの起動を確認中 (最大30秒待機)..."
for i in $(seq 1 30); do
if curl -sf "http://127.0.0.1:${PORT}/" > /dev/null 2>&1; then
break
fi
sleep 1
done
# ── 7. 完了メッセージ ─────────────────────────────────────────
echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ rembg UI インストール完了! ║${NC}"
echo -e "${GREEN}╚══════════════════════════════════════════════════╝${NC}"
echo ""
# LXDコンテナのIPを取得
CONTAINER_IP=$(hostname -I | awk '{print $1}')
echo -e " 🌐 Web UI: ${GREEN}http://${CONTAINER_IP}:${PORT}${NC}"
echo -e " 📡 API: ${GREEN}http://${CONTAINER_IP}:${PORT}/api${NC}"
echo -e " 📁 モデル: ${MODEL_DIR}"
echo ""
echo -e " サービス管理:"
echo -e " 状態確認: ${YELLOW}systemctl status rembg${NC}"
echo -e " ログ確認: ${YELLOW}journalctl -u rembg -f${NC}"
echo -e " 停止: ${YELLOW}systemctl stop rembg${NC}"
echo -e " 再起動: ${YELLOW}systemctl restart rembg${NC}"
echo ""
echo -e " APIテスト例:"
echo -e " ${YELLOW}curl -s -F file=@input.jpg http://${CONTAINER_IP}:${PORT}/api/remove -o output.png${NC}"
echo ""
# LXDホストからのポートフォワード案内
echo -e " 💡 LXDホストからアクセスする場合:"
echo -e " ${YELLOW}lxc config device add <コンテナ名> rembg-port proxy \\"
echo -e " listen=tcp:0.0.0.0:${PORT} connect=tcp:127.0.0.1:${PORT}${NC}"
echo ""
完了後のアクセス方法
| 用途 | URL |
|---|---|
| Gradio Web UI | http://<コンテナIP>:7000 |
| API ドキュメント | http://<コンテナIP>:7000/api |
LXDホストからポートフォワードする場合は、スクリプト末尾に表示されるコマンドを実行してください。
lxc config device add <コンテナ名> rembg-port proxy \
listen=tcp:0.0.0.0:7000 connect=tcp:127.0.0.1:7000
その後、ホストの http://localhost:7000 で直接アクセスできます。
モデルは簡単に切り替え可能です。

使用出来るモデルの特徴
| モデル名 | 公式説明・特徴 | 主な用途・おすすめシーン | サイズ目安 / 速度の傾向 | 精度の傾向・特記事項 |
|---|---|---|---|---|
| u2net (デフォルト) | 汎用性の高い事前学習モデル | 一般的な背景除去(写真・イラスト問わず) | 大(約176MB) / 標準 | 高精度・バランス良し。最も安定 |
| u2netp | u2netの軽量版 | 速度重視の大量処理 | 超軽量(4.7MB) / 非常に速い | やや精度↓だが十分実用的 |
| u2net_human_seg | 人体セグメンテーション専用 | 人物写真・ポートレート | 中 / 標準 | 人物の輪郭が非常に綺麗 |
| u2net_cloth_seg | 衣服解析専用(上半身・下半身・全身に分類) | ファッション・服の切り抜き | 中 / 標準 | 衣服の境界が正確 |
| silueta | u2netと同等品質だがサイズを43MBに圧縮 | 軽量かつ高品質を両立 | 43MB / 高速 | u2net並の品質+高速 |
| isnet-general-use | 新世代の汎用モデル | 一般写真・最新の汎用処理 | 中 / 高速 | 最近の画像で特に強い |
| isnet-anime | アニメキャラクター高精度セグメンテーション | アニメ・イラスト・2Dキャラ | 中 / 標準 | アニメ特化で最高クラス |
| sam | Segment Anything Model(エンコーダ+デコーダ) | どんな画像も柔軟に処理 | 大 / やや重 | 万能だがリソース多め |
| birefnet-general | BiRefNetの汎用版(最新SOTA寄り) | 高精度を求める一般用途 | 大 / やや遅め | 細部(髪・透明物)で優秀 |
| birefnet-general-lite | BiRefNetの軽量版 | 速度と精度のバランス | 軽量 / 高速 | 軽快で実用的 |
| birefnet-portrait | 人物ポートレート専用BiRefNet | 人物写真・セルフィー | 中 / 標準 | ポートレート最強 |
| birefnet-dis | 二値画像セグメンテーション(DIS)専用 | シンプルな前景・背景分離 | 中 / 標準 | 明暗差の大きい画像に強い |
| birefnet-hrsod | 高解像度顕著物体検出(HRSOD)専用 | 高解像度画像・詳細重視 | 大 / やや遅め | 4K以上で特に有効 |
| birefnet-cod | 隠蔽物体検出(Concealed Object Detection)専用 | 背景に溶け込むような物体 | 大 / 遅め | 迷彩・隠れた物体に特化 |
| birefnet-massive | 大規模データセットで学習したBiRefNet | 最高峰の汎用高精度 | 最大 / 遅め | 現時点で最強クラス |
| bria-rmbg | BRIA AIによるState-of-the-Art背景除去モデル | 最高精度を求めるプロ用途 | 大 / 標準〜やや遅 | 現時点で最先端 |


