Реалізація AI-аналізу постави через камеру
Користувачі часто сутуляться перед екраном, і фронтальна камера смартфона може своєчасно виявити порушення. Pose estimation модель видає 17–33 ключових точки скелета в реальному часі, а геометрія — кути між суглобами та зміщення центру маси — дає точну картину постави. Понад 60% офісних працівників мають forward head posture з кутом >20°, що виявляється за 30 секунд сканування. Ми використовуємо перевірені стеки: Apple Vision для iOS-only або MediaPipe для кроссплатформенних проектів. Накопичений досвід дозволяє обирати оптимальну модель під завдання вашого додатку. Економія часу користувача за рахунок автоматичного аналізу досягає 90% порівняно з ручною оцінкою.
Як вибрати між Apple Vision та MediaPipe?
Два основні шляхи на iOS — Apple Vision framework з VNDetectHumanBodyPoseRequest, та MediaPipe Pose (BlazePose). На Android — ML Kit Pose Detection або той же MediaPipe. Характеристики зведені в таблицю:
| Параметр | Apple Vision | MediaPipe |
|---|---|---|
| Платформа | iOS тільки | iOS, Android, Web |
| Кількість точок | 19 | 33 (з обличчям та кистями) |
| Точність плечей | Середня | Висока |
| Продуктивність | Легкий (< 50 мс на кадр) | Важкий (Lite/Full/Heavy, 30–80 мс) |
| Інтеграція | Нативна | Через SDK |
Apple Vision Vision framework краще для iOS-only проектів — він нативний і не навантажує батарею. MediaPipe MediaPipe Pose точніший (особливо по плечах і стегнах), але потребує більше ресурсів. Ми зазвичай рекомендуємо Vision для мінімалістичних фіч і MediaPipe для глибокого аналізу з корекційними рекомендаціями.
Приклад на Swift для Apple Vision
import Vision
import AVFoundation
class PostureAnalyzer: NSObject {
private var poseRequest = VNDetectHumanBodyPoseRequest()
func analyze(sampleBuffer: CMSampleBuffer) {
let handler = VNImageRequestHandler(cmSampleBuffer: sampleBuffer, orientation: .up)
do {
try handler.perform([poseRequest])
guard let observation = poseRequest.results?.first else { return }
processBodyPose(observation)
} catch {
print("Pose detection failed: \(error)")
}
}
private func processBodyPose(_ observation: VNHumanBodyPoseObservation) {
guard
let leftShoulder = try? observation.recognizedPoint(.leftShoulder),
let rightShoulder = try? observation.recognizedPoint(.rightShoulder),
let nose = try? observation.recognizedPoint(.nose),
leftShoulder.confidence > 0.6,
rightShoulder.confidence > 0.6
else { return }
// Кут нахилу плечової лінії
let shoulderDelta = leftShoulder.location.y - rightShoulder.location.y
let shoulderWidth = abs(leftShoulder.location.x - rightShoulder.location.x)
let shoulderTiltAngle = atan2(shoulderDelta, shoulderWidth) * 180 / .pi
// Зміщення голови від центру плечей
let shoulderMidX = (leftShoulder.location.x + rightShoulder.location.x) / 2
let headOffset = (nose.location.x - shoulderMidX) / shoulderWidth
postureObserver?(PostureMetrics(
shoulderTilt: shoulderTiltAngle,
headOffset: headOffset
))
}
}
confidence > 0.6 — поріг, нижче якого ключові точки вважаються ненадійними. Координати в Vision перевернуті по Y, при відображенні потрібно інвертувати.
Які метрики постави ми вимірюємо?
Хороша постава — це геометрія. Формалізували її в таблицю:
| Метрика | Норма | Як рахуємо |
|---|---|---|
| Нахил плечей | < 5° | atan2(Δy плечей, Δx плечей) |
| Forward head posture | < 15° | кут шия–вухо–плече (джерело: ергономічні дослідження) |
| Нахил тулуба | ±3° | вертикаль через плечі та стегна |
| Симетрія плечей по Y | < 3% висоти | різниця Y-координат плечей |
Forward head posture — найпоширеніша проблема. Вимірюємо через кут між вектором вухо→плече та вертикаллю. У Vision: leftEar → leftShoulder вектор, кут до осі Y екрана. При використанні MediaPipe (33 точки) додаються: кут ліктя, положення тазу, нахил голови вбік, викривлення хребта. Ці метрики корисні для спортивних та реабілітаційних додатків.
Як забезпечити real-time продуктивність?
Pose estimation на кожен кадр AVCaptureSession (30 fps) надто дорогий для старих пристроїв. Ми використовуємо throttling: запускаємо аналіз не на кожен кадр, а кожні 100 мс (10 fps). VNDetectHumanBodyPoseRequest виконується у фоновій черзі — VNImageRequestHandler.perform() синхронний, блокує потік.
private let analysisQueue = DispatchQueue(label: "posture.analysis", qos: .userInitiated)
private var lastAnalysisTime: CFTimeInterval = 0
func captureOutput(_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection) {
let now = CACurrentMediaTime()
guard now - lastAnalysisTime > 0.1 else { return } // 10 fps
lastAnalysisTime = now
analysisQueue.async {
self.analyze(sampleBuffer: sampleBuffer)
}
}
Додатково фільтруємо за впевненістю ключових точок (confidence > 0.6), щоб не витрачати ресурси на нечіткі кадри. На пристроях нижче iPhone 8 знижуємо частоту до 5 fps. В умовах низької освітленості похибка збільшується на 10-12%, але пороги впевненості відсікають брак. Отримайте консультацію з тонкого налаштування продуктивності під ваш цільовий девайс.
Зворотний зв'язок користувачеві
Два режими:
- Real-time overlay — лінії поверх камери (CAShapeLayer) показують відхилення. Наприклад, червоні лінії на плечах, якщо вони не рівні.
- Сесійний аналіз — користувач тримає телефон 30 секунд, отримує звіт за підсумками.
Тактильний відгук (хаптік) при сильному відхиленні, gamification (серії «хорошої постави»). Рекомендації пов'язують метрики з вправами: якщо forward head >20°, пропонуємо розтяжку грудних та зміцнення шиї з відео.
Процес роботи
- Аналіз вимог та вибір стеку (Vision/MediaPipe, iOS/Android/Flutter).
- Інтеграція моделі та реалізація метрик постави.
- UI: камера + overlay + екран звіту.
- Оптимізація продуктивності на реальних пристроях (A/B-тестування на 5+ моделях).
- Тестування точності (A/B на різних позах, 10+ сценаріїв).
- Публікація в App Store / Google Play з налаштуванням code signing та provisioning profile.
У роботу входить вихідний код модуля з коментарями на Swift/Kotlin/Flutter, документація з архітектури, API інтеграції та налаштування, допомога з публікацією (App Store Connect, TestFlight, Google Play Console), гарантія на код та безкоштовна підтримка 30 днів. Вартість розробки розраховується індивідуально після аналізу вимог. Замовте розробку модуля AI-аналізу постави під ключ.
Чому варто замовити у нас?
Наша команда має понад 5 років досвіду в мобільній розробці AI-рішень. Ми реалізували понад 20 проектів з pose estimation, включаючи додатки для спорту та реабілітації. Забезпечуємо високу якість коду, точність аналізу та дотримання термінів. Гарантуємо прозору комунікацію на всіх етапах. Зв'яжіться з нами для оцінки вашого проекту — отримайте консультацію вже сьогодні.







