Musculation

Créer une nouvelle session de traitement vidéo

post

Cet endpoint permet à un administrateur (ou sous-admin) d'uploader un fichier vidéo pour traitement et de créer une nouvelle ressource "session" au nom d'un autre utilisateur. Le serveur renverra un session_id qui peut être utilisé pour interroger ou récupérer les détails/résultats de la session.

Corps de la requête (Multipart/Form-Data)

Vous devez fournir les champs suivants :

  • user_id (string, obligatoire) : L'ID de l'utilisateur pour lequel cette session est créée. - video (fichier, obligatoire) : Le fichier vidéo brut à traiter. - session_name (string, optionnel) : Un nom/lisible pour la session. - exercise_name (string, obligatoire) : Le nom de l'exercice. Choisissez parmi : 'snatch', 'clean', ou 'clean_and_jerk'. - barbell_mass (string, optionnel) : La masse de la barre utilisée (chaîne numérique). Par défaut 100 kg (ou 220 lb) si non fournie. - body_joint_angles (array[string], optionnel) : Liste séparée par des virgules de noms d'articulations (ex : 'elbow, knee, ankle'). Par défaut ['all'] si non fourni.

Structure de la réponse

En cas de succès (HTTP 200), la réponse est un objet JSON avec : - session_id (string) : Un identifiant unique pour la session créée. - title (string) : Le titre de la session (par défaut si session_name n'est pas fourni).

Workflow

  1. POST une requête multipart/form-data avec les champs obligatoires user_id et video, plus les champs optionnels. 2. Fournir un token API-KEY valide dans l'en-tête Authorization. 3. L'appelant doit avoir des privilèges admin pour créer une session pour un autre utilisateur. 4. Si réussi, le serveur répond avec session_id et title. 5. En cas d'erreur (champs manquants, permissions insuffisantes), un objet JSON avec une clé error est retourné.

Exemple 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=Session Personnalisée' \
     -F 'exercise_name=clean' \
     -F 'barbell_mass=30' \
     -F 'body_joint_angles=elbow, knee, ankle' \
     https://<backend-link>/weightlifting/management/sessions/
Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Corps
user_idstringRequis

Obligatoire. L'ID de l'utilisateur pour lequel cette session est créée (champ texte).

videostringRequis

Obligatoire. Le fichier vidéo brut à traiter (type de champ : fichier).

session_namestringOptionnel

Optionnel. Un nom descriptif pour la session (champ texte).

exercise_namestringRequis

Obligatoire. Le nom de l'exercice. Choisissez parmi : 'snatch', 'clean', ou 'clean_and_jerk'.

barbell_massstringOptionnel

Optionnel. La masse de la barre utilisée (chaîne numérique). Par défaut 100 kg (ou 220 lb) si non fournie.

body_joint_anglesarrayOptionnel

Optionnel. Liste séparée par des virgules de noms d'articulations. Valeurs disponibles : 'ankle', 'knee', 'elbow', 'hip', 'shoulder'. Exemple : ankle,knee,hip

Réponses
200

Session de traitement vidéo créée avec succès (HTTP 200).

application/json
session_idstringRequis

L'identifiant unique de la session créée.

titlestringRequis

Le titre de la session (par défaut si non fourni).

post
/weightlifting/sessions/

Récupérer les détails d'une session d'haltérophilie

get

Récupère les détails d'une session d'haltérophilie spécifiée par son session_id. Les données retournées incluent les URLs des vidéos originale et analysée, le timestamp de création, le type d'exercice, les informations utilisateur, les métriques, les angles, les métriques de rapport et les timestamps.

Paramètre de chemin

  • session_id (string, obligatoire) : L'identifiant unique de la session à récupérer.

Paramètre de requête

  • demo (boolean, optionnel) : Mettre à true pour récupérer une session démo pré-générée.

Structure de la réponse (HTTP 200)

En cas de succès, la réponse est un objet JSON avec : - analyzed_video_url (string, URI) : URL publique de la vidéo analysée. - video_url (string, URI) : URL publique de la vidéo originale. - created_at (object) : Un dictionnaire avec : - date (string) : Date de création au format DD/MM/YYYY. - time (string) : Heure de création au format HH:MM AM/PM.

  • exercise (string) : L'exercice effectué (ex : 'snatch'). - user_name (string) : Le nom de l'utilisateur associé à la session. - activity (string) : Le type d'activité (doit être 'Weightlifting'). - title (string) : Le titre de la session. - metrics (object) : Dictionnaire de valeurs métriques numériques (ex : vitesse, puissance). - angles (object) : Dictionnaire où chaque clé correspond à un tableau de valeurs d'angles. - report_metrics (object) : Dictionnaire de métriques spécifiques au rapport. - all_timestamps (array[number]) : Tableau de timestamps pour les données de session.

Gestion des erreurs

  • 400 Requête incorrecte : Paramètres invalides (ex : UID admin invalide). - 401 Non autorisé : Token d'accès manquant ou invalide. - 403 Interdit : Privilèges insuffisants. - 404 Non trouvé : Session non trouvée ou activité non valide. - 500 Erreur interne du serveur : Erreur inattendue.

Sécurité

Un token API-KEY valide doit être fourni dans l'en-tête Authorization.

Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Paramètres de chemin
session_idanyRequis
Paramètres de requête
demobooleanOptionnel

Mettre à true pour récupérer une session démo pré-générée au lieu d'une réelle.

Réponses
200

Détails de la session d'haltérophilie récupérés avec succès.

application/json
analyzed_video_urlstring · uriRequis

URL publique de la vidéo analysée.

video_urlstring · uriRequis

URL publique de la vidéo originale.

exercisestringRequis

L'exercice effectué (ex : 'snatch').

user_namestringRequis

Nom de l'utilisateur associé à la session.

activitystringRequis

Type d'activité, attendu 'Weightlifting'.

titlestringRequis

Le titre de la session.

all_timestampsnumber[]Requis

Liste de timestamps correspondant aux données de session.

get
/weightlifting/sessions/{session_id}/

Exporter les données d'une session d'haltérophilie

get

Récupère les données d'une session d'haltérophilie depuis Firestore, incluant les points clés, les angles et les timestamps. L'activité de la session doit être 'Weightlifting'.

Paramètre de chemin

  • session_id (string, obligatoire) : L'identifiant unique de la session à exporter.

Paramètre de requête

  • demo (boolean, optionnel) : Mettre à true pour récupérer une session démo pré-générée.

Structure de la réponse (HTTP 200)

En cas de succès, la réponse est un objet JSON contenant : - keypoints (object) : Dictionnaire de points clés (ex : 'lknev', 'lknex'). - angles (object) : Dictionnaire de mesures d'angles (ex : 'lank_angle'). - all_timestamps (array[number]) : Tableau de timestamps pour les données. - metrics (object) : Dictionnaire de valeurs métriques numériques. - activity (string) : L'activité de la session (doit être 'Weightlifting').

Gestion des erreurs

  • 400 Requête incorrecte : Paramètres invalides (ex : erreur UID admin). - 401 Non autorisé : Token manquant ou invalide. - 403 Interdit : Privilèges insuffisants. - 404 Non trouvé : Session non trouvée ou activité invalide. - 500 Erreur interne du serveur : Erreur inattendue.

Sécurité

Un token API-KEY valide doit être fourni dans l'en-tête Authorization.

Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Paramètres de chemin
session_idanyRequis
Paramètres de requête
demobooleanOptionnel

Mettre à true pour récupérer une session démo pré-générée au lieu d'une réelle.

Réponses
200

Données de session d'haltérophilie récupérées avec succès.

application/json
all_timestampsnumber[]Requis

Tableau de timestamps (en secondes) pour les données de session.

activitystringRequis

L'activité de la session (doit être 'Weightlifting').

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

Analyser un mouvement d'haltérophilie

post

Exécute une analyse biomécanique complète d'une session d'haltérophilie (snatch, clean, etc.).

Paramètre de chemin

  • session_id (string, obligatoire) – ID unique de la session d'haltérophilie.

Paramètre de requête (Optionnel)

  • demo (boolean) – Mettre à true pour retourner une analyse de mouvement démo pré-générée.

Structure de la réponse (HTTP 200)

Retourne un rapport JSON contenant des métriques par section, par frame, des timings de phase et des infos utilisateur.

  "exercise": "snatch",
  "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": "Ahror Jabborov",
    "age": 28,
    "weight": 75,
    "height": 178
  },
  "session_date": "18/05/2025",
  "comments": {}
} ```
### Codes d'erreur
- **400 Requête incorrecte** – Paramètres invalides. - **401 Non autorisé** – Token manquant/invalide. - **403 Interdit** – Utilisateur sans abonnement valide. - **404 Non trouvé** – Session inexistante. - **500 Erreur interne du serveur** – Échec inattendu.
### Sécurité
Requiert un token API-KEY valide dans l'en-tête `Authorization`.
Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Paramètres de chemin
session_idanyRequis
Paramètres de requête
demobooleanOptionnel

Mettre à true pour récupérer l'analyse de mouvement démo pré-générée au lieu d'une réelle.

Réponses
200

Rapport d'analyse de mouvement généré avec succès.

application/json
exercisestringOptionnel
session_datestring · dateOptionnel
commentsobjectOptionnel
post
/weightlifting/sessions/{session_id}/lift-analysis/

Générer des fils de commentaires d'analyse pour une session d'haltérophilie

post

Générer des fils de commentaires d'analyse

Crée un fil GenAI par métrique d'analyse (puissance, force, vitesse de la barre, angles articulaires, etc.) afin que l'assistant puisse retourner des commentaires concis de coaching pour chacune. Exemple d'utilisation : POST /weightlifting/sessions/{session_id}/recommendation/ Paramètres :

  • session_id (string, obligatoire) - Identifiant de la session à analyser.

  • measurement_system (query, optionnel) - 'metric' (par défaut) ou 'imperial'; détermine les unités intégrées dans chaque prompt. Structure de réponse : Un objet JSON associant chaque métrique demandée à l'ID du fil GenAI créé. Exemple de réponse :

  "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"
} ```
**Notes :**
- `session_id` doit référencer une session existante. - L'appelant doit avoir les permissions appropriées (token valide & abonnement payant). - Utilisez les IDs de fil retournés pour récupérer ultérieurement les commentaires générés.
Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Paramètres de chemin
session_idanyRequis
Paramètres de requête
measurement_systemstring · enumOptionnel

Système de mesure utilisé dans les prompts

Valeurs possibles:
Réponses
post
/weightlifting/sessions/{session_id}/recommendation/

Obtenir le résumé d'une session d'haltérophilie

get

Récupère un résumé détaillé d'une session via son session_id, combinant métriques quantitatives et commentaires GenAI optionnels. Mode d'emploi : 1. Envoyez une requête GET avec le session_id dans l'URL. 2. La réponse contient un objet JSON structuré (voir ci-dessous). Paramètre de requête : - demo (booléen, optionnel) - À true pour un résumé de démo. Structure de réponse : - summary_text (object, optionnel) - Commentaires GenAI : - velocity - Analyse de vitesse. - power - Observations sur la puissance. - stability - Notes sur la stabilité. - final_summary - Synthèse globale.

  • exercise_type (string) - Type d'exercice (ex: Snatch). - velocity (object) - Vitesse de barre (min/max/valeurs en m/s). - power (object) - Force (N) et puissance (W). - stability (object) - Durée, hauteur et trajectoire de barre. - user_information (object) - Profil utilisateur. - session_date (string) - Date de session (ex: 07/04/2025). Note : summary_text n'apparaît qu'après génération des commentaires.

Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Paramètres de chemin
session_idanyRequis
Paramètres de requête
demobooleanOptionnel

À true pour récupérer un résumé de démo pré-généré.

Réponses
200

Résumé récupéré avec succès

application/json
exercise_typestringRequis

Type d'exercice effectué.

session_datestringRequis

Date de session (ex: '07/04/2025').

get
/weightlifting/sessions/{session_id}/summary/

Générer un résumé pour une session d'haltérophilie

post

Générer des fils de résumé

Cet endpoint génère des fils de résumé pour une session donnée, basés sur des blocs prédéfinis et des métriques. Exemple d'utilisation : Envoyez une requête POST à /weightlifting/sessions/{session_id}/summary/{session_id} est l'identifiant unique de la session. Paramètres : - session_id (string, obligatoire): L'identifiant unique de la session. Structure de réponse : Un objet JSON associant chaque bloc à son ID de fil GenAI. Exemple de réponse : json { "velocity": "thread_thread_id", "power": "thread_thread_id", "stability": "thread_thread_id", "final_summary": "thread_thread_id", } Notes : - Vérifiez que le session_id est valide. - L'utilisateur doit avoir les permissions nécessaires.

Autorisations
AuthorizationstringRequis

Entrez votre token Bearer (authentification Firebase) au format : Bearer

Paramètres de chemin
session_idanyRequis
Paramètres de requête
measurement_systemstring · enumOptionnel

Système de mesure : 'metric' ou 'imperial'

Valeurs possibles:
Réponses
post
/weightlifting/sessions/{session_id}/summary/

Mis à jour

Ce contenu vous a-t-il été utile ?