Реализация сегментации изображений в мобильном приложении
Мы не раз сталкивались с задачей: клиент хочет реализовать сегментацию изображений в мобильном приложении, но не знает, с чего начать. Сегментация — самая вычислительно дорогая из задач компьютерного зрения на мобиле. Если детекция возвращает прямоугольник, сегментация возвращает маску попиксельно. На изображении 512×512 это 262 144 пикселя, каждый с классом, и всё это нужно обработать и отрисовать за 33 мс для 30 FPS. Без правильного выбора модели и рендеринга real-time недостижим. Мы накопили опыт на 10+ проектах с компьютерным зрением и гарантируем стабильную работу решения.
Какую сегментацию выбрать: семантическую или инстанс?
Семантическая сегментация — каждый пиксель получает один класс (небо, человек, дорога). Все люди в кадре — один класс «person». Модели: DeepLabV3+, MobileNetV3 Segmentation. TFLite-версия DeepLabV3+ с входом 257×257 работает за 22–35 мс на современных Android.
Инстанс-сегментация — каждый экземпляр объекта имеет отдельную маску. Три человека = три маски. Модели: Mask R-CNN, YOLOv8-seg. Значительно тяжелее: YOLOv8n-seg на TFLite — 80–120 мс на мобиле. Реальное real-time с такой моделью — только на флагманах с GPU-делегатом.
Для большинства потребительских кейсов (удаление фона, размытие фона на фото) достаточно семантической сегментации класса «person» или «background». Это закрывается ML Kit Selfie Segmentation — on-device, 30 FPS, отдельная нейронка обученная именно под этот кейс. Наш опыт показывает: ML Kit в 2–3 раза быстрее универсальных моделей при сопоставимом качестве.
Сравним основные подходы:
| Модель | Тип | FPS (iPhone 13) | FPS (Pixel 6) | Применение |
|---|---|---|---|---|
| DeepLabV3+ (TFLite) | Семантическая | 28 | 22 | Универсальная сегментация |
| YOLOv8n-seg (TFLite) | Инстанс | 8 | 10 | Детальное выделение |
| ML Kit Selfie Segm. | Семантическая | 30 | 28 | Портрет / фон |
How-to: как интегрировать ML Kit Selfie Segmentation за 5 дней?
Интеграция занимает 5–7 дней, если работать по нашему чеклисту:
- Подключите SDK через Gradle (Android) или CocoaPods (iOS).
- Создайте экземпляр
SelfieSegmenterOptionsсSTREAM_MODE. - Передавайте кадры в
segmenter.process()(каждый кадр из камеры). - Получите маску, наложите через GPU (метал/OpenGL).
- Оптимизируйте: используйте
enableRawSizeMask()для качества.
Пример кода для Android
val segmenter = Segmentation.getClient( SelfieSegmenterOptions.Builder() .setDetectorMode(SelfieSegmenterOptions.STREAM_MODE) .enableRawSizeMask() .build() ) Как добиться real-time наложения маски?
Маска сегментации — это ByteArray или FloatArray с индексами классов. Наложить её на видеопоток за 33 мс — задача для GPU.
На iOS используем Metal для блендинга: маска конвертируется в CIImage через CIFilter.pixellate или кастомный Metal kernel, затем накладывается на оригинальный кадр через CIBlendWithMask. Весь рендеринг в Metal избегает копирования данных между CPU и GPU через MTLBuffer с shared storage mode.
На Android — RenderScript (deprecated API 31+) или Vulkan/OpenGL ES через SurfaceView. Для новых проектов: AGSL (Android Graphics Shading Language) начиная с Android 13, или Canvas.drawBitmap с Paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_IN) для простых случаев.
Частая ошибка: генерировать Bitmap из маски на CPU в цикле для каждого кадра. На Pixel 6 это ~18 мс только для аллокации + copy — убивает все 33 мс бюджета. Правильно: использовать Bitmap.copyPixelsFromBuffer с заранее аллоцированным ByteBuffer или передавать маску напрямую в шейдер.
ML Kit Selfie Segmentation на практике
Самый быстрый путь для «размытия фона» в видеозвонках или фоторедакторах — использование ML Kit. Кейс: корпоративное приложение для видеопрезентаций, виртуальный фон на iOS. Core Image CIBlendWithMask + ML Kit Selfie Segmentation (iOS SDK): 28 мс на iPhone 13 mini при 720p. На iPhone SE 2nd gen — 41 мс, что при 30 FPS приводило к dropped frames каждые 2–3 секунды. Решение: снизили разрешение обработки до 540p, маску upscale через билинейную интерполяцию — 24 мс, dropped frames исчезли.
Что входит в нашу работу по сегментации
- Анализ требований и выбор оптимальной модели (ML Kit / кастомная / OpenCV).
- Проектирование пайплайна (захват кадра → сегментация → наложение → рендеринг) с учётом целевого FPS.
- Реализация: кодирование на Swift/Kotlin, интеграция TFLite/Metal/OpenGL.
- Тестирование на реальных устройствах (от iPhone SE до флагманов Android).
- Оптимизация под конкретную задачу: профилирование, уменьшение latency.
- Документация по интеграции и обучение команды заказчика.
Сроки и стоимость
Интеграция ML Kit Selfie Segmentation с наложением эффекта — 5–7 дней. Кастомная сегментационная модель с рендерингом через Metal/OpenGL на реальном видеопотоке — 2–3 недели. Стоимость рассчитывается индивидуально. Мы работаем на рынке более 5 лет, выполнили 15+ проектов с компьютерным зрением. Закажите разработку сегментации под ключ — получите готовое решение. Получите консультацию по вашему проекту.







