Тяжелая атлетика

Создать новую сессию обработки видео

post

Этот эндпоинт позволяет администратору (или суб-администратору) загрузить видеофайл для обработки и создать новый ресурс "сессии" от имени другого пользователя. Сервер вернет session_id, который можно использовать для проверки статуса или получения деталей/результатов сессии.

Тело запроса (Multipart/Form-Data)

Необходимо указать следующие поля:

  • user_id (строка, обязательно): ID пользователя, от имени которого создается сессия. - video (файл, обязательно): Исходный видеофайл для обработки. - session_name (строка, опционально): Человекочитаемое название сессии. - exercise_name (строка, обязательно): Название упражнения. Допустимые значения: 'snatch', 'clean', 'clean_and_jerk'. - barbell_mass (строка, опционально): Масса штанги (числовая строка). По умолчанию 100 кг (или 220 фунтов). - body_joint_angles (массив строк, опционально): Список названий суставов через запятую (например, 'elbow, knee, ankle'). По умолчанию ['all'].

Структура ответа

При успехе (HTTP 200) ответ содержит JSON-объект с: - session_id (строка): Уникальный идентификатор созданной сессии. - title (строка): Название сессии (используется значение session_name или значение по умолчанию).

Рабочий процесс

  1. Отправить POST-запрос с multipart/form-data, содержащий обязательные поля user_id и video, а также опциональные поля. 2. Указать валидный API-KEY токен в заголовке Authorization. 3. Вызывающий должен иметь права администратора для создания сессии от имени другого пользователя. 4. При успехе сервер вернет session_id и title. 5. При ошибке (например, отсутствие полей, недостаток прав) вернется JSON-объект с ключом error.

Пример cURL:

     -H 'Content-Type: multipart/form-data' \
     -H 'Authorization: API-KEY <YOUR_ADMIN_TOKEN>' \
     -F 'user_id=someUserId123' \
     -F 'video=@/path/to/video.mp4' \
     -F 'session_name=Custom Session' \
     -F 'exercise_name=clean' \
     -F 'barbell_mass=30' \
     -F 'body_joint_angles=elbow, knee, ankle' \
     https://<backend-link>/weightlifting/management/sessions/
Authorizations
AuthorizationstringRequired

Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>

Body
user_idstringRequired

Обязательно. ID пользователя, для которого создается сессия (текстовое поле формы).

videostringRequired

Обязательно. Видеофайл для обработки (поле формы типа file).

session_namestringOptional

Опционально. Описательное название сессии (текстовое поле формы).

exercise_namestringRequired

Обязательно. Название упражнения. Допустимые значения: "snatch", "clean", "clean_and_jerk".

barbell_massstringOptional

Опционально. Масса штанги (числовая строка). По умолчанию 100 кг (или 220 фунтов).

body_joint_anglesarrayOptional

Опционально. Список названий суставов через запятую. Допустимые значения: ankle, knee, elbow, hip, shoulder. Пример: ankle,knee,hip

Responses
200

Сессия обработки видео успешно создана (HTTP 200).

application/json
session_idstringRequired

Уникальный идентификатор созданной сессии.

titlestringRequired

Название сессии (значение по умолчанию, если не указано).

post
/weightlifting/sessions/

Получить детали сессии тяжелой атлетики

get

Возвращает детали сессии тяжелой атлетики по указанному session_id. Данные включают URL исходного и обработанного видео, время создания, тип упражнения, информацию о пользователе, метрики, углы, метрики отчета и временные метки.

Параметры пути

  • session_id (строка, обязательно): Уникальный идентификатор сессии.

Параметры запроса

  • demo (булево, опционально): Установите true для получения демо-сессии вместо реальной.

Структура ответа (HTTP 200)

При успехе ответ содержит JSON-объект со следующими полями: - analyzed_video_url (строка, URI): Публичный URL обработанного видео. - video_url (строка, URI): Публичный URL исходного видео. - created_at (объект): Время создания: - date (строка): Дата в формате DD/MM/YYYY. - time (строка): Время в формате HH:MM AM/PM.

  • exercise (строка): Упражнение (например, 'snatch'). - user_name (строка): Имя пользователя, связанного с сессией. - activity (строка): Тип активности (должно быть 'Weightlifting'). - title (строка): Название сессии. - metrics (объект): Числовые метрики (например, скорость, мощность). - angles (объект): Углы, где каждый ключ соответствует массиву значений. - report_metrics (объект): Метрики отчета, где каждый ключ соответствует массиву значений. - all_timestamps (массив чисел): Временные метки данных сессии.

Обработка ошибок

  • 400 Неверный запрос: Неверные параметры. - 401 Не авторизован: Отсутствует или неверный токен. - 403 Запрещено: Недостаточно прав. - 404 Не найдено: Сессия не найдена или активность не 'Weightlifting'. - 500 Ошибка сервера: Непредвиденная ошибка.

Безопасность

Требуется валидный API-KEY токен в заголовке Authorization.

Authorizations
AuthorizationstringRequired

Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>

Path parameters
session_idanyRequired
Query parameters
demobooleanOptional

Установите true для получения демо-сессии вместо реальной.

Responses
200

Детали сессии успешно получены.

application/json
analyzed_video_urlstring · uriRequired

Публичный URL обработанного видео.

video_urlstring · uriRequired

Публичный URL исходного видео.

exercisestringRequired

Упражнение (например, 'snatch').

user_namestringRequired

Имя пользователя, связанного с сессией.

activitystringRequired

Тип активности (ожидается 'Weightlifting').

titlestringRequired

Название сессии.

all_timestampsnumber[]Required

Временные метки данных сессии.

get
/weightlifting/sessions/{session_id}/

Генерация комментариев анализа для сессии тяжелой атлетики

post

Генерация комментариев анализа

Создает отдельные GenAI-треды для каждой метрики анализа (мощность, сила, скорость штанги, углы суставов и т.д.) для получения лаконичных тренерских комментариев по каждой.

Пример использования: POST /weightlifting/sessions/{session_id}/recommendation/

Параметры:

  • session_id (строка, обязательный) – Идентификатор сессии для анализа.

  • measurement_system (query, опциональный)'metric' (по умолчанию) или 'imperial'; определяет единицы измерения в запросе.

Структура ответа: JSON-объект, сопоставляющий каждую метрику с ID соответствующего GenAI-треда.

Пример ответа:

  "power_output":           "thread_a12b34",
  "ground_reaction_force":  "thread_c56d78",
  "barbell_velocity":       "thread_e90f12",
  "hip_velocity":           "thread_g34h56",
  "shin_angle":             "thread_i78j90",
  "hip_height":             "thread_k12l34",
  "torso_angle":            "thread_m56n78",
  "hip_angle":              "thread_o90p12",
  "knee_angle":             "thread_q34r56",
  "bar_height":             "thread_s78t90",
  "barbell_trajectory":     "thread_u12v34",
  "vertical_shoulder_height":"thread_w56x78"
} ```

**Примечания:**
- `session_id` должен ссылаться на существующую сессию.
- У вызывающей стороны должны быть соответствующие права (действительный токен и тариф).
- Используйте возвращенные ID тредов для последующего получения комментариев.
Authorizations
AuthorizationstringRequired

Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>

Path parameters
session_idanyRequired
Query parameters
measurement_systemstring · enumOptional

Система измерений, используемая в запросах

Possible values:
Responses
post
/weightlifting/sessions/{session_id}/recommendation/

Экспорт данных сессии тяжелой атлетики

get

Возвращает данные сессии тяжелой атлетики из Firestore, включая ключевые точки, углы и временные метки. Активность сессии должна быть 'Weightlifting'.

Параметры пути

  • session_id (строка, обязательно): Уникальный идентификатор сессии.

Параметры запроса

  • demo (булево, опционально): Установите true для получения демо-сессии.

Структура ответа (HTTP 200)

При успехе ответ содержит JSON-объект с: - keypoints (объект): Ключевые точки, где каждый ключ соответствует массиву чисел. - angles (объект): Углы, где каждый ключ соответствует массиву чисел. - all_timestamps (массив чисел): Временные метки. - metrics (объект): Числовые метрики. - activity (строка): Активность (ожидается 'Weightlifting').

Обработка ошибок

  • 400 Неверный запрос: Неверные параметры. - 401 Не авторизован: Отсутствует или неверный токен. - 403 Запрещено: Недостаточно прав. - 404 Не найдено: Сессия не найдена или неверная активность. - 500 Ошибка сервера: Непредвиденная ошибка.

Безопасность

Требуется валидный API-KEY токен в заголовке Authorization.

Authorizations
AuthorizationstringRequired

Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>

Path parameters
session_idanyRequired
Query parameters
demobooleanOptional

Установите true для получения демо-сессии.

Responses
200

Данные сессии успешно получены.

application/json
all_timestampsnumber[]Required

Временные метки (в секундах).

activitystringRequired

Активность (ожидается 'Weightlifting').

get
/weightlifting/sessions/{session_id}/export/

Анализ подъема в тяжелой атлетике

post

Выполняет полный биомеханический анализ сессии тяжелой атлетики (рывок, толчок и др.).

Параметр пути

  • session_id (строка, обязательный) – Уникальный ID сессии тяжелой атлетики.

Параметр запроса (опциональный)

  • demo (логический) – Установите true для получения предварительно сгенерированного демо-анализа.

Структура ответа (HTTP 200)

Возвращает JSON-отчет с разделенными по кадрам метриками, временем фаз и информацией о пользователе.

  "exercise": "рывок",
  "key_metrics": {
    "power_output":           [ 2350, 2425, 2510, 2600, 2705 ],
    "ground_reaction_force":  [ 1120, 1180, 1215, 1260, 1300 ],
    "barbell_velocity":       [ 0.90, 1.05, 1.28, 1.55, 2.02 ]
  },
  "body_positioning": {
    "hip_velocity": [ 0.45, 0.52, 0.60 ],
    "shin_angle":   [ 75.0, 72.5, 70.2 ],
    "hip_height":   [ 450, 455, 468 ],
    "torso_angle":  [ 40.0, 38.5, 36.8 ]
  },
  "joint_angles": {
    "hip_angle":  [ 165, 159, 152 ],
    "knee_angle": [ 155, 147, 138 ]
  },
  "barbell_positioning": {
    "bar_height":              [ 120, 385, 610 ],
    "barbell_trajectory":      [ 0, -8, -2 ],
    "vertical_shoulder_height":[ 1380, 1400, 1440 ]
  },
  "phase_data": {
    "start_of_lifting":        { "image_url": "https://storage.googleapis.com..." },
    "first_pull_end":   { "image_url": "https://storage.googleapis.com..." }
  },
  "chart_data": {
    "setup":       { "start": 0,    "end": 536 },
    "first_pull":  { "start": 536,  "end": 952 }
  },
  "user_information": {
    "display_name": "Ахрор Жабборов",
    "age": 28,
    "weight": 75,
    "height": 178
  },
  "session_date": "18/05/2025",
  "comments": {}
} ```

### Коды ошибок
- **400 Bad Request** – Некорректные параметры.
- **401 Unauthorized** – Отсутствует/недействительный токен.
- **403 Forbidden** – У пользователя нет действующего платного тарифа.
- **404 Not Found** – Сессия не существует.
- **500 Internal Server Error** – Непредвиденная ошибка сервера.

### Безопасность
Требуется действительный токен API-KEY в заголовке `Authorization`.
Authorizations
AuthorizationstringRequired

Укажите ваш Bearer-токен (Firebase auth) в формате: Bearer <токен>

Path parameters
session_idanyRequired
Query parameters
demobooleanOptional

Установите true для получения демо-анализа вместо реального.

Responses
200

Отчет анализа подъема успешно сгенерирован.

application/json
exercisestringOptional
session_datestring · dateOptional
commentsobjectOptional
post
/weightlifting/sessions/{session_id}/lift-analysis/

Last updated

Was this helpful?