При розробці фітнес-додатку зіткнулися з тим, що сира модель PoseNet давала хибні спрацьовування на кожному другому кадрі — недостатня часова стабільність. Рішенням стало впровадження pose estimation на основі MediaPipe з кастомним згладжуванням OneEuroFilter. Ми інтегруємо в мобільні додатки розпізнавання поз — детекцію ключових точок скелета в реальному часі. Це затребувано у фітнесі (підрахунок повторень, аналіз техніки), медицині (реабілітація, діагностика ходи) та AR. Технічно задача складніша за детекцію об'єктів: потрібна не тільки точність локалізації, але й часова стабільність. Наша команда має 5+ років досвіду в комп'ютерному зорі та реалізувала більше 30 проєктів з pose estimation. Вартість впровадження визначається індивідуально, залежить від кількості вправ та платформ. Економія часу на налагодження порівняно з самостійною розробкою може досягати 40%.
Яку модель обрати: MoveNet, BlazePose або ML Kit?
| Модель | Точок | Швидкість (на iPhone 12) | Типовий сценарій |
|---|---|---|---|
| MoveNet Lightning | 17 | 30+ FPS | Фітнес-трекінг повторень |
| MoveNet Thunder | 17 | ~15 FPS | Медичний аналіз з підвищеною точністю |
| MediaPipe BlazePose | 33 | ~25 ms (Pixel 7 GPU) | Аналіз ходи, AR з деталізацією обличчя/рук |
| ML Kit Pose Detection | 33 | ~30 FPS | Швидка крос-платформна інтеграція |
MoveNet Lightning — найкращий баланс для мобіля: TFLite-оптимізований, доступний через PoseLandmarker. BlazePose дає z-координати для 3D-кутів. ML Kit — простий, але трохи менш точний. У нашому кейсі MoveNet Lightning виявився в 2 рази швидшим за BlazePose на iPhone 11 (35 FPS vs 17 FPS), що критично для real-time фідбеку.
Як правильно підраховувати повторення у фітнес-додатку?
Наївний підхід — стежити за Y-координатою стегна — ламається в реальності. Правильне рішення — обчислювати кут у колінному суглобі через скалярний добуток векторів [HIP → KNEE] і [KNEE → ANKLE]. Присідання = кут нижче 120°, вставання = вище 160°. Скінченний автомат: STANDING → DOWN → STANDING = 1 повтор. Кути з z-координатами стабільніші, якщо камера не строго збоку. Згладжування landmarks — обов'язкове: сирі дані стрибають на 3–5 пікселів між кадрами. Додатково використовуємо фільтр медіанного згладжування для відсікання викидів.
Який метод згладжування кращий?
| Метод | Затримка | Стабільність | Застосування |
|---|---|---|---|
| EMA (α=0.6) | Низька | Середня | Швидка реакція, фітнес |
| VelocityFilter (MediaPipe) | Середня | Висока | Медицина, AR |
| OneEuroFilter | Налаштовувана | Висока | Універсальний |
Для фітнесу достатньо EMA, для реабілітації — OneEuroFilter. У наших проєктах ми кастомізуємо параметри OneEuroFilter під конкретну вправу: для присідань низька частота зрізу (min_cutoff=0.5), для швидких рухів — вище (min_cutoff=1.0).
Інтеграція: iOS та Android — покроково
- Вибір моделі — на основі потрібної точності та швидкості. MoveNet Lightning для старту.
- Підготовка стеку: MediaPipe Tasks Vision (SPM або Gradle) версії 0.10.0.
- Налаштування інференсу: PoseLandmarker з
runningMode = .liveStreamтаPoseLandmarkerOptions. - Обробка результатів: нормалізовані точки (0..1) або
worldLandmarks(метрові). Для кутів використовуємо worldLandmarks — вони не залежать від crop камери. - Відмальовка скелета: на iOS — CAShapeLayer з анімацією, на Android — Canvas.drawLine на SurfaceView або Compose Canvas.
- Тестування — перевірка FPS та точності на цільових пристроях (iPhone 11, Pixel 6, Galaxy S21).
Типові помилки при впровадженні:
-
Малювання скелета в нормалізованих координатах без трансформації в координати прев'ю — забувають aspect ratio та crop. Використовуйте
convertNormalizedLandmarksToImageCoordinates. - Запуск інференсу на main thread — знижує FPS до нуля. Використовуйте фонові черги (userInteractive в iOS, SingleThreadExecutor в Android).
- Відсутність згладжування landmarks — візуальний джитер та неправильний підрахунок повторень. Навіть простий EMA (α=0.7) вирішує проблему.
Що входить в роботу
- Консультація з вибору моделі та оцінка feasibility.
- Проектування архітектури (інференс, UI, зберігання історії).
- Інтеграція pose estimation на iOS та/або Android.
- Реалізація логіки підрахунку повторень або аналізу рухів.
- Налаштування згладжування та оптимізація під конкретний девайс.
- Документація з використання та калібрування.
- Підтримка після запуску (гарантуємо стабільність оновлень).
Строки
Базовий скелет на відеопотоці + одна вправа — 1–2 тижні. Повноцінний фітнес-модуль з кількома вправами, голосовим зворотним зв'язком та історією — 3–4 тижні. Вартість розраховується індивідуально.
Зв'яжіться з нами для оцінки вашого проєкту — ми допоможемо вибрати модель та спроектуємо рішення під ключ. Отримайте консультацію з впровадження pose estimation вже сьогодні.







