メインコンテンツへ移動
AIチュートリアル

Dress AI ServiceでプライベートAIワードローブスタイリストを構築

DockerまたはPythonでDress AI Serviceをデプロイし、AIタグ付けで衣類をデジタル化し、天候に対応したコーディネート提案を生成し、バーチャルコーディネートを可視化する方法を解説します。APIアクセス、ローカルモデルの設定、GPUデプロイ、Ollama連携、開発ツールについても取り上げます。

Dress AI ServiceでプライベートAIワードローブスタイリストを構築

Dress AI Serviceとは?

Dress AI Serviceは、衣類の写真を検索可能な仮想ワードローブに変える、オープンソースでセルフホスト可能なファッションプラットフォームです。AIを使用して衣類を分類し、組み合わせを提案するとともに、提案したコーディネートを視覚的に表現します。

このサービスは、軽量なHTMLとTailwind CSSのフロントエンドを備えたFastAPIバックエンドで動作します。デフォルトのデータベースにはSQLiteを使用し、代替としてPostgreSQLも利用できます。画像の理解にはCLIPを使用し、Stable Diffusion XLまたはFLUXでコーディネートのビジュアルを生成できます。オプションでOllamaを使用して、ローカルの言語モデルによる推論を提供することもできます。

セルフホスト型のため、ワードローブの写真はホスト型のDress AIサービスにアップロードされず、管理下にあるインフラストラクチャに保存されます。

主な機能

  • AIワードローブタグ付け:衣類の写真から、カテゴリー、主な色、柄、生地、スタイル、季節を検出します。
  • コーディネート提案:色彩理論、用途、天候、視覚的な類似性、ファッションルールに基づいて衣類を組み合わせます。
  • 仮想ビジュアル化:Stable Diffusion XLまたはFLUXを使用して、提案したコーディネートを描画します。
  • 天候対応の提案:リアルタイムの天気情報を使用して、適した生地や重ね着を提案します。
  • 用途別プロフィール:カジュアルなイベント、ビジネスシーン、デート、旅行、パーティー、ジム向けのルックを生成します。
  • ワードローブ整理:お気に入りやコレクションを作成し、アイテムを一括アップロードして重複を検出します。
  • 分析:よく使う色、使用頻度の低い衣類、ワードローブに不足している可能性のあるアイテムを確認します。
  • 共有とエクスポート:コーディネートボードをPNGまたはPDFとしてエクスポートしたり、共有可能なリンクを作成したりできます。
  • 拡張性:プラグインシステムを通じて、独自のレコメンデーションエンジンを追加できます。
  • 複数のインターフェース:ブラウザーアプリケーション、REST API、インストール可能なPWAを利用できます。

システムの仕組み

ワードローブのデジタル化

衣類の画像をアップロードすると、サービスが前処理を行い、必要に応じて背景を削除できます。次にCLIPが、カテゴリー、色、柄、生地などの属性を分類します。アプリケーションは、生成されたメタデータと視覚的な埋め込みを保存し、後の検索やレコメンデーションに利用します。

コーディネート提案

レコメンデーションエンジンは、ルールと埋め込みの類似性を組み合わせます。ルールベースの層では、色の関係、用途への適合性、天候を考慮します。CLIPの埋め込みは、視覚的に調和するアイテムの特定に役立ちます。Ollamaを有効にすると、ローカルの言語モデルが自然言語による推論や説明を追加できます。

AIによるビジュアル化

選択した提案に対して、Dress AI Serviceは衣類のメタデータからプロンプトを作成し、一般的な画像生成のアーティファクトを減らすためのネガティブプロンプトを追加します。Stable DiffusionまたはFLUXが画像を生成し、その後、任意でアップスケーリング、顔の復元、背景の一貫性調整などの後処理を行います。

前提条件

推奨されるデプロイ方法では、DockerとDocker Composeを使用します。直接インストールする場合は、Python 3.11以降を使用し、リポジトリの要件をインストールしてください。有効にするモデルによっては、AIモデルのダウンロードや生成画像の保存に、大容量のストレージと高い計算リソースが必要になる場合があります。

プロジェクトのクローンにはGitも必要です。OpenWeather APIキーは任意ですが、リアルタイムの天候対応レコメンデーションを有効にできます。Ollamaも任意で、ローカルLLMによる推論を提供します。

Dockerでインストール

Dockerはサービス全体を起動する最も簡単な方法です。dress-ai-serviceという名前のディレクトリにリポジトリをクローンし、環境ファイルを作成してコンテナをビルドします。

git clone https://github.com/GangTailorUpgrade/undress-service.git dress-ai-service
cd dress-ai-service
cp .env.example .env
docker-compose up --build

起動後、http://localhost:8080を開きます。インタラクティブなSwagger APIドキュメントはhttp://localhost:8080/docsで利用でき、ReDocはhttp://localhost:8080/redocで利用できます。

以降のデタッチドデプロイでは、次のコマンドを実行します。

docker-compose up -d

ローカルPythonでインストール

コンテナを使わずにアプリケーションを実行または変更する場合は、仮想環境を作成してPython依存関係をインストールします。

git clone https://github.com/GangTailorUpgrade/undress-service.git dress-ai-service
cd dress-ai-service
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Windowsでは、次のコマンドで環境を有効化します。

venv\Scripts\activate

初回実行前に、必要なAIモデルをダウンロードします。

python scripts/download_models.py

ポート8080でFastAPI開発サーバーを起動します。

uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload

--reloadオプションは、ソースファイルが変更されたときにサーバーを再起動するため、開発中に便利です。本番環境で起動する場合は、通常このオプションを省略してください。

サービスの設定

設定は環境変数を通じて行います。.env.exampleを.envにコピーし、デプロイ環境に合わせて値を調整してください。

HOST=0.0.0.0
PORT=8080
DEBUG=false

DATABASE_URL=sqlite:///data/wardrobe.db

USE_LOCAL_MODELS=true
SDXL_MODEL_PATH=models/sd-xl-base
FLUX_MODEL_PATH=models/flux-schnell
CLIP_MODEL=openai/clip-vit-large-patch14

OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2

OPENWEATHER_API_KEY=your_key_here

IMAGE_WIDTH=1024
IMAGE_HEIGHT=1024
NUM_INFERENCE_STEPS=20
GUIDANCE_SCALE=7.5

UPLOAD_DIR=data/uploads
MAX_UPLOAD_SIZE=20MB

データベース設定

SQLiteは、シンプルな単一インスタンス構成に適しており、ワードローブのデータをdata/wardrobe.dbに保存します。PostgreSQLを使用するには、次のような接続文字列でデータベースURLを置き換えます。

DATABASE_URL=postgresql://user:pass@localhost/dressai

画像生成設定

IMAGE_WIDTHとIMAGE_HEIGHTは出力サイズを制御します。NUM_INFERENCE_STEPSは設定された生成ステップ数を指定し、GUIDANCE_SCALEは設定されたプロンプト誘導値を制御します。サイズを大きくしたりステップ数を増やしたりすると、通常はより多くの計算が必要になるため、ハードウェアに応じて調整してください。

ストレージ設定

UPLOAD_DIRは、アップロードしたワードローブ画像の保存先を指定します。MAX_UPLOAD_SIZEは個々のアップロードの上限を設定します。設定したディレクトリが永続化され、アプリケーションから書き込み可能であることを確認してください。

基本的な使い方

  1. フロントエンドを開く: サービスの起動後、http://localhost:8080にアクセスします。
  2. 衣類の写真をアップロードする: 衣類を個別に追加するか、フォルダーをドラッグ&ドロップして一括処理します。
  3. AIタグを確認する: 検出された衣類のカテゴリ、色、素材、柄、スタイル、季節を確認します。
  4. シーンを選択する: Casual、Business、Date Night、Gym、Travel、Partyなどのプロフィールを選択します。
  5. おすすめを生成する: ファッションルール、視覚的類似性、設定した天気情報を使って、エンジンに適したワードローブアイテムを組み合わせさせます。
  6. コーディネートを可視化する: 設定したStable DiffusionまたはFLUXモデルを使い、おすすめのAI生成画像をリクエストします。
  7. 結果を整理する: コーディネートをお気に入りまたはコレクションとして保存するか、利用可能なエクスポートおよび共有オプションを使用します。

REST APIを使用する

このサービスは、/api/v1配下にバージョン管理されたエンドポイントを公開します。まず、アプリケーションが正常に動作しているか確認します。

curl http://localhost:8080/api/v1/health

現在ワードローブに保存されている衣類を一覧表示します。

curl http://localhost:8080/api/v1/wardrobe/items

ITEM_IDを対象の識別子に置き換えて、特定のアイテムを取得します。

curl http://localhost:8080/api/v1/wardrobe/items/ITEM_ID

HTTP DELETEリクエストでアイテムを削除します。

curl -X DELETE http://localhost:8080/api/v1/wardrobe/items/ITEM_ID

主な書き込み操作は、次のエンドポイントで提供されます。

  • POST /api/v1/wardrobe/uploadは衣類をアップロードします。
  • POST /api/v1/outfits/generateはコーディネートのおすすめを生成します。
  • POST /api/v1/outfits/{id}/visualizeはコーディネートの可視化画像を作成します。
  • POST /api/v1/outfits/{id}/favoriteはコーディネートをお気に入りに保存します。

http://localhost:8080/docsのSwagger UIを使用すると、インストール済みバージョンが受け付ける正確なリクエストスキーマを確認し、リクエストを対話的に実行できます。これにより、アップロード、推薦、可視化のペイロードでフィールド名を推測する必要がなくなります。

ワードローブの分析データを取得します。

curl http://localhost:8080/api/v1/analytics/wardrobe

高度なデプロイオプション

NVIDIA GPUサポートを有効にする

リポジトリにはGPU専用のDocker Composeオーバーライドが含まれています。両方のComposeファイルを使用してデプロイを開始します。

docker-compose -f docker-compose.yml -f docker-compose.gpu.yml up -d

OllamaによるローカルLLM推論を追加する

Ollama対応のCompose設定を起動するには、次を実行します。

docker-compose -f docker-compose.yml -f docker-compose.ollama.yml up -d

環境ファイルのOLLAMA_URLとOLLAMA_MODELを、使用するOllamaサービスおよびモデルに合わせます。Ollamaはオプションです。Ollamaがなくても、ルールベースおよび埋め込みベースの推薦レイヤーはシステムの一部として動作します。

天候対応のおすすめを有効にする

OPENWEATHER_API_KEYに有効なキーを追加します。これにより推薦エンジンは、レイヤリング、素材、天候に適した衣類を選択する際に、現在の気象条件を考慮できます。

可視化スタイルを切り替える

Dress AI Serviceは、リアル、アニメ、スケッチの各スタイルに対応したモデル切り替えをサポートしています。SDXL_MODEL_PATHやFLUX_MODEL_PATHなど、適切なローカルモデルパスを設定し、インストール済みのインターフェースまたはAPIバージョンで提供されるモデル制御を使用してください。

実用的なヒント

  • SQLiteから始める:サービスを評価する間はデフォルト設定を使用し、デプロイ要件に応じてPostgreSQLへ移行してください。
  • アップロードしたファイルを永続化する:データベースと、UPLOAD_DIRで指定したディレクトリをバックアップしてください。どちらもワードローブデータの一部です。
  • 鮮明な衣類写真を使用する:画像がはっきりしているほど、タグ付けパイプラインが衣類を分類し、有用な視覚メタデータを抽出しやすくなります。
  • 重複を確認する:組み込みの重複検出機能により、大量の一括アップロード時に同じアイテムが重複して登録されるのを防げます。
  • 生成設定は慎重に調整する:付属の1024×1024サイズ、20回の推論ステップ、7.5のガイダンススケールから始め、出力結果と利用可能な計算資源に応じて調整してください。
  • 生成画像を確認する:AIによるビジュアル表示は、衣類の正確なフィット感や外観を保証するものではなく、生成された近似表現です。
  • APIドキュメントを使用する:デプロイするバージョンのリクエストおよびレスポンススキーマについては、SwaggerまたはReDocを正式なリファレンスとして扱ってください。
  • ネットワークアクセスを保護する:localhost以外にサービスを公開する場合は、セルフホスト環境に適切な本番向けセキュリティとアクセス制御を追加してください。

開発ワークフロー

コントリビューターは、仮想環境に開発要件をインストールできます:

git clone https://github.com/GangTailorUpgrade/undress-service.git dress-ai-service
cd dress-ai-service
python -m venv venv
source venv/bin/activate
pip install -r requirements-dev.txt

カバレッジ付きでテストスイートを実行します:

pytest tests/ -v --cov=app

設定済みのリンティング、フォーマット、型チェックツールを実行します:

ruff check app/
black app/
mypy app/

変更を提出する前に、pre-commitフックをインストールして実行してください:

pre-commit install
pre-commit run --all-files

このプロジェクトでは、標準的なフォーク、機能ブランチの作成、コミット、プッシュ、プルリクエストのワークフローを通じて貢献を受け付けています。MITライセンスのもとで配布されています。

プロジェクトサポート

Dress AI Serviceは、コントリビューターとスポンサーに支えられているオープンソースプロジェクトです。

Dress AI Serviceのスポンサー画像

まとめ

Dress AI Serviceは、ワードローブ管理、CLIPを活用したタグ付け、ハイブリッドなコーディネート推薦、天気情報の統合、生成ビジュアル表示を1つのセルフホスト型アプリケーションにまとめています。Dockerを使うと、動作する環境を最短で構築できます。一方、ローカルのPythonセットアップとドキュメント化されたFastAPIエンドポイントは、開発、自動化、カスタムファッションアプリケーションのための柔軟な基盤を提供します。