AI-колоризация чёрно-белых фото в мобильном приложении: реализация

Реализация AI-колоризации чёрно-белых фотографий в мобильном приложении Мы не раз сталкивались с ситуацией: пользователь загружает старую чёрно-белую фотографию, надеясь получить естественные цвета. Но колоризация — задача с одним правильным входом и бесконечным множеством «правильных» выходов. Н

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
AI-колоризация чёрно-белых фото в мобильном приложении: реализация
Средний
от 4 часов до 2 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Реализация AI-колоризации чёрно-белых фотографий в мобильном приложении

Мы не раз сталкивались с ситуацией: пользователь загружает старую чёрно-белую фотографию, надеясь получить естественные цвета. Но колоризация — задача с одним правильным входом и бесконечным множеством «правильных» выходов. Небо может быть голубым или серым. Пальто — чёрным или синим. AI-модель делает статистически вероятный выбор, а не восстанавливает реальность. Этот нюанс мы объясняем пользователю прямо в интерфейсе, но техническая реализация остаётся самой интересной частью. Наш опыт — 5 лет в мобильной разработке и 12+ проектов с интеграцией AI — позволяет гарантировать качественный результат.

Какая модель подходит для мобильной колоризации?

Классика — DeOldify (fastai + U-Net с self-attention). Хорошо обобщается, даёт насыщенные цвета. Минус: иногда «загрязняет» цвет в нежелательные пятна на лицах или одежде при сложном фоне. DDColor (2023) — transformer-based архитектура, работает значительно лучше на портретах и архитектуре. Точнее передаёт цвет кожи и неба. BigColor и ChromaGAN — для специфических задач (исторические снимки с сильной деградацией).

Модель Архитектура Размер (базовый) Особенности
DeOldify U-Net + self-attention 250 МБ (FP32), 60-70 МБ (INT8) Насыщенные цвета, риск пятен на лицах
DDColor Transformer 110 МБ Точная передача кожи, неба
BigColor GAN + ResNet 150 МБ Хорош для деградированных снимков
ChromaGAN GAN 130 МБ Устойчив к шумам

На мобиль идёт один из них — сконвертированный в Core ML или TFLite. После квантизации INT8 DeOldify весит 60–70 МБ — приемлемо для мобильного приложения.

Как интегрировать модель на iOS и Android?

Процесс интеграции состоит из нескольких шагов:

  1. Выбор модели и конвертация в целевой формат (Core ML / TFLite / ONNX).
  2. Настройка preprocessing: преобразование grayscale в RGB, нормировка.
  3. Запуск инференса с оптимизацией под устройство (Neural Engine, GPU, NNAPI).
  4. Постобработка: тайловый инференс для больших изображений и colour normalization.

Конвертация DeOldify в Core ML

Пример кода конвертации
import coremltools as ct import torch from deoldify.visualize import get_image_colorizer colorizer = get_image_colorizer(artistic=True) model = colorizer.learn.model.eval() # Экспорт через torch.jit.trace example = torch.zeros(1, 3, 256, 256) traced = torch.jit.trace(model, example) mlmodel = ct.convert( traced, inputs=[ct.TensorType(name="input", shape=(1, 3, 256, 256))], compute_precision=ct.precision.FLOAT16, minimum_deployment_target=ct.target.iOS16 ) mlmodel.save("DeOldify_artistic.mlpackage") 

Важный момент: DeOldify принимает RGB-вход (даже для grayscale — он сам конвертирует в Lab и работает с AB-каналами). Перед подачей grayscale-изображения его нужно расширить в 3-канальный RGB репликацией: gray → [gray, gray, gray]. В CoreML это делается в preprocessing, не в самой модели.

iOS: запуск инференса

let config = MLModelConfiguration() config.computeUnits = .cpuAndNeuralEngine // ANE для FLOAT16 let model = try DeOldify_artistic(configuration: config) // Подготовка: grayscale CVPixelBuffer → RGB func prepareInput(from grayImage: UIImage) -> CVPixelBuffer? { // Создаём RGB пиксельный буфер из grayscale, реплицируя канал var pixelBuffer: CVPixelBuffer? CVPixelBufferCreate(nil, width, height, kCVPixelFormatType_32BGRA, nil, &pixelBuffer) // ... копируем серый канал во все три return pixelBuffer } let input = DeOldify_artisticInput(input: pixelBuffer) let output = try model.prediction(input: input) let colorizedImage = UIImage(cvPixelBuffer: output.output) 

На iPhone 13 изображение 512×512 обрабатывается за 0.8–1.2 секунды. Для Full HD (1920×1080) — тайловый инференс с патчами 512×512 и блендингом на стыках. Тайловый подход создаёт проблему цветовой несогласованности между патчами: модель может покрасить один фрагмент неба в голубой, а соседний — в серый. Решение — global color histogram matching: нормализуем гистограмму каждого тайла к глобальной гистограмме.

Android: TFLite с ONNX Runtime как альтернатива

// ONNX Runtime даёт гибкость: одна модель для iOS и Android val env = OrtEnvironment.getEnvironment() val session = env.createSession( "deoldify_optimized.onnx", OrtSession.SessionOptions().apply { addNnapi() // или addCuda() если есть GPU } ) val inputTensor = OnnxTensor.createTensor(env, inputArray, longArrayOf(1, 3, 512, 512)) val results = session.run(mapOf("input" to inputTensor)) val outputArray = (results[0].value as Array<*>) 

ONNX Runtime Mobile — хороший выбор когда одна модель нужна на обеих платформах: не нужно дважды конвертировать. NNAPI-делегат работает на устройствах с Android 8.1+.

UX: что важно учесть

Колоризация — медленная операция (1–5 секунд). Показываем анимированный прогресс. Хороший паттерн — «before/after» слайдер: пользователь сдвигает разделитель и видит оригинал и результат одновременно. Это и UX, и наглядная демонстрация работы модели.

Сохранение результата — в .heic или .jpg с максимальным качеством. Результат колоризации плохо переносит повторное JPEG-сжатие: артефакты на цветовых переходах становятся заметны.

Что входит в работу

  • Выбор и конвертация модели под целевую платформу (Core ML / TFLite / ONNX)
  • Оптимизация под конкретные устройства (Neural Engine, GPU, NNAPI)
  • Реализация тайлового инференса с цветовой нормализацией
  • Разработка UI с before/after сравнением и прогрессом
  • Интеграция сохранения в галерею и шеринга
  • Документация по модели, preprocessing, и инструкция для App Store Review (согласно App Store Review Guidelines раздел 5.1 для обработки фотографий)
  • Тестирование на исторических фотографиях разного качества

Экономия на лицензиях: вы не платите за open-source модели. Стоимость разработки сопоставима с зарплатой одного разработчика за месяц. Получите консультацию — мы оценим ваш проект и предложим оптимальный стек за два дня. Закажите разработку прямо сейчас.

Ориентиры по срокам

Этап Срок (одна платформа) Срок (обе платформы)
Выбор и конвертация модели 1 неделя 1.5 недели
Реализация инференса и UI 1-2 недели 2-3 недели
Тайловый инференс + цвет. нормализация 0.5-1 неделя 1-2 недели
Тестирование и оптимизация 0.5-1 неделя 1-1.5 недели
Итого 2–4 недели 5–8 недель

Получите консультацию — мы оценим ваш проект и предложим оптимальный стек за два дня.