Immich + cn-clip + RapidOCR + InsightFace
~~В дальнейшем планируется миграция на ente-io/ente, потому что мне нужен s3 для хранения фотографий~~
Но в ente всё ещё слишком мало функций
Перешёл на использование juicedata/juicefs для монтирования s3
Описание проекта
Данный проект представляет собой решение по расширению AI-возможностей системы управления фотографиями Immich. Основные расширения реализованы с помощью следующих компонентов:
- inference-gateway: шлюзовый сервис на Go, отвечает за интеллектуальную маршрутизацию ML-запросов Immich
- mt-photos-ai: AI-сервис на базе Python и FastAPI, интегрирует 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
AI-сервис на Python и FastAPI, предоставляет:
- API для распознавания текста (OCR) (на базе RapidOCR)
- API для обработки векторов CLIP (на базе 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 — кроссплатформенная OCR-библиотека на основе PaddleOCR
- cn-clip — предварительно обученная модель мультимодального контрастивного обучения для китайского языка