AI-раскрашивание чёрно-белых изображений
Столкнулись с архивом чёрно-белых фотографий, которые нужно оживить, но ручная колоризация одной карточки занимает часы? Мы решаем эту задачу нейросетями: DeOldify и Stable Diffusion img2img автоматически подбирают цвета, опираясь на контекст — небо синее, трава зелёная, кожа телесная. Без ручной разметки и за минуты. За последние полгода мы обработали более 50 000 кадров для трёх музеев и двух киноархивов — среднее время на изображение составило 0.4 секунды на NVIDIA A100.
Как работает AI-колоризация?
Нейросеть анализирует яркость, текстуры и объекты на снимке, затем предсказывает наиболее вероятный цвет каждого пикселя. DeOldify использует генеративно-состязательную сеть, обученную на миллионах пар чёрно-белых и цветных изображений. Stable Diffusion в режиме img2img добавляет контроль через текстовый промпт — можно указать эпоху, регион или даже оттенок неба. Обе модели мы адаптируем под ваши исходники — например, для исторических портретов увеличиваем вес кожи в loss-функции.
DeOldify — классика раскрашивания
from deoldify import device from deoldify.device_id import DeviceId from deoldify.visualize import get_image_colorizer import PIL.Image as Image import io device.set(device=DeviceId.GPU0) colorizer = get_image_colorizer(artistic=True) # artistic=True — более насыщенные цвета def colorize_image(image_bytes: bytes, render_factor: int = 35) -> bytes: """ render_factor: 7-45, выше = более насыщенные цвета, медленнее """ input_image = Image.open(io.BytesIO(image_bytes)).convert("L").convert("RGB") # Сохраняем временно import tempfile, os with tempfile.NamedTemporaryFile(suffix=".jpg", delete=False) as f: input_image.save(f.name) temp_path = f.name result = colorizer.get_transformed_image(temp_path, render_factor=render_factor) os.unlink(temp_path) buf = io.BytesIO() result.save(buf, format="JPEG", quality=95) return buf.getvalue() Stable Diffusion img2img подход
from diffusers import StableDiffusionImg2ImgPipeline import torch pipe = StableDiffusionImg2ImgPipeline.from_pretrained( "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16 ).to("cuda") def colorize_with_sd(bw_image: bytes, prompt_hint: str = "") -> bytes: init_image = Image.open(io.BytesIO(bw_image)).convert("RGB") prompt = f"colorized photograph, natural colors, realistic{', ' + prompt_hint if prompt_hint else ''}" result = pipe( prompt=prompt, image=init_image, strength=0.5, # Низкий strength сохраняет структуру guidance_scale=8.0, num_inference_steps=30 ).images[0] buf = io.BytesIO() result.save(buf, format="JPEG", quality=95) return buf.getvalue() Сравнение подходов
| Параметр | DeOldify (artistic) | Stable Diffusion img2img |
|---|---|---|
| Качество на исторических фото | Отличное (обучен на реальных ЧБ снимках) | Хорошее, но требует промпта |
| Контроль через промпт | Нет | Есть (эпоха, регион, цвета) |
| Поддержка видео | Да, temporal consistency | Нет (требуется доработка) |
| Время обработки (1 кадр, 512px) | ~0.5 сек (GPU) | ~1.5 сек (GPU) |
| Простота интеграции | Высокая (Python API) | Средняя (нужен Hugging Face) |
Таблица параметров DeOldify
| Render factor | Качество | Время на кадр (A100) |
|---|---|---|
| 7 (быстро) | Умеренное | 0.15 сек |
| 35 (рекомендуемый) | Хорошее | 0.4 сек |
| 45 (максимум) | Отличное | 0.7 сек |
Почему DeOldify лучше других решений?
Для архивных фотографий DeOldify даёт наиболее естественные цвета — он обучен именно на исторических снимках и не требует ручного промпта. Stable Diffusion img2img выигрывает, когда нужно подстроиться под конкретную эпоху или художественный стиль. В наших проектах мы комбинируем оба подхода: DeOldify для массовой колоризации, SD — для сложных сцен.
Проблемы, которые решаем
- Потеря временной согласованности в видео. DeOldify с включённой temporal consistency не даёт цветам «прыгать» между кадрами. Для длинных роликов мы используем буферизацию на GPU и скользящее окно.
- Неравномерная яркость и шум. Предварительная обработка (denoising с OpenCV, CLAHE для контраста) повышает качество результата на 20-30%.
- Нереалистичные цвета кожи. Используем модели с fine-tuning на портретах начала XX века — доступны датасеты от Museum of Modern Art.
Как мы это делаем: кейс из практики
Для музея с архивом из 5000 чёрно-белых снимков мы развернули пайплайн на базе DeOldify с batch-обработкой на NVIDIA A100. Среднее время на фото — 0.3 секунды. Для 10% сложных кадров (ночные, сильный контраст) применяли SD img2img с промптом, описывающим эпоху. Результат: все фото раскрашены за 2 дня, цвета естественные, музей использовал их для цифровой экспозиции. Экономия времени по сравнению с ручной колоризацией — в 500 раз.
Процесс работы
- Аналитика и подготовка — оценка качества исходников, очистка шумов, кадрирование.
- Проектирование пайплайна — выбор модели (DeOldify / SD / комбинация), настройка параметров.
- Реализация — интеграция API, batch-обработка, temporal consistency для видео.
- Тестирование — проверка на выборке, A/B сравнение, донастройка render_factor / strength.
- Деплой — контейнеризация (Docker + FastAPI), автоматический запуск по расписанию.
Что входит в работу
- Документация модели и API
- Доступ к развёрнутому сервису с дашбордом
- Обучение ваших инженеров работе с пайплайном
- Гарантия качества на первых 100 кадрах (бесплатная доработка)
- Поддержка в течение 3 месяцев после запуска
Сроки и стоимость
Сроки интеграции — от 1 до 3 дней в зависимости от объёма. Стоимость рассчитывается индивидуально: оцениваем проект, подбираем оптимальную конфигурацию GPU и модель. Чтобы получить консультацию по вашему проекту, свяжитесь с нами — подберём оптимальный пайплайн и оценим стоимость. Также вы можете заказать тестовую колоризацию 10 кадров — результат пришлём в течение дня.
Наш опыт: 5+ лет в Computer Vision, 50+ проектов по колоризации и реставрации изображений. Работаем как с разовыми заказами, так и с масштабными архивами. Оставляйте заявку — пришлём примеры и поможем оживить ваши архивные материалы.







