Immich + cn-clip + RapidOCR + InsightFace
~~Docelowo planuję migrację do ente-io/ente, ponieważ potrzebuję s3 do przechowywania zdjęć~~
ente nadal ma zbyt mało funkcji
Zmieniono na użycie juicedata/juicefs do montowania s3
Opis projektu
Projekt ten to rozwiązanie wzbogacające możliwości AI w systemie zarządzania zdjęciami Immich. Rozwija natywne funkcje Immich głównie przez następujące komponenty:
- inference-gateway: bramka napisana w Go, odpowiedzialna za inteligentne przekierowywanie żądań ML z Immich
- mt-photos-ai: serwis AI oparty na Pythonie i FastAPI, integrujący modele RapidOCR i cn-clip
- Rozszerzenia funkcjonalności Immich, w tym wyszukiwanie tekstu OCR oraz ponowne przetwarzanie danych AI dla pojedynczych mediów, mieszane sortowanie na podstawie wektorów OCR i CLIP
- PostgreSQL z dodanym zhparser do segmentacji tekstu chińskiego
Najważniejsze funkcje
1. Rozpoznawanie i wyszukiwanie tekstu OCR
- Wykorzystanie RapidOCR do rozpoznawania tekstu na obrazach
- Obsługa rozpoznawania tekstu w języku chińskim i angielskim
- Możliwość wyszukiwania na podstawie tekstu znajdującego się na zdjęciu
2. Przetwarzanie wektorów obrazów CLIP
- Dokładniejsze dopasowanie obraz-tekst w języku chińskim w oparciu o model cn-clip
- Wspiera wyszukiwanie semantyczne, zwiększając precyzję wyników
3. Ponowne przetwarzanie danych AI dla pojedynczych mediów
- Obsługa ponownego generowania danych OCR dla pojedynczego zdjęcia/wideo
- Obsługa ponownego generowania wektorów CLIP dla pojedynczego zdjęcia/wideo
- Możliwość ręcznego odświeżania w przypadku niedokładnych wyników rozpoznawania
Architektura systemu
┌─────────────┐ ┌──────────────────┐ ┌───────────────┐
│ │ │ │ │ │
│ Immich │─────▶│ inference-gateway│─────▶│ Immich ML │
│ Server │ │ (Go网关) │ │ Server │
│ │ │ │ │ │
└─────────────┘ └──────────────────┘ └───────────────┘
│
│ OCR/CLIP请求
▼
┌──────────────────┐
│ │
│ mt-photos-ai │
│ (Python服务) │
│ │
└──────────────────┘
Szczegółowy opis komponentów
inference-gateway
Usługa bramki napisana w języku Go, główne zadania:
- Odbieranie żądań uczenia maszynowego od Immich
- Przekazywanie żądań OCR i CLIP do usługi mt-photos-ai w zależności od typu żądania
- Przekazywanie innych żądań uczenia maszynowego (np. rozpoznawania twarzy) do natywnej usługi uczenia maszynowego Immich
- Obsługa autoryzacji i konwersji formatów danych
mt-photos-ai
Usługa AI napisana w Pythonie i FastAPI, oferuje:
- API do rozpoznawania tekstu OCR (oparte na RapidOCR)
- API do przetwarzania wektorów CLIP (oparte na cn-clip)
- Obsługa akceleracji GPU
Instrukcja wdrożenia
Wymagania środowiskowe
- Docker i Docker Compose
- Karta NVIDIA GPU (opcjonalnie, ale zalecana do przyspieszenia przetwarzania)
- Wystarczająca ilość miejsca na dysku
Instrukcja konfiguracji
- Konfiguracja 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 konfiguracja
CLIP_MODEL=ViT-B-16 # CLIP模型名称
CLIP_DOWNLOAD_ROOT=./models/clip # 模型下载路径
DEVICE=cuda # 或 cpu,推理设备
HTTP_PORT=8060 # 服务监听端口
Kroki wdrożenia
- Sklonuj repozytorium:
git clone https://github.com/你的用户名/immich-all-in-one.git
cd immich-all-in-one
- Uruchom usługę:
docker-compose up -d
Instrukcja użytkowania
- Konfiguracja Immich do używania niestandardowej usługi ML
MACHINE_LEARNING_URL=http://inference-gateway:8080
- Użycie wyszukiwania OCR
- W pasku wyszukiwania Immich użyj prefiksu
ocr:do wyszukiwania OCR - Na przykład:
ocr:fakturawyszuka zdjęcia zawierające słowo "faktura" na obrazach - Ponowne przetwarzanie danych AI dla pojedynczego medium
- Na stronie szczegółów zdjęcia kliknij opcje menu
- Wybierz "Wygeneruj ponownie dane OCR" lub "Wygeneruj ponownie wektory CLIP"
- System ponownie przetworzy dane AI tego zdjęcia
Przewodnik dla deweloperów
inference-gateway (Go)
Kompilacja i uruchamianie:
cd inference-gateway
go build
./inference-gateway
mt-photos-ai (Python)
Ustawienia środowiska deweloperskiego:
cd mt-photos-ai
pip install -r requirements.txt
python -m app.main
Licencja
Ten projekt jest otwarty na licencji MIT.
Podziękowania
- Immich - otwartoźródłowe, samodzielnie hostowane rozwiązanie do tworzenia kopii zapasowych zdjęć i filmów
- RapidOCR - wieloplatformowa biblioteka OCR oparta na PaddleOCR
- cn-clip - chiński, multimodalny, wstępnie wytrenowany model uczenia przez porównanie