Евгений Лойченко

Обложка: 2–3 финальных экрана приложения на фоне реальной полки в магазине

Умная камера распознавания

Спроектировал мобильное приложение для аудита выкладки: мерчандайзер снимает полку, а нейросеть сама находит товары, вместо ручного чек-листа по каждому SKU. На пилоте визит в точку сократился на 27%, а доля возвращённых отчётов упала с 18 до 7%.

Контекст

ARK делает сервис аудита розничной выкладки для производителей FMCG. Полевые мерчандайзеры обходят магазины по заданиям заказчика и проверяют, что товары стоят на своих местах, в нужном количестве и на правильном оборудовании. Заказчик по этим данным решает, куда отправить торгового представителя и за что предъявить претензию сети.

Компания обучила нейросеть распознавать товары на фото полки, но мобильного продукта вокруг неё не было. Моя роль — единственный продуктовый дизайнер: исследование, сценарий, прототип, тестирование и передача в разработку. Работал с продакт-менеджером, двумя ML-инженерами и тремя мобильными разработчиками. Проект занял четыре месяца в 2024 году, платформа — Android.

Проблема

До проекта мерчандайзер фотографировал полку в общее приложение для отчётов, а потом вручную отмечал в чек-листе каждый SKU из задания. На одну точку уходило в среднем 24 минуты, из них 14 — на чек-лист: сверять фото со списком из 60–80 позиций приходилось стоя у полки и держа в голове, что уже проверено.

Ручная сверка давала ошибки. 18% отчётов возвращались на исправление, и заказчик получал данные по точке на следующий день, когда исправлять выкладку было уже поздно. Отдельно мешало ТЗ: примерно в каждом седьмом визите оборудование в задании не совпадало с тем, что стоит в магазине, и мерчандайзер не мог закрыть задачу.

Цифры — из выгрузки отчётов за квартал и разбора возвратов вместе с супервайзерами.

Гипотеза

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

Задача и ограничения

Успехом договорились считать три метрики: время выполнения задачи в точке, число точек за день на одного сотрудника и долю ошибок в базе SKU. Публичную часть для заказчика и аналитику по сети сознательно не трогали — меняли только работу в поле.

— Модель требует съёмки с расстояния 1–1,5 метра, прямо, с перекрытием соседних кадров около 30%. Длинный стеллаж одним кадром не распознаётся.

— Обработка идёт на сервере и занимает 40–90 секунд на сцену. На известных SKU точность около 92%, то есть каждый двенадцатый товар может быть определён неверно.

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

— Интерфейс собирается на дизайн-системе компании, новые компоненты — только по необходимости.

Конкуренты

Я разобрал четыре прямых конкурента — Trax, YOOBIC, Repsly и BeMyEye — и два массовых продукта с распознаванием по фото, Google Lens и Amazon Visual Search. Вторые нужны были не как конкуренты, а как пример того, как приложение для миллионов людей объясняет, что и как снимать.

Сравнивал по пяти вопросам: распознаёт ли продукт SKU, подсказывает ли при съёмке, проверяет ли качество кадра, работает ли без сети и как собирает причины отсутствия товара.

Что я из этого взял: у конкурентов сильная аналитика для заказчика, но почти ничего для человека у полки.

  1. 01Снимать полку частями, а не одним кадром — модель склеит, а качество не упадёт на длинных стеллажах
  2. 02Учить съёмке в момент действия, как Google Lens, а не отдельным онбордингом, который пропускают
  3. 03Не заставлять ждать распознавания: пока сцена обрабатывается, можно снимать следующую
  4. 04Причину отсутствия выбирать из списка — свободный текст заказчик не может посчитать

Сценарий

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

— на выборе оборудования ТЗ расходится с магазином, и задача заходит в тупик;

— при съёмке непонятно, как снимать, чтобы нейросеть распознала полку;

— после отправки неясно, что происходит с фото и можно ли идти дальше;

— при разметке мерчандайзер не знает, почему товара нет и как это выяснить.

Пользовательский сценарий: этапы × цель, боли, решения. Крупно — четыре главные боли, полная таблица — по клику

Оборудование из ТЗ, но с правом на ошибку

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

Экран выбора оборудования и экран сообщения о расхождении с ТЗ

Обучение в процессе, а не до него

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

Подсказка при первом входе → съёмка первой секции закрытого холодильника

Статусы сцен вместо ожидания

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

Экран статусов сцен со всеми состояниями: загрузка, распознавание, готово, пересъёмка

Разметка отсутствующих товаров

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

Список товаров → выбор причины отсутствия → подсказка, как выяснить причину

Когда нейросеть ошибается. При точности около 92% ошибка — это норма, а не исключение, поэтому для каждого сбоя есть свой выход.

  1. 01Размытый или тёмный кадр — проверка прямо на телефоне до отправки и просьба переснять
  2. 02Кадры не склеились — показываем, какой участок полки переснять, а не всю сцену
  3. 03Низкая уверенность распознавания — товар помечен «проверьте», решение за человеком
  4. 04Нет связи в магазине — фото встают в очередь и уходят, когда появится сеть
  5. 05Товар не распознан — его можно добавить вручную из каталога задания

Тестирование

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

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

Экран товаров

Главное изменение после теста. Переключите тоггл: «Олдовое» — общий список, где отмеченные и неотмеченные товары перемешаны, «Новое» — разделённый список со счётчиком, в котором видно, сколько осталось до отправки. Во втором раунде полный сценарий занял 8:10 против 11:40 в первом, то есть на 30% быстрее.

Олдовое Новое
Экран товаров до теста: общий список без разделения на отмеченные и неотмеченные
Экран товаров после теста: «не отмечено» / «готово» и счётчик до отправки

Результат

Приложение запустили пилотом на 40 точках одного заказчика на три недели. Среднее время в точке сократилось с 24 до 17,5 минуты (−27%), доля отчётов, возвращённых на исправление, — с 18 до 7%, а мерчандайзер успевал за день 11 точек вместо 9. Сравнивали с теми же точками за три недели до пилота.

Что не изменилось: в магазинах со слабой связью отчёты всё так же приходили с задержкой — очередь отправки спасает данные, но не время. И около 6% товаров по-прежнему приходилось добавлять вручную: модель плохо узнаёт новинки, пока их нет в обучающей выборке.

Что бы сделал иначе

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

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