Реализация AI-анализа осанки через камеру мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

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

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

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

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

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

Этапы разработки

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация AI-анализа осанки через камеру мобильного приложения

Фронтальная камера смартфона снимает пользователя, pose estimation модель выдаёт 17–33 ключевых точки скелета в реальном времени. Дальше — геометрия: углы между суставами, смещение центра масс, наклон плечевой линии. Это и есть анализ осанки.

Pose Estimation: выбор модели

Два основных пути на iOS — Apple Vision framework с VNDetectHumanBodyPoseRequest, и MediaPipe Pose (BlazePose). На Android — ML Kit Pose Detection или тот же MediaPipe.

Apple Vision — нативный выбор для iOS

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 — фильтр уверенности ключевой точки. Ниже — игнорируем, иначе модель «галлюцинирует» точки за кадром.

VNDetectHumanBodyPoseRequest возвращает 19 точек в нормализованных координатах [0, 1]. Координаты в Vision перевёрнуты по Y (0 = низ), а координаты UIView — 0 = верх. При отображении на экране — инвертировать Y.

MediaPipe Pose — кроссплатформенный вариант

MediaPipe BlazePose даёт 33 landmark точки включая лицо и кисти. Точнее Vision по плечам и бёдрам, но тяжелее по ресурсам. На мобиле используем Lite или Full модель (Heavy — только если устройство мощное и нет ограничений по battery).

// iOS через MediaPipe Tasks SDK
import MediaPipeTasksVision

let poseLandmarker = try PoseLandmarker(options: {
    let options = PoseLandmarkerOptions()
    options.runningMode = .liveStream
    options.numPoses = 1
    options.minPoseDetectionConfidence = 0.5
    options.minPosePresenceConfidence = 0.5
    options.poseLandmarkerLiveStreamDelegate = self
    return options
}())

Метрики осанки: что измеряем

Хорошая осанка — это геометрия, и её можно формализовать:

Метрика Норма Как считаем
Наклон плеч < 5° atan2(Δy плеч, Δx плеч)
Forward head posture < 15° угол шея–ухо–плечо
Наклон туловища ±3° вертикаль через плечи и бёдра
Симметрия плеч по Y < 3% высоты разница Y-координат плеч

Forward head posture — самая частая проблема у пользователей за компьютером. Измеряем через угол между вектором ухо→плечо и вертикалью. В Vision: leftEar → leftShoulder вектор, угол к оси Y экрана.

Real-time анализ: производительность

Pose estimation на каждый кадр AVCaptureSession (30 fps) — слишком дорого на старых устройствах. Стратегии:

  • Запускаем анализ не на каждый кадр, а через CMSampleBuffer.sampleBufferCallbackQueue с throttling: каждые 100ms (10 fps анализа)
  • VNDetectHumanBodyPoseRequest — выполняем на фоновой очереди, не main thread. 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)
    }
}

Обратная связь пользователю

Два режима:

  1. Real-time overlay — линии поверх камеры показывают отклонения (красные линии = плечи не ровно). ARKit ARSCNView или просто CAShapeLayer поверх preview layer
  2. Сессионный анализ — пользователь держит телефон 30 секунд, получает отчёт по итогам сессии

Звуковой / тактильный сигнал при отклонении + таймер держания позы. Gamification: streak хорошей осанки за день.

Для коррекционных рекомендаций — связываем метрики с конкретными упражнениями. Forward head > 20°: упражнения на растяжку грудных мышц и укрепление задних мышц шеи — с иллюстрациями и видео.

Процесс работы

Выбор и интеграция pose estimation (Vision vs MediaPipe по требованиям). Реализация геометрических метрик осанки. Throttling и оптимизация производительности на реальных устройствах. UI: камера + overlay + отчёт. Библиотека коррекционных рекомендаций.

Ориентиры по срокам

Real-time анализ с базовыми метриками и overlay — 1–2 недели. Полное приложение с историей сессий, персональными рекомендациями и gamification — 2–4 недели.