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

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

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

Чому розпізнавання жестів ламається на реальних пристроях

Демо-стенд із розпізнаванням жестів працює майже бездоганно: рівне світло, рука по центру кадру, спокійна поза оператора.

На пристрої користувача те саме збирання починає помилятися — керування жестами в застосунку розвалюється на першому ж реальному сценарії, хоча логіка не змінювалася ні на рядок.

Причини майже завжди лежать поза моделлю. Бюджетний модуль камери шумить за слабкого світла й «пливе» за кольором, а сенсор рівня Sony у тому самому приміщенні віддає помітно чистіший кадр — поріг упевненості, підібраний на одному пристрої, на іншому виявляється неправильним.

Швидкі помахи розмазуються в змащені кадри: зчитування рухів рук втрачає ключові точки, і класифікатор стрибає між сусідніми класами.

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

Далі вмикається ціна помилки. Хибні спрацьовування в інтерфейсі — це випадково надіслане повідомлення, скасоване замовлення, екран, що спрацював у кишені.

Користувач не розбирається, чия це вина: він просто перестає довіряти жестам і повертається до кнопок, а жестова навігація залишається мертвим кодом у релізі.

Розбираємо, як це закривається — від калібрування під парк пристроїв до захисних порогів і відкату до звичайного введення.

Що дає впровадження: швидкість відгуку, точність, менше відмов

Розпізнавання жестів перестає бути гарною демонстрацією, коли його прив’язують до метрик. Перше, що змінюється, — швидкість відгуку: обробка йде прямо на пристрої, без звернення до сервера, тому інтерфейс реагує в межах одного циклу оновлення, а не після мережевої відповіді.

На недорогих пристроях виграш помітніший за все — там, де раніше накопичувалися затримки й скарги на «залипання».

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

Зниження відмов інтерфейсу — наслідок того, що частина ручних дій зникає зі сценарію. Замість пошуку дрібної кнопки, гортання й введення користувач робить один рух: там, де було три-чотири кроки, залишається один. Рідше трапляються промахи по елементах — менше закинутих сценаріїв на середині.

Плавність анімації тримається на синхронізації: перехід запускається за підтвердженим жестом, а не за першим дотиком, тому немає ривків і подвійних спрацьовувань. Якщо рука виходить із кадру, інтерфейс повертається в початковий стан без стрибка.

Ефект вимірюваний: до й після знімаємо частку успішних розпізнавань, час до першої дії та кількість відмов на сценарій. Заміри робимо на пристроях реальної аудиторії, а не на тестовому стенді, — інакше цифри не збіжаться з тим, що бачить користувач.

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

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

Три схеми виконання

Усі три конфігурації використовують один контракт обміну й однакову розмітку подій, тому перехід між ними не переписує застосунок цілком — змінюється лише шар, де виконується модель.

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

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

Етапи впровадження: від розбору задачі до передачі команді

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

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

Що передаємо на руки: моделі, схеми, регламенти, документація

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

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

Передаємо це не архівом, а розбором із командою: проходимо по кожному артефакту, показуємо, як його змінювати без нас, і фіксуємо, що залишається на супроводі.

Кейс: прибрали хибні спрацьовування в керуванні рухом

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

Точність до і після

Частка хибних спрацьовувань трималася на 12–14%, а на зашумленому кадрі сягала третини: користувач втрачав контроль над екраном і кидав підхід. Розбір показав, що річ не в самій моделі, а в рішенні за одним кадром — випадковий рух руки важив стільки ж, скільки навмисний жест.

Рішення тепер ухвалюється за вікном кадрів, між командами перевіряється поза спокою, а поріг упевненості калібрується під конкретний пристрій і освітлення при першому запуску.

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

Що стало

Хибні спрацьовування впали приблизно до 1%, відгук між жестом і реакцією скоротився в рази, а частка користувачів, які дійшли до мети без підказок, зросла з 62% до 93%. Звернення до підтримки на тему «не реагує або реагує не туди» скоротилися втричі.

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

Чим відрізняються статичні пози від динамічних траєкторій?

Статична поза — це знімок положення кисті або корпусу в одному кадрі. Класифікатор розпізнавання жестів дивиться на взаємне розташування опорних точок і вирішує, який жест показано прямо зараз.

Динамічна траєкторія — послідовність кадрів: важливі напрямок і порядок руху, а не лише підсумкове положення руки.

Для статики ознаки нормалізують за масштабом і поворотом, тому жест спрацьовує і поблизу камери, і на витягнутій руці. Словник тут невеликий: п’ять-сім поз уже конфліктують між собою, бо відрізняються парою кутів.

Динаміка живе в ковзному часовому вікні — жест виділяється за початком і кінцем руху, а ознаки рахуються за зміною положення в часі.

Звідси різні класи відмов. Статичні пози дають хибні спрацьовування, коли людина просто тримає руку в кадрі, — рятує поріг утримання в кілька кадрів.

Динамічні траєкторії пропускають жест, якщо користувач прискорився або розділив рух паузою, тому запис нормалізують за тривалістю й відсікають перехідні ділянки.

Вибір підходу диктує сценарій інтерфейсу. Для керування без дотику — пауза, відтворення, відповідь на дзвінок — достатньо статики: вона передбачувана й не потребує розмаху. Для перемикання розділів, малювання або швидких команд потрібна динаміка.

Робочий варіант часто гібридний: статична поза відкриває режим, траєкторія всередині нього виконує дію.

Перевіряємо рішення на еталонних записах: ті самі жести показують різні люди, за різного світла й з різної відстані. Рахуємо, скільки разів підхід помилився і на якій ділянці, — тоді вибір перестає бути смаковим і стає вимірюваним.

Світло, дальність, фон: технічні сумніви та відповіді

Сумніви замовників майже завжди про умови зйомки: тьмяне світло, контрове світло від вітрини, кілька людей у кадрі, рука на межі дальності. Це вирішується не «повзунком чутливості», а даними навчання й передобробкою кадру.

Що буде за слабкого освітлення й контрового світла?

Модель спирається на контраст між кистю та фоном, тому кадр вирівнюють за яскравістю до подання в мережу. За тьмяного світла рятує інфрачервоне підсвічування або глибинна камера, за контрового — маска руки за силуетом. Якщо сцени не вистачає фізично, скажемо до старту.

На якій відстані зчитується жест?

Упевнене зчитування — коли кисть займає помітну частину кадру: на витягнутій руці це один-два кроки до камери. Ширококутний об’єктив додає дальності, але підвищує чутливість до тремтіння. Поріг підбираємо під сценарій — турнікет, каса, вітрина.

Як впливає фон і чужі руки в кадрі?

Розпізнавання йде за ключовими точками кисті, а не за всім кадром, тому однотонний фон не потрібен. Щоб чужа рука не перехоплювала керування, задаємо зону інтересу й вибираємо найближчу руку за глибиною; у натовпі жест закріплюється за тим, хто його почав.

Чи можна навчити модель під наші жести?

Так: збираємо набір даних на ваших жестах і умовах — рукавички, одяг, ракурси, реальні приміщення. Донавчання йде на розмічених записах, якість міряємо часткою правильних спрацьовувань і хибних активацій. Обчислення йдуть на пристрої, відео його не залишає.

Обговоримо задачу: які дані потрібні для старту

Щоб оцінка проєкту була предметною, а не «на око», потрібен мінімум вхідних даних. Точність розпізнавання визначається не вибором моделі, а якістю записів і повнотою опису сценаріїв: де жест застосовується, що вважається помилкою, що відбувається при хибному спрацьовуванні.

Збирання цього списку зазвичай займає у замовника пару годин і знімає головний ризик — переробку розпізнавача після першого випуску.

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

Надішліть те, що доступно, — решту пунктів уточнимо в розмові. Ми повернемося з оцінкою проєкту, планом робіт за етапами та переліком ризиків, які бачимо на вхідних даних. Обговоримо задачу по суті: опишіть сценарії та обмеження, далі наша частина.

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

Останні роботи

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