Immich + cn-clip + RapidOCR + InsightFace
~~今後 ente-io/ente への移行を計画していましたが、写真の保存に s3 が必要なためです~~
ente はやはり機能が少なすぎました
juicedata/juicefs を利用して s3 をマウントする方式に変更しました
プロジェクト概要
本プロジェクトは Immich 写真管理システムの AI 機能拡張ソリューションです。主に以下のコンポーネントによって Immich の標準機能を拡張しています:
- inference-gateway:Go 言語で実装されたゲートウェイサービスで、Immich の機械学習リクエストをインテリジェントに振り分けます
- mt-photos-ai:Python と FastAPI ベースの AI サービスで、RapidOCR および cn-clip モデルを統合
- Immich の機能拡張(OCR テキスト認識検索、単一メディア AI データ再処理、OCR 全文ベクトルと CLIP ベクトルスコア混合によるランキング)
- PostgreSQL に zhparser 中国語分かち書き追加
主な機能
1. OCR 文字認識と検索
- RapidOCR を使用して画像内の文字を認識
- 中国語と英語の混合テキスト認識に対応
- 画像内のテキスト内容に基づく検索機能を実現
2. CLIP 画像ベクトル処理
- cn-clip モデルにより、より正確な中国語画像 - テキストマッチングを実現
- セマンティック検索に対応し、検索精度を向上
3. 単一メディア AI データ再処理
- 単一の画像/動画に対し OCR データの再生成が可能
- 単一の画像/動画に対し CLIP ベクトルデータの再生成が可能
- 認識結果が不正確な場合、手動でリフレッシュする機能を提供
システムアーキテクチャ
┌─────────────┐ ┌──────────────────┐ ┌───────────────┐
│ │ │ │ │ │
│ Immich │─────▶│ inference-gateway│─────▶│ Immich ML │
│ Server │ │ (Go网关) │ │ Server │
│ │ │ │ │ │
└─────────────┘ └──────────────────┘ └───────────────┘
│
│ OCR/CLIP请求
▼
┌──────────────────┐
│ │
│ mt-photos-ai │
│ (Python服务) │
│ │
└──────────────────┘
组件详解
inference-gateway
Go 言語で実装されたゲートウェイサービスで、主な役割は以下の通りです:
- Immich からの機械学習リクエストを受信
- リクエストタイプに応じて OCR および CLIP リクエストを mt-photos-ai サービスに転送
- その他の機械学習リクエスト(顔認識など)を Immich ネイティブの機械学習サービスに転送
- 認証とデータ形式の変換を処理
mt-photos-ai
Python と FastAPI で実装された AI サービスで、以下を提供します:
- OCR 文字認識 API(RapidOCR ベース)
- CLIP ベクトル処理 API(cn-clip ベース)
- GPU アクセラレーション対応
部署说明
环境要求
- Docker および Docker Compose
- NVIDIA GPU(オプションですが、処理高速化のため推奨)
- 十分なストレージ容量
配置说明
- inference-gateway の設定
IMMICH_API=http://localhost:3003 # Immich API地址
MT_PHOTOS_API=http://localhost:8060 # mt-photos-ai服务地址
MT_PHOTOS_API_KEY=mt_photos_ai_extra # API密钥
PORT=8080 # 网关监听端口
- mt-photos-ai の設定
CLIP_MODEL=ViT-B-16 # CLIP模型名称
CLIP_DOWNLOAD_ROOT=./models/clip # 模型下载路径
DEVICE=cuda # 或 cpu,推理设备
HTTP_PORT=8060 # 服务监听端口
デプロイ手順
- リポジトリをクローンします:
git clone https://github.com/你的用户名/immich-all-in-one.git
cd immich-all-in-one
- サービスを起動します:
docker-compose up -d
使用説明
- Immich をカスタム ML サービスで設定する
MACHINE_LEARNING_URL=http://inference-gateway:8080
- OCR検索の使用
- Immichの検索バーで
ocr:プレフィックスを使ってOCR検索を行う - 例:
ocr:発票は画像内に「発票」という文字が含まれる写真を検索する - 単一メディアAIデータの再処理
- 写真の詳細ページで、メニューオプションをクリック
- 「OCRデータを再生成」または「CLIPベクトルを再生成」を選択
- システムがその写真のAIデータを再処理します
開発ガイド
inference-gateway (Go)
コンパイルと実行:
cd inference-gateway
go build
./inference-gateway
mt-photos-ai (Python)
開発環境の設定:
cd mt-photos-ai
pip install -r requirements.txt
python -m app.main
许可证
本プロジェクトは MIT ライセンスのもとでオープンソース化されています。
謝辞
- Immich - オープンソースのセルフホスト型写真・動画バックアップソリューション
- RapidOCR - PaddleOCR ベースのクロスプラットフォーム OCR ライブラリ
- cn-clip - 中国語マルチモーダルコントラスト学習事前学習モデル