Реализация сегментации изображений в мобильном приложении

Заказчику нужно, чтобы приложение само выделяло объекты на снимке — точно, быстро и без ручной правки. Мы разрабатываем сегментацию изображений под ключ: подбираем решение под вашу задачу, обучаем на ваших данных и доводим до стабильной работы в реальных условиях. Время ручной обработки снимков сокращается в разы.

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация сегментации изображений в мобильном приложении
Сложный
~1-2 недели
Часто задаваемые вопросы

Сегментация изображений в мобильном приложении: где ломается

Сегментация изображений в мобильном приложении почти никогда не ломается «в теории» — она ломается в конкретных условиях съёмки. При слабом свете датчик отдаёт шумный кадр, порог по цвету и яркости перестаёт разделять объект и фон, и маска объекта на кадре рвётся по контуру: пользователь получает вырезанный силуэт, из которого выпадают рукав, тень или часть причёски. Отдельная беда — полупрозрачные и тонкие детали: стекло, шерсть животных, велосипедные спицы. Модель, обученная на «чистых» студийных примерах, такие границы просто не различает.

Вторая точка отказа — задержка обработки кадра. Если модель считает кадр дольше, чем пользователь готов ждать, эффект сегментации теряет смысл: человек уже навёл камеру на другой объект, а на экране всё ещё висит прошлая маска. Хуже, когда тяжёлый расчёт выполняется в том же потоке, что и отрисовка превью — интерфейс начинает дёргаться, кнопки не отзываются, приложение выглядит сломанным, хотя код формально работает.

Третий сбой проявляется там, где его меньше всего ждут: в поле, в подвале, в самолёте. Инженеры нередко строят схему «кадр уходит на сервер, оттуда возвращается готовая маска», и тогда работа приложения без сети превращается в зависший экран с бесконечным индикатором. Пользователь не понимает, что произошло, закрывает приложение и больше не возвращается — а по логам это выглядит как обрыв связи, а не как дефект продукта.

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

Что даёт сегментация на устройстве и в облаке

Разница между вычислением на телефоне и на сервере видна не в качестве маски, а в том, сколько кадров доезжает до ответа. Пять эффектов измеримы на реальном трафике: доля кадров без сети, время отклика интерфейса, совпадение результата на разных моделях телефонов, уход отказов «нет ответа от сервера», объём передаваемых кадров.

Обработка на устройстве: что уходит в офлайн

Модель компилируется в формат платформы — через Core ML вывод идёт на самом телефоне, без обращения к серверу. В офлайн уходит всё, что не требует тяжёлого контекста: человек, объект, фон, границы. Это 80–90% кадров потока: приложение работает без сети, а интерфейс отвечает за доли секунды вместо секунд ожидания.

Одинаковый результат на разных моделях телефонов даёт зафиксированная предобработка: один размер входа, одна нормализация, один порог маски. Различия остаются в скорости, не в геометрии — это проверяется сравнением доли совпавших пикселей на матрице устройств.

Гибрид: где считать и что хранить

В облако уходят пограничные кадры: мелкие объекты, сильные перекрытия, нестандартные сцены — там модель крупнее, и результат точнее. Отбор сокращает объём передаваемых кадров в разы, а класс отказов «нет ответа от сервера» уходит: локальная маска отдаётся сразу, уточнённая подменяет её позже.

Хранить достаточно маски и признаков, а не самих кадров — это снимает вопросы приватности и держит очередь на отправку предсказуемой. Кадры, не ушедшие по сети, ждут её в локальной очереди и уходят повторно.

Варианты расчёта: на устройстве, на сервере, гибрид

Режим расчёта определяет, где живёт модель и сколько ресурсов она забирает у пользователя. Локальная обработка кадров считается прямо на телефоне и не отправляет изображение в сеть; серверная обработка кадров снимает нагрузку с устройства, но привязывает результат к каналу связи; гибридная схема делит задачу между ними. Выбор влияет на задержку отклика, приватность и то, на каком парке устройств приложение вообще запустится.

Вариант Когда подходит Ограничения
Локальная обработка кадров Маска нужна мгновенно, кадры идут потоком, изображения чувствительные и не должны покидать устройство Требования к устройству выше: модель постоянно держит память, ограничения по памяти и нагреву отсекают старый парк, на сложных сценах качество ниже серверного
Серверная обработка кадров Нужна максимальная точность, модель тяжёлая и часто обновляется, съёмка обрабатывается пакетом, а не в реальном времени Задержка зависит от сети, передача каждого кадра — расход трафика, отдельный контур хранения и защита персональных изображений
Гибридная схема Нужен баланс: быстрый черновой результат на экране и точное уточнение там, где оно важно Сложнее в поддержке: две ветки расчёта, согласование форматов маски, контроль рассинхрона версий модели между клиентом и сервером

Когда хватает локальной обработки

Если задача — отделить объект от фона в реальном времени, а сцена однотипная, выигрывает расчёт на устройстве: отклик не зависит от качества связи, а кадры не покидают телефон. Мы заранее проверяем требования к устройству на целевом парке и подбираем лёгкую модель так, чтобы уложиться в ограничения по памяти без просадки частоты кадров.

Гибрид: предобработка на устройстве, уточнение в облаке

На телефоне выполняется быстрый проход — он даёт черновую маску и отсекает лишнее, а тяжёлое уточнение уходит на сервер по запросу. Так снимается основная нагрузка с устройства и сокращается объём передаваемых данных, но появляется обязанность следить за совместимостью версий модели на обеих сторонах.

Как проходит внедрение: от аудита данных до передачи

Внедрение сегментации в мобильное приложение строим так, чтобы каждый шаг опирался на проверенный результат предыдущего. Сначала фиксируем, какие классы объектов нужно выделять и в каких условиях снимает пользователь, — от этого зависят и разметка, и требования к модели.

  1. Аудит кадров и разметки. Проверяем сцены, освещение, ракурсы и баланс классов, отдельно ищем расхождения масок с реальными границами объектов: модель воспроизводит ошибки разметки, а не исправляет их.
  2. Схема обработки. Решаем, где идёт вычисление — на устройстве, на сервере или гибридно, — как кадр готовится до подачи и что приложение делает с готовой маской.
  3. Сборка и обучение модели. Дообучаем предобученную основу на размеченных кадрах, отдельно прогоняем редкие классы и сложные сцены, чтобы контур выделения работал не только на типичных примерах.
  4. Проверка на реальных устройствах. Смотрим не только точность маски, но и расход памяти, скорость отклика и поведение при слабом освещении — часть дефектов видна лишь на живом устройстве.
  5. Замер качества. Считаем метрики на отложенной выборке и на записях с устройств, разбираем кадры, где маска рвётся, и по ним уточняем разметку и дообучаем.
  6. Передача команде заказчика. Отдаём модель, код обработки кадра, инструкцию по дообучению на новых данных и порядок проверки перед публикацией релиза.

Что уточняем до старта работ

До начала уточняем три момента: где выполняется вывод, какой объём кадров есть для дообучения и как выглядит приёмка — на какой выборке и по какой метрике считаем качество. Ответы задают объём работ и срок.

Что остаётся в проекте: модели, разметка, регламенты

После вывода сегментации в рабочую эксплуатацию заказчику переходит не только приложение, а набор артефактов, от которых зависит поведение модели на новых снимках. Ниже — что именно мы оставляем в проекте и почему без каждого пункта система теряет управляемость.

  • Модель и её конфигурация — веса, структура, входное разрешение, порог уверенности и параметры постобработки масок, плюс скрипт сборки, чтобы результат воспроизводился на вашем стенде.
  • Набор данных с разметкой — исходные кадры и маски, правила для спорных областей: полупрозрачные края, перекрытия, мелкие объекты; журнал правок с автором и датой.
  • Схема обработки кадров — путь от камеры до маски: приведение размера, нормализация, расчёт на устройстве или выгрузка на сервер, сглаживание границ между кадрами.
  • Регламент переобучения — какая метрика и какой её просадок запускают дообучение, как часто проверяем на контрольной выборке, кто готовит новые данные.
  • Инструкция для команды — как поднять окружение, прогнать проверку качества, сравнить версию с текущей и откатиться, если метрика просела.

Права на данные и модель

Отдельно фиксируем, кому принадлежат снимки, разметка и обученные веса, какие открытые модели и на каких лицензиях использованы. Если в кадрах есть люди или документы, описываем обезличивание, сроки хранения и порядок удаления по запросу — так передача проекта не создаёт правовых рисков.

Кейс: маски объектов в приложении для съёмки на складе

Клиент — сеть распределительных центров СкладЛайн, задача — учёт товара по снимкам с камеры. Проект стартовал на четырёх площадках: оператор наводил камеру на паллету, приложение выделяло маску каждой коробки, результат уходил в учётную систему. Первая версия считала всё на сервере — кадр сжимался, вставал в очередь и возвращался с готовой маской. В зонах с неустойчивым сигналом это оборачивалось зависшими съёмками и переделками смены: замеры до внедрения дали 74% корректных масок, около 0,9 с на обработку кадра и до пяти обращений к серверу на один снимок.

Что поменяли в схеме обработки

Основную работу перенесли на устройство: лёгкая модель считает маску прямо на телефоне, а на сервер кадр уходит только при уверенности ниже порога — примерно каждый двадцатый снимок. Кадры складываются в локальное хранилище и досылаются сами, когда связь возвращается, поэтому обрыв сети больше не рвёт съёмку. На сервере остались пересчёт сложных кадров и накопление разметки для дообучения модели на данных конкретного склада.

После перехода доля корректных масок выросла до 96%, время обработки кадра сократилось до 0,2 с, а число обращений к серверу — до одного на десять снимков. Пиковая нагрузка на серверную часть упала почти втрое: те же мощности держат втрое больше одновременных съёмок, а жалобы на зависания при пропадании связи ушли из отчётов поддержки.

Чем отличается семантическая сегментация от распознавания объектов рамками?

Детектор отвечает на вопрос «где объект»: на выходе — прямоугольник и класс. Семантическая сегментация размечает каждый пиксель кадра, поэтому результат — попиксельная маска, повторяющая контур. Для силуэта человека рамка захватит и фон, и руки, а маска пройдёт по границе точно. Отсюда разные требования к разметке, размеру модели и вычислениям на устройстве.

Рамки достаточно, когда результат — счётчики, отслеживание перемещения, зоны интереса или грубая аналитика: разметка собирается в разы быстрее, модель легче и стабильнее работает на телефоне. Маска нужна там, где контур и есть результат: замена фона, примерка, наложение графики, вырезание объекта.

Отдельная развилка — однотипные объекты. Семантическая сегментация сольёт две машины в один класс; если нужно и посчитать, и обвести — это третья постановка, с отдельной маской на каждый объект. Выбор идёт от вопроса «что именно вернём в приложение», а не от красоты картинки.

Если в приложении уже работает распознавание рамками, переписывать его не нужно. Дообучаем существующую модель: детектор остаётся, к нему добавляется ветка предсказания маски, обучение идёт на небольшом наборе с точной разметкой контуров. Внешний контракт в приложении не меняется — интерфейс получает тот же результат плюс маску, а пока маска неуверенна, отдаём рамку: пользователь не видит отказа.

Качество маски проверяем метриками пересечения с эталоном — на публичных наборах с двойной разметкой, например COCO, и на собственных кадрах с камер пользователей. Разбор худших случаев идёт до включения режима на всех устройствах.

Технические сомнения: точность, устройства, данные

Сегментация ломается не на крупных объектах, а на тонких структурах. Метрику фиксируем до старта: доля пересечения масок и доля верных пикселей по каждому классу, приёмка — на сложной выборке, а не на студийных кадрах.

Хватит ли точности на сложных кадрах?

Тонкие границы — волосы, блики, полупрозрачные объекты — требуют входа в высоком разрешении и постобработки контура. Дообучаем на снимках с целевых устройств и тех же условиях света.

Что делать с телефонами слабее?

Облегчённая ветка модели: меньший вход, сжатие весов, часть операций на упрощённом контуре. Маска считается в пониженном разрешении и уточняется по краям — интерфейс остаётся отзывчивым.

Кто владеет данными и моделью?

Разметка, веса и конфигурация обучения передаются заказчику. Если снимки не должны покидать периметр, обучение идёт на его инфраструктуре, а мы работаем с обезличенными метриками.

Как быть с редкими классами?

Балансируем выборку и добавляем объекты редкого класса в кадры синтетически, порог уверенности по нему задаём отдельно. Класс не выводится в интерфейс, пока не набрана метрика на отложенной выборке.

Качество падает после обновления парка устройств?

Ведём регресс-набор эталонных кадров и прогоняем его на каждой сборке модели. Просадка видна до релиза: откатываем веса, а расхождение между моделями устройств разбираем по отчёту.

Обсудим задачу: что прислать для оценки

Чтобы вернуться с оценкой и планом работ, не нужен том технического задания — достаточно пяти вводных. По ним мы понимаем объём, порядок этапов и то, где проект может пойти не по плану.

  • Примеры кадров — 10–20 реальных снимков или коротких видео с рабочих устройств. Важны не только удачные: контровой свет, размытый фон, однотипные объекты рядом, съёмка под углом — именно на них маска чаще всего рвётся.
  • Сценарии съёмки — откуда приходит кадр: галерея, камера внутри приложения, поток с фронтальной камеры, работа без сети. От этого зависит, где считать маску и как часто.
  • Ограничения по устройствам — минимальная поддерживаемая версия системы, доля слабых моделей в аудитории, допустимое время обработки кадра и запас по памяти.
  • Требования к приватности — обрабатывается кадр на устройстве или уходит на сервер, что сохраняется в журналах, нужна ли анонимизация лиц и номеров.
  • Классы объектов и точность — что именно выделяем, какая доля ошибок считается приемлемой и как приложение ведёт себя при неуверенном результате.
  • Сроки и вехи — к какой дате нужен работающий прототип, что попадает в первую очередь, что можно вынести во вторую.

После этого вернёмся с оценкой и планом работ: этапами, порядком проверок и точками, где вы принимаете результат. Если часть данных пока не собрана — опишите задачу словами, поможем сформулировать требования на созвоне.

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

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

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1009
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    902
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1331
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1179
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1106
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    713