Внедрение распознавания жестов в мобильное приложение

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

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

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

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

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

Почему распознавание жестов ломается на реальных устройствах

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

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

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

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

Разбираем, как это закрывается — от калибровки под парк устройств до защитных порогов и отката к обычному вводу.

Что даёт внедрение: скорость отклика, точность, меньше отказов

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

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

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

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

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

Режимы распознавания жестов: в приложении, на сервере, гибрид

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

Три схемы исполнения

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

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

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

Этапы внедрения: от разбора задачи до передачи команде

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

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

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

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

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

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

Кейс: убрали ложные срабатывания в управлении движением

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

Точность до и после

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

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

Что стало

Ложные срабатывания упали примерно до 1%, отклик между жестом и реакцией сократился в разы, а доля пользователей, дошедших до цели без подсказок, выросла с 62% до 93%. Обращения в поддержку по теме «не реагирует или реагирует не туда» сократились втрое.

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

Чем отличаются статические позы от динамических траекторий?

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

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

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

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

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

Свет, дальность, фон: технические сомнения и ответы

Сомнения заказчиков почти всегда про условия съёмки: тусклый свет, контровой свет от витрины, несколько человек в кадре, рука на пределе дальности. Это решается не «ползунком чувствительности», а данными обучения и предобработкой кадра.

Что будет при слабом освещении и контровом свете?

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

На каком расстоянии считывается жест?

Уверенное считывание — когда кисть занимает заметную часть кадра: на вытянутой руке это один-два шага до камеры. Широкоугольный объектив добавляет дальности, но повышает чувствительность к дрожанию. Порог подбираем под сценарий — турникет, касса, витрина.

Как влияет фон и чужие руки в кадре?

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

Можно ли обучить модель под наши жесты?

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

Обсудим задачу: какие данные нужны для старта

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

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

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

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

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

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