Photo Archive Фотоархив
← Back to Documentation ← Назад к документации

Architecture Архитектура

Processing pipeline architecture, technology stack, and data flow for the Family Photo Archive. Архитектура конвейера обработки, технологический стек и поток данных семейного фотоархива.

Pipeline Overview Обзор конвейера

The processing pipeline takes raw flatbed scanner scans (600 DPI, 4960x7014) through 10 stages to produce a fully tagged, restored, and browsable photo archive. Конвейер обработки проводит необработанные сканы с планшетного сканера (600 DPI, 4960x7014) через 10 этапов для создания полностью размеченного, восстановленного и доступного для просмотра фотоархива.

Step 1: Scanner Profile Шаг 1: Профиль сканера

Multiple white border scans are averaged to build a scanner profile that detects color cast, vignetting, and dust spots. This profile is used to normalize all subsequent scans. Несколько сканов белых полей усредняются для построения профиля сканера, который определяет цветовой сдвиг, виньетирование и пылинки. Этот профиль используется для нормализации всех последующих сканов.

Step 2: Flat-Field Correction Шаг 2: Коррекция плоского поля

The original scan is divided by the scanner profile to produce a clean scan with uniform lighting and no scanner artifacts. Исходный скан делится на профиль сканера для получения чистого скана с равномерным освещением и без артефактов сканера.

Original Scan / Scanner Profile = Clean Scan

Step 3: Auto-Crop Шаг 3: Автоматическая обрезка

OpenCV detects photo boundaries via grayscale conversion, blur, thresholding, and contour detection. A 1% over-crop removes printed borders and rounded corners. OpenCV определяет границы фотографии с помощью преобразования в градации серого, размытия, пороговой обработки и обнаружения контуров. Перекадрирование в 1% удаляет печатные рамки и закруглённые углы.

Step 4: Color Correction Шаг 4: Цветокоррекция

Subject-weighted correction using saliency maps. Three passes: white balance (subject-weighted gray-world), auto levels (gentle, 0.5% clip), and CLAHE on LAB L-channel (clip=1.5). Коррекция с учётом объекта на основе карт значимости. Три прохода: баланс белого (серый мир с учётом объекта), автоуровни (мягкие, отсечка 0.5%) и CLAHE на L-канале LAB (clip=1.5).

Steps 5-6: AI Restoration & Colorization Шаги 5-6: ИИ-реставрация и колоризация

Face restoration uses GFPGAN/CodeFormer, noise reduction uses Real-ESRGAN (all with MPS acceleration). B&W/sepia photos are auto-detected and colorized with DDColor via Apple Metal. Реставрация лиц использует GFPGAN/CodeFormer, шумоподавление - Real-ESRGAN (всё с ускорением MPS). Чёрно-белые/сепия фотографии автоматически определяются и раскрашиваются с помощью DDColor через Apple Metal.

Step 7: Face Clustering Шаг 7: Кластеризация лиц

InsightFace extracts 512-dimensional face embeddings, then DBSCAN clusters them into identity groups. This enables browsing by person across the entire archive. InsightFace извлекает 512-мерные эмбеддинги лиц, затем DBSCAN кластеризует их в группы по идентичности. Это позволяет просматривать архив по людям.

Steps 8-9: AI Tagging & OCR Шаги 8-9: ИИ-тегирование и ОРТ

Front photos are tagged by GPT-4o/Gemini (description, era, tags, mood, people count, setting). Back photos are processed by Apple Vision for Cyrillic OCR, translation, and date/name extraction. Лицевые стороны фотографий тегируются GPT-4o/Gemini (описание, эпоха, теги, настроение, количество людей, обстановка). Обратные стороны обрабатываются Apple Vision для распознавания кириллического текста, перевода и извлечения дат/имён.


Technology Stack Технологический стек

Layer Слой Components Компоненты Purpose Назначение
Application Приложение main.py CLI, Web UI, Reports, Forms User interfaces and orchestration Пользовательские интерфейсы и оркестрация
Pipeline Конвейер process.py, scanner_profile, crop, color_correct, tag, web Processing step modules Модули этапов обработки
AI / ML ИИ / МО GPT-4o, Gemini, MiniCPM-V, GFPGAN, CodeFormer, Real-ESRGAN, InsightFace, DDColor Tagging, restoration, faces, colorization Тегирование, реставрация, лица, колоризация
Platform Платформа OpenCV, Apple Vision, PyTorch (MPS/Metal) Image processing, OCR, GPU acceleration Обработка изображений, ОРТ, ускорение GPU
Runtime Среда выполнения Python 3.12, uv, M4 Max Language, package manager, hardware Язык, менеджер пакетов, оборудование

Data Flow Поток данных

Input photos are processed through the pipeline and output into layered directories, each representing a stage of processing. Входные фотографии проходят через конвейер и сохраняются в многослойные директории, каждая из которых представляет этап обработки.

Directory Директория Contents Содержимое
output/scanner-fixed/ Scanner artifacts removed Артефакты сканера удалены
output/cropped/ Photos extracted from scan bed Фотографии извлечены из области сканирования
output/corrected/ Color-corrected images Изображения с цветокоррекцией
output/restored/ AI-restored photos ИИ-восстановленные фотографии
output/colorized/ Colorized B&W photos Раскрашенные ч/б фотографии
output/thumbnails/ 800px thumbnails for web Миниатюры 800px для веба
output/metadata/ JSON metadata per photo + index JSON-метаданные для каждого фото + индекс
output/web/ Web viewer application Веб-приложение просмотра

Metadata Structure Структура метаданных

Each photo produces a JSON metadata file containing processing parameters, AI tags, OCR results, and face data: Для каждой фотографии создаётся JSON-файл метаданных, содержащий параметры обработки, ИИ-теги, результаты ОРТ и данные о лицах:

{
  "source": "photos/Scanned-image...-1.jpg",
  "crop": { "box": [x1, y1, x2, y2], "overcrop": 1.0 },
  "scanner_fix": { "color_cast": [r, g, b], "vignette": true },
  "color_correct": { "white_balance": 0.5, "clahe": 1.5 },
  "tags": {
    "description": "Family gathering outdoors...",
    "estimated_era": "1970s",
    "people_count": 4,
    "tags": ["family", "outdoor", "summer", "park"],
    "mood": "happy"
  },
  "back_text": {
    "original_text": "\u041b\u0435\u0442\u043e 1978, \u0425\u0430\u0439\u0444\u0430",
    "translation": "Summer 1978, Haifa",
    "text_type": "date+location"
  },
  "faces": [
    { "cluster_id": 0, "name": "Boris", "bbox": [x, y, w, h] },
    { "cluster_id": 1, "name": "Marina", "bbox": [x, y, w, h] }
  ]
}

Comparison Slider UX Интерфейс сравнения

The web viewer includes a comparison slider for viewing processing layers side-by-side. Users can compare any two layers (Original, Scanner-fixed, Cropped, Corrected, Restored, Colorized) using a draggable slider, side-by-side view, or blend mode with difference visualization. Веб-просмотрщик включает слайдер сравнения для просмотра слоёв обработки бок о бок. Пользователи могут сравнивать любые два слоя (Оригинал, Исправленный от сканера, Обрезанный, С цветокоррекцией, Восстановленный, Раскрашенный) с помощью перетаскиваемого слайдера, параллельного просмотра или режима смешивания с визуализацией разницы.

View Mode Режим просмотра Description Описание
Slider Слайдер Drag divider left/right to reveal before/after Перетаскивание разделителя влево/вправо для показа до/после
Side-by-Side Бок о бок Both layers shown simultaneously Оба слоя показаны одновременно
Blend (Difference) Наложение (Разница) Highlights pixel-level changes between layers Выделяет попиксельные изменения между слоями