Google フォトからの卒業:AI 顔認識搭載 PhotoPrism のセルフホスト構築ガイド

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

「無料」クラウドストレージに隠されたコスト

人生の思い出の写真を Google フォトや iCloud に放り込むのは、論理的な選択のように思えます。便利ですし、検索も機能し、バックグラウンドで「勝手に」行われます。しかし、その利便性は無料ではありません。100GB プランにいずれ支払うことになる月額 1.99 ドルだけでなく、あなたはプライバシーを代償にしています。大手テック企業のアルゴリズムは、家族旅行やプライベートな文書のすべてのピクセルをスキャンし、あなたのデータプロフィールを構築しています。

落とし穴は何でしょうか?これまでのセルフホストツールの多くは、使い勝手が悪いものでした。基本的な NAS ならファイルを保存できますが、クラウド検索のような「魔法」はありません。「ビーチにいる愛犬の写真」を即座に見つける機能は失われます. PhotoPrism はこれを解決します。外部サーバーに 1 バイトも送信することなく、顔認識、オブジェクト検出、ワールドマップといったプロレベルの AI をローカルハードウェアにもたらします。

私はここ 1 年、ホームラボ(HomeLab)メディアスタックを磨き続けてきましたが、PhotoPrism は Google の代わりとして実際に使えると感じた唯一のツールです。動作は軽快で知的であり、リソース設定を調整すればコンテナ環境で非常にスムーズに動作します。

Docker Compose による PhotoPrism のデプロイ

少なくとも 4GB の RAM を搭載したマシンが必要ですが、20,000 枚以上の画像をインデックス化する場合は 8GB を強く推奨します。インデックス作成は CPU にとって重い作業です。PhotoPrism は TensorFlow を使用して写真を「読み取る」ため、コア数が多いほど処理が速くなります。古い Intel Celeron で実行する場合は、最初のクロールに時間がかかることを覚悟してください。

1. ストレージの準備

整理整頓が重要です。設定ファイル用と実際のメディアライブラリ用に専用のディレクトリを作成します。

mkdir -p ~/homelab/photoprism/storage
mkdir -p ~/homelab/photoprism/originals
cd ~/homelab/photoprism

2. 最適化された Docker Compose 設定

デフォルトの SQLite ではなく MariaDB を使用します。なぜでしょうか?それはパフォーマンスのためです。ライブラリが 10,000 アイテムを超えると、SQLite は負荷の高いインデックス作成中の同時リクエストに苦労することがあります。MariaDB は、これらの複雑なクエリをはるかに高速に処理します。docker-compose.yml を作成しましょう。

services:
  photoprism:
    image: photoprism/photoprism:latest
    container_name: photoprism
    restart: unless-stopped
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    ports:
      - "2342:2342"
    env_file: .env
    volumes:
      - "./originals:/photoprism/originals"
      - "./storage:/photoprism/storage"
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.11
    container_name: photoprism-db
    restart: unless-stopped
    volumes:
      - "./database:/var/lib/mysql"
    environment:
      MARIADB_AUTO_UPGRADE: "1"
      MARIADB_DATABASE: photoprism
      MARIADB_USER: photoprism
      MARIADB_PASSWORD: your_secure_password # セキュアなパスワードを入力
      MARIADB_ROOT_PASSWORD: your_root_password # ルートパスワードを入力

3. 環境変数の定義

.env ファイルは機密情報を安全に保ち、Compose ファイルをすっきりとさせます。また、ここでリソースの使用制限を設定することもできます。

PHOTOPRISM_ADMIN_PASSWORD: "choose_a_strong_pass" # 強固なパスワードを選択
PHOTOPRISM_SITE_URL: "http://192.168.1.50:2342/"
PHOTOPRISM_ORIGINALS_LIMIT: -1
PHOTOPRISM_HTTP_COMPRESSION: "gzip"
PHOTOPRISM_DATABASE_DRIVER: "mysql"
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306"
PHOTOPRISM_DATABASE_NAME: "photoprism"
PHOTOPRISM_DATABASE_USER: "photoprism"
PHOTOPRISM_DATABASE_PASSWORD: "your_secure_password" # 設定したパスワードを入力

コマンド一つで起動します。

docker compose up -d

インデックス作成:AI が真価を発揮する場所

http://[your-ip]:2342 でログインします。システムに写真を取り込む主な方法は 2 つあります。**インデックス作成(Indexing)**は、ファイルを移動せずに既存のフォルダ構造をスキャンします。**インポート(Importing)**は、日付に基づいた新しい整理された構造にファイルをコピーします。私は、長年かけて管理してきたフォルダ階層を尊重するため、インデックス作成を好みます。

**Library > Index** に移動し、Start をクリックします。CPU 使用率を確認してください。最近の i5 であれば、PhotoPrism は 1 分間に約 50〜100 枚の写真をインデックス化できます。サムネイルの生成、GPS 座標の抽出、オブジェクト認識が実行されます。サーバーが重くなり始めた場合は、`.env` に PHOTOPRISM_WORKERS: 2 を追加して、他のアプリのために余裕を持たせてください。

検証とプロのヒント

初回実行時はログを注意深く監視してください。docker logs -f photoprism を使用してエラーがないか確認します。「AVX instruction」によるクラッシュが発生する場合、お使い of CPU は標準の TensorFlow ビルドには古すぎる可能性があります。その場合は、「soft-float」または非 AVX の Docker タグに切り替える必要があります。

精度は時間とともに向上します。初期スキャンが完了したら、**People** タブに移動してください。顔のクラスターが表示されます。いくつかにラベルを付ける(例:「お母さん」や「ジョン」)と、システムは似た顔を自動的にマージし始めます。私のテストでは、導入直後の精度は約 90% で、主要なクラウドサービスのパフォーマンスに匹敵しました。

これを真の Google フォトの代替品にするには、スマホで **PhotoSync** を使用してください。自宅の Wi-Fi に接続するたびに、WebDAV 経由で新しい写真をサーバーに自動プッシュできます。これがパズルの最後のピースです。

メディアのコントロールを取り戻すことは、単に年間 24 ドルを節約することではありません。プライベートな思い出を真にプライベートなままに保つことです。PhotoPrism は、スマートな機能を犠牲にすることなくそれを実現できることを証明しています。

Share: