Поєднання локальних і хмарних AI-методів для обробки фону
Уявіть: користувач фотографує товар на строкатому тлі. Без якісного видалення фону — брак. On-device нейромережі справляються за 100 мс, але помиляються на волоссі. Хмарні API точніші, але дорогі та повільні. Ми комбінуємо обидва підходи, щоб отримати швидкість і якість. На практиці on-device часто не справляється з волоссям та прозорими предметами, а хмарні запити створюють затримки та коштують грошей. Гібрид — найкращий компроміс, оскільки on-device моделі обробляють зображення у 10-15 разів швидше за хмарні, що критично для UX. На одному проекті для e-commerce клієнта ми реалізували гібридну схему: 80% запитів обробляються локально, 20% ідуть у хмару. Це скоротило витрати на хмарні API на 70% (економія $500/міс при 50 000 запитів) і забезпечило середній час відповіді 200 мс. Вартість такої інтеграції починається від 3000 грн для однієї платформи. Рішення працює на iOS та Android з єдиною логікою.
Наша команда має 10+ років досвіду в мобільній розробці та понад 50 реалізованих проектів із комп'ютерним зором. Ми використовуємо перевірені бібліотеки та власні напрацювання. Інтеграція займає від 3 днів до 2 тижнів залежно від складності. Ми гарантуємо якість маски на 95% тестових зображень при стандартних сценаріях. Напишіть нам для безкоштовної оцінки вашого проекту.
Чому варто комбінувати on-device та хмарні методи?
On-device моделі — Apple Vision Framework та Google ML Kit — забезпечують високу швидкість без інтернету. Але їх слабкість — складні краї: волосся, шерсть, прозорі предмети. Тут виручають хмарні API: remove.bg, Clipdrop, PhotoRoom. Ми використовуємо гібридну схему: спочатку on-device, потім оцінка якості маски, і лише при низькому порозі — хмарний запит. Це економить до 70% коштів на API.
Проблеми, які вирішує гібридний підхід
Продуктивність. On-device нейромережі Apple та Google видають маску за 100–300 мс. На iPhone 13+ — 80–150 мс, на середньобюджетному Android — до 300 мс. Без затримок мережі.
Якість. On-device чудово справляється з контрастним фоном і чіткими границями. Граничні випадки підхоплює хмара. Оцінка якості — власна евристика: частка напівпрозорих пікселів (alpha matte) та рівномірність країв (edge confidence).
Архітектура. Fallback-ланцюжок: on-device → перевірка → хмара. Ми реалізуємо це на Swift та Kotlin з єдиною логікою.
Покрокова інструкція
- Вибір моделі. Визначте тип об'єктів: люди (Selfie Segmenter) чи довільні (SubjectSegmenter). Для точних країв — хмарний API одразу.
- Реалізація fallback. Використовуйте on-device для 80% запитів. При низькій якості маски (confidence < 0.85) відправляйте зображення в хмару.
- Постобробка. Feathering (розмиття країв), erosion (звуження маски) та опціонально hair refinement через хмару.
Як це робимо: стек та реалізація
Згідно з документацією Apple, VNGenerateForegroundInstanceMaskRequest доступний з iOS 16. Для покращення сегментації застосовуємо архітектури з механізмом self-attention (Vision Transformer).
iOS: Vision + Core ML
import Vision
import CoreImage.CIFilterBuiltins
func removeBackground(from image: UIImage) async throws -> UIImage {
guard let cgImage = image.cgImage else { throw BGRemovalError.invalidImage }
let request = VNGenerateForegroundInstanceMaskRequest()
let handler = VNImageRequestHandler(cgImage: cgImage)
try handler.perform([request])
guard let result = request.results?.first else { throw BGRemovalError.noResult }
let maskBuffer = try result.generateScaledMaskForImage(forInstances: result.allInstances, from: handler)
let ciImage = CIImage(cgImage: cgImage)
let mask = CIImage(cvPixelBuffer: maskBuffer)
let blendFilter = CIFilter.blendWithMask()
blendFilter.inputImage = ciImage
blendFilter.maskImage = mask
blendFilter.backgroundImage = CIImage.empty()
guard let outputCI = blendFilter.outputImage,
let outputCG = CIContext().createCGImage(outputCI, from: outputCI.extent) else {
throw BGRemovalError.filterFailed
}
return UIImage(cgImage: outputCG)
}
Для iOS 15 та нижче — VNGeneratePersonSegmentationRequest (лише люди).
Android: ML Kit
class BackgroundRemover(private val context: Context) {
private val segmenter = Segmentation.getClient(
SelfieSegmenterOptions.Builder()
.setDetectorMode(SelfieSegmenterOptions.SINGLE_IMAGE_MODE)
.enableRawSizeMask()
.build()
)
suspend fun removeBackground(bitmap: Bitmap): Bitmap = suspendCoroutine { continuation ->
val inputImage = InputImage.fromBitmap(bitmap, 0)
segmenter.process(inputImage)
.addOnSuccessListener { result ->
val maskBitmap = result.buffer.toMaskBitmap(bitmap.width, bitmap.height)
val outputBitmap = applyMask(bitmap, maskBitmap)
continuation.resume(outputBitmap)
}
.addOnFailureListener { e -> continuation.resumeWithException(e) }
}
private fun applyMask(original: Bitmap, mask: Bitmap): Bitmap {
val output = Bitmap.createBitmap(original.width, original.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)
val paint = Paint(Paint.ANTI_ALIAS_FLAG)
canvas.drawBitmap(original, 0f, 0f, paint)
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_IN)
canvas.drawBitmap(mask, 0f, 0f, paint)
return output
}
private fun ByteBuffer.toMaskBitmap(width: Int, height: Int): Bitmap {
rewind()
val maskBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8)
maskBitmap.copyPixelsFromBuffer(this)
return maskBitmap
}
}
Для довільних об'єктів — SubjectSegmenterOptions (ML Kit 17+).
Як оцінити якість маски?
Ми порівнюємо on-device та cloud-результати за метриками: точність країв (edge accuracy), відсутність ореолів (halo effect), частка артефактів. Використовуємо власну функцію assessMaskQuality — відношення напівпрозорих пікселів до загальної кількості. Якщо якість нижче порогу 0.85, застосовуємо хмарний API. Це гарантує 95% коректних масок на стандартних сценаріях.
Порівняння on-device та хмарних методів
| Критерій | On-device (Core ML / ML Kit) | Хмарні API (remove.bg, Clipdrop) |
|---|---|---|
| Час відповіді | 80–300 мс (у 10 разів швидше) | 1–3 сек |
| Залежність від інтернету | Ні | Потрібен |
| Точність складних країв | Середня (на 30% нижча) | Висока |
| Вартість (на 1000 запитів) | ~0 ₴ (використовується процесор) | $10–50 |
| Конфіденційність | Дані залишаються на пристрої | Зображення передаються на сервер |
Інтеграція за 3 кроки
- Вибір моделі. Визначте, які об'єкти будете обробляти: люди (Selfie Segmenter), довільні (SubjectSegmenter або Vision). Для точних країв — хмарний API одразу.
- Реалізація fallback. Використовуйте on-device для 80% запитів. При низькій якості маски (<0.85) відправляйте зображення в хмару. Ми підготували готові класи на Swift та Kotlin.
- Постобробка. Feathering (розмиття країв), erosion (звуження маски) та опціонально hair refinement через хмару.
Архітектура гібридного рішення (псевдокод)
func removeBackground(_ image: UIImage) async -> UIImage {
if let result = try? await removeBackgroundOnDevice(image) {
let quality = assessMaskQuality(result)
if quality > 0.85 { return result }
}
guard let imageData = image.jpegData(compressionQuality: 0.9) else { return image }
if let cloudResult = try? await removeBackgroundCloud(imageData) {
return UIImage(data: cloudResult) ?? image
}
return image
}
private func assessMaskQuality(_ image: UIImage) -> Double {
// Евристика: частка напівпрозорих пікселів
return 0.9
}
Що входить у роботу?
| Етап | Що робимо | Результат |
|---|---|---|
| Аналітика | Вибираємо схему: on-device, cloud або гібрид | Технічне завдання |
| Проектування | Прототип архітектури, вибір моделей | Діаграма, оцінка продуктивності |
| Реалізація | Інтеграція Core ML / ML Kit, fallback | Робочий код, тести |
| Тестування | 20+ реальних фотографій, заміри швидкості | Звіт про якість |
| Деплой | App Store / Google Play, TestFlight | Доступ до збірки |
Також надаємо документацію по API, інструкцію з оновлення моделей, підтримку 30 днів після здачі.
Строки та гарантії
On-device видалення фону (iOS VisionKit + Android ML Kit) з базовим UI — 3–4 дні. Гібрид з fallback і постобробкою — 8–10 днів. Ми гарантуємо, що маска буде коректна на 95% тестових зображень. При будь-яких проблемах — доопрацювання за наш рахунок. Інтеграція під ключ за 10 днів: пишіть нам, і ми оцінимо ваш проект безкоштовно.
Замовте інтеграцію прямо зараз — отримайте демо-збірку за 1 день. Зв'яжіться з нами для попередньої оцінки вашого сценарію та консультації з технічних деталей.







