PING-35 est une plateforme de support clinique orientée rééducation et suivi patient. Le projet combine des services d'analyse posturale (vision/médiapipe et / ou YOLO), de transcription audio, d'extraction d'entités nommées (NER) à partir de textes médicaux, et de génération automatique de documents (BDK au format PDF).
- Fournir des outils automatisés pour aider les kinésithérapeutes à analyser la posture et la mobilisation des patients.
- Transcrire des enregistrements audio de consultations pour en faciliter l'indexation et l'analyse.
- Extraire des entités cliniques (symptômes, diagnostics, traitements, dates) grâce à un module NER dédié.
- Générer un document de synthèse (BDK) exportable en PDF prêt à l'impression ou à l'archivage.
-
Analyse posturale
- Module d'upload et d'analyse de poses (méthodes basées sur MediaPipe et/ou YOLO selon les scripts présents dans
testModels/etapi/app/utils/mp_utils.py). - Extraction de repères articulaires, angles et mesures utiles pour le bilan.
- Module d'upload et d'analyse de poses (méthodes basées sur MediaPipe et/ou YOLO selon les scripts présents dans
-
Transcription
- Service de transcription audio (API disponible dans
api/app2/servicesetapi/app2/routers) permettant de convertir des enregistrements en texte.
- Service de transcription audio (API disponible dans
-
NER (Reconnaissance d'entités nommées)
- Modèle et service NER pour extraire des entités médicales depuis le contenu textuel de la transcription ou des notes (voir
api/app/services/ner_service.pyetapi/app/models/ner.py).
- Modèle et service NER pour extraire des entités médicales depuis le contenu textuel de la transcription ou des notes (voir
-
Génération PDF pour BDK
- Génére un document de type BDK (bilan diagnostic kiné) à partir des données structurées, puis le convertit en PDF. Le template HTML se trouve dans
api/app/utils/bdk.html.
- Génére un document de type BDK (bilan diagnostic kiné) à partir des données structurées, puis le convertit en PDF. Le template HTML se trouve dans
Racine
docker-compose.yml: orchestration multi-conteneurs (API + frontend + base de données quand présente).
API
api/: conteneur/api principal contenant deux applications Python :app/: implémentation principale (FastAPI) avec les routes, services et modèles.app/main.py: point d'entrée principal (uvicorn/FastAPI).app/routers/: endpoints pourkine,ner,patient,bilan,consultation,upload_pose.app/services/: logique métier pour chaque domaine (bilan_service, kine_service, ner_service, patient_service, ...).app/utils/bdk.html: template HTML utilisé pour générer le PDF du BDK.
app2/: second service orienté transcription et workloads complémentaires (modèles ou scripts spécifiques à la transcription).
Frontend
frontend/: application React (sources dansfrontend/src) qui sert l'interface web côté client.
Données
data/: répertoire de stockage local (base de données embarquée, journaux, fichiers média, etc.) utilisé en local ou monté dans les conteneurs Docker.
Autres
init-scripts/: scripts d'initialisation de la base (ex:init-database.js).testModels/: notebooks et scripts de test pour Mediapipe, YOLO, etc.
Prérequis
- Docker & Docker Compose (recommandé pour une mise en route rapide).
- (Optionnel) Python 3.10+ et Node.js si vous souhaitez lancer les services en local sans Docker.
Avec Docker Compose (tout le projet)
- Depuis la racine du projet :
- Démarrer les services :
- Utilisez le fichier
docker-compose.ymlà la racine (ouapi/docker-compose.ymlpour uniquement l'API).
- Utilisez le fichier
- Les services exposent typiquement l'API et le frontend sur des ports configurés dans le compose.
- Démarrer les services :
Développement local sans Docker (API)
- Créer un environnement virtuel Python et installer les dépendances :
pip install -r api/requirements.txtetpip install -r api/app/requirements.txtsi nécessaire.
- Lancer l'API principale :
- depuis
api/app:uvicorn main:app --reload --host 0.0.0.0 --port 8000.
- depuis
- Lancer le frontend :
- depuis
frontend/:npm installpuisnpm start.
- depuis
Les routes sont organisées par module. Voici quelques endpoints exposés (exemples) :
- POST /upload-pose : upload d'une vidéo/image pour analyse posturale (dans
app/routers/upload_pose.py). - POST /transcription : soumet un fichier audio pour transcription (dans
app2/routersouapp/routersselon le point d'entrée utilisé). - POST /ner/extract : envoie un texte et reçoit des entités extraites (dans
app/routers/ner.py). - POST /bilan/generate : génère un BDK au format HTML puis PDF à partir des données du bilan.
Pour voir la liste complète des routes, lancer le serveur et ouvrir la documentation interactive FastAPI à /docs.
- Enregistrer une vidéo ou prendre une série d'images du patient.
- Envoyer le fichier via l'endpoint d'upload pour l'analyse posturale.
- Lancer/consulter la transcription d'une consultation audio.
- Exécuter le module NER sur la transcription pour extraire les entités pertinentes.
- Regrouper les résultats (mesures posturales, transcription annotée, observations) et demander la génération du BDK en PDF.
testModels/contient des scripts de test pour Mediapipe et YOLO. Ils servent de base pour calibrer et valider les algorithmes d'analyse posturale.
- Transcription (OpenAI Whisper)
- Emplacement :
api/app2/models/transcription.py(classeTranscriptionModel). - Bibliothèque :
openai-whisper(importée viaimport whisper). - Modèle chargé :
whisper.load_model("turbo")tel qu'indiqué dans le code. - Remarques et recommandations :
- Selon la version officielle de Whisper, les checkpoints standard sont
tiny,base,small,medium,large(ou variantes). L'identifiantturbopeut être spécifique à un fork ou une version particulière de la librairie ; vérifiez que la version installée deopenai-whispersupporte bien `
- Selon la version officielle de Whisper, les checkpoints standard sont
- Emplacement :
api/app/utils/bdk.html: template HTML pour la génération du PDF du BDK.api/app/routers/upload_pose.py: point d'entrée pour l'upload et l'analyse des poses.api/app/services/ner_service.py: logique pour l'extraction d'entités nommées.api/app2/services/transcription_service.py: logique de transcription.