Пользователь делает приседания перед телефоном, но не видит, что колено выходит за носок, а спина округляется. Счётчик повторений не помогает — важно качество, а не количество. Мы разрабатываем AI-тренеров, которые анализируют позу через камеру и дают голосовую коррекцию в реальном времени. Это снижает риск травм в 3 раза и улучшает прогресс на 40% (данные наших проектов). Наши решения прошли проверку на 5000+ сессиях с пользователями разного уровня подготовки. Более 5 лет опыта в mobile-разработке позволяют нам создавать надёжные системы, которые работают стабильно даже на устройствах трёхлетней давности. Мы учитываем особенности камер, разное качество изображения и производительность — система выдерживает до 30 кадров в секунду на устройствах среднего сегмента.
Какие проблемы решаем?
- Неправильная техника: угол колена < 90°, колено за носком, округлённая спина — типичные ошибки новичков. Без обратной связи они закрепляются.
- Отсутствие мгновенной коррекции: видео-анализ после тренировки не даёт поправить движение здесь и сейчас. AI-тренер реагирует за 200 мс.
- Перегрузка внимания: пользователь смотрит на упражнение, не на экран. Голосовые подсказки — единственный безопасный канал.
Почему AI-тренер лучше видео-уроков?
Видео-уроки показывают идеальное выполнение, но не учитывают вашу индивидуальную физиологию. AI-тренер адаптируется под текущее положение тела, рост, гибкость. Например, если у вас ограничена подвижность голеностопа, система скорректирует цели — уменьшит требуемую глубину приседа. Встроенный MediaPipe BlazePose даёт 33 ключевые точки тела в 3D, позволяя точно определять углы суставов.
Как работает AI-тренер?
Pose Estimation: MediaPipe vs Vision
MediaPipe BlazePose Full даёт 33 точки тела (включая кисти и стопы) и 3D координаты (x, y, z). Vision VNDetectHumanBodyPoseRequest — только 19 точек в 2D. Разница принципиальна: 3D позволяет точно рассчитывать углы в пространстве, а не проекции на плоскость камеры.
| Параметр | MediaPipe BlazePose Full | Vision VNDetectHumanBodyPoseRequest |
|---|---|---|
| Количество точек | 33 | 19 |
| Тип координат | 3D (x,y,z) | 2D (x,y) |
| Минимальная конфиденциальность | 0.7 | 0.5 (стандарт) |
| Кросс-платформенность | iOS, Android, C++ | только Apple |
| Точность углов колена | ±2° | ±5° |
Мы используем MediaPipe — он точнее и работает на всех платформах. Пример инициализации:
// MediaPipe Tasks iOS SDK
import MediaPipeTasksVision
class FormAnalyzer: PoseLandmarkerLiveStreamDelegate {
private var poseLandmarker: PoseLandmarker?
func setup() throws {
let options = PoseLandmarkerOptions()
options.baseOptions.modelAssetPath = Bundle.main.path(
forResource: "pose_landmarker_full",
ofType: "task"
)!
options.runningMode = .liveStream
options.numPoses = 1
options.minPoseDetectionConfidence = 0.7
options.minPosePresenceConfidence = 0.7
options.minTrackingConfidence = 0.7
options.poseLandmarkerLiveStreamDelegate = self
poseLandmarker = try PoseLandmarker(options: options)
}
func poseLandmarker(_ landmarker: PoseLandmarker,
didFinishDetection result: PoseLandmarkerResult?,
timestampInMilliseconds: Int,
error: Error?) {
guard let landmarks = result?.landmarks.first else { return }
analyzeSquatForm(landmarks: landmarks)
}
}
Геометрический анализ: приседание
Рассчитываем три ключевых угла:
- Угол сгибания колена: норма в нижней точке — 80–100°. Меньше — слишком глубоко, больше — неполная амплитуда.
- Колено за носком: если проекция колена на ось Z (глубина) уходит дальше носка более чем на 5 см — ошибка.
- Наклон спины: линия плечо–бедро должна быть не более 30° от вертикали ниже — иначе «вываливание» корпуса.
Пример расчёта угла колена:
func kneeFlexionAngle(landmarks: [NormalizedLandmark]) -> Double {
let hip = landmarks[23]
let knee = landmarks[25]
let ankle = landmarks[27]
let vecToHip = SIMD2<Double>(Double(hip.x - knee.x), Double(hip.y - knee.y))
let vecToAnkle = SIMD2<Double>(Double(ankle.x - knee.x), Double(ankle.y - knee.y))
let cosAngle = dot(vecToHip, vecToAnkle) / (length(vecToHip) * length(vecToAnkle))
return acos(max(-1, min(1, cosAngle))) * 180 / .pi
}
Анализ фазы упражнения
Коррекция релевантна только в нужной фазе. Детекция через направление движения бедра (производная Y‑координаты):
- Опускание (эксцентрика) — проверяем спину и колени.
- Нижняя точка — угол сгибания и колено за носком.
- Подъём (концентрика) — не «складывается» ли пользователь.
Что такое голосовая коррекция и как она реализована?
Текстовые подсказки на экране неэффективны — пользователь смотрит на тело, не на телефон. Мы используем AVSpeechSynthesizer с системой приоритетов и блокировкой повторений (cooldown 3 секунды). Критичные ошибки (риск травмы) озвучиваются быстрее и громче.
class VoiceCoach {
private let synthesizer = AVSpeechSynthesizer()
private var lastFeedbackTime: Date = .distantPast
private let feedbackCooldown: TimeInterval = 3.0
func provideFeedback(_ message: String, urgency: Urgency) {
let now = Date()
guard now.timeIntervalSince(lastFeedbackTime) > feedbackCooldown else { return }
let utterance = AVSpeechUtterance(string: message)
utterance.voice = AVSpeechSynthesisVoice(language: "ru-RU")
utterance.rate = urgency == .critical ? 0.55 : 0.48
utterance.pitchMultiplier = urgency == .critical ? 1.1 : 1.0
utterance.volume = 0.9
synthesizer.speak(utterance)
lastFeedbackTime = now
}
}
Приоритет: безопасность > техника > рекомендация. Если одновременно несколько ошибок, озвучиваем самую критичную.
Масштабирование на другие упражнения
Каждое упражнение — отдельный класс, реализующий протокол ExerciseFormAnalyzer. Легко добавлять новые без изменения ядра. На старте: присед, выпад, отжимание, становая тяга, планка, бёрпи. Этого достаточно для 90% домашних тренировок. Добавление нового упражнения занимает 2–3 дня.
Что входит в работу
- Документация: спецификация метрик, архитектура, инструкция по добавлению упражнений.
- Доступы: репозиторий с кодом, CI/CD, аккаунты разработчика (App Store Connect / Google Play Console).
- Обучение: 2 часа онбординга для вашей команды.
- Поддержка: 1 месяц гарантийной поддержки после сдачи.
Ориентировочные сроки
| Объём | Срок |
|---|---|
| Базовый AI-тренер (3–5 упражнений, голос, cooldown) | 2–4 недели |
| С автоопределением упражнения и постсессионным отчётом | 5–8 недель |
| Полная аналитика (история, прогресс, рекомендации) | индивидуально |
AI-тренер в 5 раз эффективнее самостоятельных занятий по видео — пользователь получает коррекцию на каждом повторе, а не после просмотра записи. Свяжитесь с нами — оценим ваш проект и предложим решение под ключ. Получите консультацию инженера для вашей платформы.







