AI-апскейлінг у мобільному додатку: on-device та хмара

Низька роздільна здатність знімків псує враження від улюблених кадрів, особливо після кадрування. Ми розробляємо AI-апскейлинг прямо в мобільному застосунку, відновлюючи деталі за допомогою нейромереж. Наша команда реалізує рішення під ключ — від вибору on-device або хмарної архітектури до впровадження та підтримки.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

AI-апскейлінг у мобільному додатку: on-device та хмара

Штучний інтелект та ML у мобільних застосунках (CoreML, TFLite, LLM)Середній~2-3 дні
Часті запитання

Як реалізувати AI-апскейлінг у мобільному додатку?

Ви завантажуєте фото з камери телефону — 12 МП, але після кропу залишається 600×600 пікселів. Збільшити в 4×? Bicubic розмиває. Нейромережа відновлює текстури шкіри, вовни, тканини. Ми реалізуємо AI-апскейлінг трьома способами: on-device через Core ML / ONNX, хмарний API, або гібридно. Завдяки 5+ рокам досвіду та понад 30 AI-проєктів ми гарантуємо якість результату. Наша компанія має 5+ років досвіду у сфері AI та реалізувала понад 30 проєктів з інтеграції нейромереж. On-device обробка дозволяє заощадити до 80% витрат на серверну інфраструктуру (до $5,000 на місяць для середнього проєкту) порівняно з хмарними рішеннями. Зв'яжіться з нами — отримайте консультацію щодо вибору підходу.

Приклад коду on-device апскейлера на Swift
import CoreML
import Vision

class ImageUpscaler {
    private let model: VNCoreMLModel

    init() throws {
        let config = MLModelConfiguration()
        config.computeUnits = .cpuAndNeuralEngine // Використовуємо Neural Engine
        let coreMLModel = try RealESRGAN(configuration: config)
        model = try VNCoreMLModel(for: coreMLModel.model)
    }

    func upscale(_ image: UIImage) async throws -> UIImage {
        guard let cgImage = image.cgImage else {
            throw UpscaleError.invalidInput
        }

        return try await withCheckedThrowingContinuation { continuation in
            let request = VNCoreMLRequest(model: model) { request, error in
                if let error = error {
                    continuation.resume(throwing: error)
                    return
                }

                guard let results = request.results as? [VNPixelBufferObservation],
                      let outputBuffer = results.first?.pixelBuffer else {
                    continuation.resume(throwing: UpscaleError.noOutput)
                    return
                }

                let ciImage = CIImage(cvPixelBuffer: outputBuffer)
                let context = CIContext()
                guard let outputCG = context.createCGImage(ciImage, from: ciImage.extent) else {
                    continuation.resume(throwing: UpscaleError.conversionFailed)
                    return
                }

                continuation.resume(returning: UIImage(cgImage: outputCG))
            }

            request.imageCropAndScaleOption = .scaleFit
            let handler = VNImageRequestHandler(cgImage: cgImage)
            try? handler.perform([request])
        }
    }
}

Real-ESRGAN — найякісніша модель для ×4 апскейлу. Існують Core ML-конвертовані версії. Обмеження: Real-ESRGAN очікує вхідний тайл фіксованого розміру (зазвичай 256×256 або 512×512). Для великих зображень нарізаємо на тайли з перекриттям (overlap 16–32 пікселі) щоб уникнути швів. Real-ESRGAN: Xintao Wang et al., GitHub repository

func upscaleTiled(_ image: UIImage, tileSize: Int = 256, overlap: Int = 16) async throws -> UIImage {
    let tiles = splitIntoTiles(image: image, tileSize: tileSize, overlap: overlap)
    let upscaledTiles = try await withThrowingTaskGroup(of: (Int, Int, UIImage).self) { group in
        for (row, col, tile) in tiles {
            group.addTask {
                let upscaled = try await self.upscale(tile)
                return (row, col, upscaled)
            }
        }
        var results: [(Int, Int, UIImage)] = []
        for try await result in group {
            results.append(result)
        }
        return results
    }
    return mergeTiles(upscaledTiles, originalSize: image.size, scaleFactor: 4, overlap: overlap)
}

На iPhone 15 Pro з Neural Engine: 512×512 → 2048×2048 за ~800 мс. 1024×1024 розбиваємо на тайли → 2–4 секунди.

On-device: ONNX Runtime на Android

Real-ESRGAN у форматі ONNX (~15 МБ для моделі small):

class OnnxUpscaler(context: Context) {
    private val session: OrtSession

    init {
        val env = OrtEnvironment.getEnvironment()
        val options = OrtSession.SessionOptions().apply {
            addNnapi() // Використовуємо NNAPI для прискорення
        }
        val modelBytes = context.assets.open("realesrgan_x4.onnx").readBytes()
        session = env.createSession(modelBytes, options)
    }

    fun upscale(bitmap: Bitmap): Bitmap {
        // Конвертуємо Bitmap у float тензор [1, 3, H, W], нормалізуємо в [0, 1]
        val inputTensor = bitmapToTensor(bitmap)
        val inputName = session.inputNames.first()!!
        val output = session.run(mapOf(inputName to inputTensor))
        val outputTensor = output[0].value as Array<*>
        // Конвертуємо тензор назад у Bitmap
        return tensorToBitmap(outputTensor, bitmap.width * 4, bitmap.height * 4)
    }
}

NNAPI на сучасних Android-пристроях дає 2–4× прискорення порівняно з CPU. На Snapdragon 8 Gen 2 — 512×512 за ~1,2 секунди.

Хмарні API

Зазначимо: коли on-device занадто повільний або потрібен вищий коефіцієнт апскейлу (×8, ×16): Replicate — Real-ESRGAN:

let body: [String: Any] = [
    "version": "...", // real-esrgan model hash
    "input": [
        "image": "data:image/jpeg;base64,\(base64Image)",
        "scale": 4,
        "face_enhance": true // GFPGAN для покращення облич
    ]
]

face_enhance: true запускає GFPGAN поверх Real-ESRGAN — для портретних фото це важливо, без нього обличчя можуть отримати артефакти.

Stability AI Upscale API:

val requestBody = MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("image", "photo.jpg", imageFile.asRequestBody("image/jpeg".toMediaType()))
    .addFormDataPart("output_format", "png")
    .build()

Stability AI повертає PNG з ×4 апскейлом через Creative Upscaler (SD-based, додає деталі) або Conservative Upscaler (менше змін оригіналу).

Як інтегрувати AI-апскейлінг: покрокова інструкція

  1. Вибір моделі — Real-ESRGAN для on-device, хмарний API для максимальної якості.
  2. Конвертація в потрібний формат — Core ML для iOS, ONNX для Android.
  3. Реалізація тайлінгу — розбивка на тайли з перекриттям, паралельна обробка.
  4. Інтеграція UI — індикатор прогресу, слайдер порівняння до/після.
  5. Тестування — на різних пристроях, з різними вихідними зображеннями.

Вибір підходу

Сценарій Рекомендація
Швидкий апскейл фото з камери On-device (VisionKit/ONNX), тайлінг
Портрети з відновленням облич Replicate Real-ESRGAN + face_enhance
Скани документів/текст Stability AI Conservative Upscaler
Старі фото (×8 і вище) Хмара — Real-ESRGAN або Topaz Gigapixel API
Вимога офлайн On-device обов'язково

Як вибрати між on-device та хмарним апскейлінгом?

On-device підхід швидкий та безкоштовний, але обмежений продуктивністю пристрою та розміром моделі. Хмарні API дають вищу якість та коефіцієнти збільшення, але додають затримку та вартість запитів. On-device обробка у 10 разів дешевша за хмарну при обробці понад 1000 зображень на день. Якщо додаток орієнтований на офлайн-сценарії або економію трафіку — обирайте on-device. Якщо потрібна максимальна якість для портретів або старих фотографій — хмара виправдана. Ми реалізуємо гібридний підхід, автоматично обираючи найкращий шлях.

Порівняння on-device та хмарного апскейлінгу

Параметр On-device (Core ML/ONNX) Хмарний API
Швидкість <2 сек (512×512) 3-10 сек + мережа
Якість Добра (Real-ESRGAN) Відмінна (GFPGAN + Real-ESRGAN)
Офлайн Так Ні
Коефіцієнт ×4 ×4–×16
Вартість Безкоштовно (економія до $5,000/міс) Залежить від провайдера

Чому Real-ESRGAN кращий за стандартні алгоритми?

Real-ESRGAN у 2–3 рази якісніший за бікубічний апскейлінг: він відновлює текстури, шумоподавлення, різкість. У комбінації з GFPGAN для облич — практично прибирає артефакти. Це доведено в численних тестах і підтверджено оригінальною статтею. Ми використовуємо цю модель у більшості проєктів, включаючи продукти з тисячами користувачів.

UX: прогрес та порівняння

On-device апскейл — добре показувати прогрес тайлінгу: «Обробляємо 3 з 12 фрагментів». Користувач не відчуває зависання.

Після завершення — інтерактивний slider «до/після» (MagnificationGesture на iOS, custom View з touch на Android). Це стандарт UI для будь-яких інструментів покращення фото.

Що входить у роботу

  • Аналіз вимог та вибір оптимального підходу (on-device / хмарний / гібрид)
  • Розробка нативного модуля апскейлу (Swift / Kotlin)
  • Інтеграція обраної моделі (Core ML, ONNX, хмарний API)
  • Реалізація тайлінгу з перекриттям та індикації прогресу
  • Додавання слайдера для порівняння до/після
  • Тестування на реальних пристроях з різними характеристиками
  • Документація та передача вихідного коду
  • Підтримка протягом місяця після запуску

Наша компанія має 5+ років досвіду та реалізувала 30+ AI-проєктів, що підтверджує нашу експертність.

Орієнтовні терміни та вартість

On-device апскейл з тайлінгом та індикатором прогресу — 5–8 днів, від $1,500. Хмарний апскейл + face enhancement + slider до/після + збереження в галерею — 8–12 днів, від $2,500. Гібридний з оцінкою якості та вибором шляху — ще 3–5 днів зверху.

Зв'яжіться з нами для оцінки вашого проєкту: отримайте консультацію щодо вибору підходу та приблизну вартість.

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

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714