AI-классификация фотографий в галерее мобильного приложения

Пользователи теряются в тысячах снимков, а галерея тормозит и греет устройство. Мы разрабатываем AI-классификацию фотографий под ключ: от аудита галереи до передачи регламентов. Сортировка по событиям, людям и местам сокращает время поиска нужного кадра в разы.

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

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

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

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

Почему AI-классификация фотографий ломается на реальных галереях

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

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

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

Разбираем, как это закрывается: где ставить фильтр качества до модели, как схлопывать серии в один кадр, чем ограничивать ложные срабатывания и как считать признаки один раз, а не при каждом показе.

Что даёт корректная классификация: эффект в метриках

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

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

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

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

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

Как устроена AI-классификация фотографий в мобильном приложении

Классификация начинается с извлечения признаков: модель прогоняет снимок и отдаёт вектор — набор чисел, описывающих содержимое кадра. По нему снимки и сравниваются между собой, а не по имени файла или дате. Для этого используем Core ML на iOS и аналог на Android — inference идёт на устройстве, фото не покидают телефон.

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

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

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

Сравнение подходов: на устройстве, в облаке, гибридно

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

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

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

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

Этапы внедрения: от аудита галереи до передачи регламентов

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

  1. Аудит галереи. Выгружаем обезличенную выборку, считаем статистику по типам контента и находим классы, которые классификатор будет путать. Результат — перечень категорий и критерии, по которым снимок относится к каждой.
  2. Проектирование схемы. Фиксируем дерево категорий, правила приоритета при совпадении и поведение при низкой уверенности: фото уходит в «прочее», а не в случайный альбом.
  3. Настройка классификатора. Подбираем модель под профиль галереи и ограничения устройства, настраиваем порог уверенности и правила группировки. Часть вычислений идёт на устройстве — фото не покидают телефон.
  4. Проверка на реальных данных. Прогоняем классификатор на выборке, считаем долю верных отнесений по каждой категории и разбираем ошибки. Порог и правила корректируем до приемлемой точности.
  5. Интеграция в приложение. Встраиваем обработку в фоновые задачи, чтобы классификация шла при зарядке и не мешала работе интерфейса.
  6. Передача документации. Отдаём регламенты: схему категорий, настройки, порядок переобучения и разбора спорных случаев.

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

Что заказчик получает на руки после внедрения

Внедрение AI-классификации фотографий заканчивается не демонстрацией работающего прототипа, а передачей комплекта, по которому приложение можно развивать и сопровождать без нас. Ниже — что именно фиксируется в документах и репозиториях к моменту сдачи.

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

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

Чем отличается классификация на устройстве от облачной обработки

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

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

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

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

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

Кейс: как галерея на 40 000 снимков перестала тормозить

Что было до изменений

К нам пришла команда с приложением-галереей: 40 000 снимков у активного пользователя, классификация выполнялась на устройстве в один поток прямо при открытии раздела. На холодном старте галерея показывала пустые плитки 4-6 секунд, поиск по категории «документы» отдавал результат за 3,5 секунды, а доля ошибочных категорий доходила до 22% — снимки чеков и визиток падали в «прочее». Пользователи просто листали ленту вручную, потому что доверия к фильтрам не было.

Что изменили

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

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

Метрики до и после

Показатель До После
Время поиска по категории 3,5 с 0,4 с
Доля ошибочных категорий 22% 6%
Холодный старт галереи 4-6 с 1,2 с
Нагрузка на устройство при открытии пиковая, с просадкой кадров ровная, без просадок

Отдельно отслеживали долю снимков в «неразобранном» — она держится в пределах 4-5% и служит честным индикатором качества модели: рост означает, что появился новый тип контента, под который нужно дообучение.

Обсудим вашу задачу классификации фотографий

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

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

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

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

Можно ли обучить модель распознавать лица конкретных людей и объекты, которых нет в стандартных наборах?

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

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

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

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