API Backend IA de Trio-Signo
Le backend IA sera bientôt fusionné avec le backend principal, ceux-ci seront donc prochainement mis hors service.
Ce document décrit en détail comment utiliser l’API pour communiquer avec la partie backend IA de Trio-Signo.
Informations
Cette API suit la convention REST.
Toutes les requêtes et réponses sont au format JSON. Aucun autre format n’est pris en charge pour le moment.
En-têtes et Authentification
Le système d’en-têtes et d’authentification n’a pas encore été défini. Il n’est donc pas nécessaire d’ajouter quoi que ce soit pour accéder aux points de terminaison (endpoints) de cette API.
Appels API
GET
POST
DELETE
GET - Ping
URL : {root_url}/ping
Description
Point de terminaison simple permettant de vérifier si le serveur est actif.
Requête
En-têtes
Aucun
Corps
Aucun
Réponse
200
{
"message": "pong"
}
Exemple
curl -X GET "{root_url}/ping"
GET - Télécharger un modèle de reconnaissance
URL : {root_url}/get-sign_recognizer-model/{model-name}
Description
Permet de télécharger un modèle.
Requête
En-têtes
Aucun
Corps
Aucun
Réponse
200
Fichier zip contenant :
model.zip/
|-> model.onnx # Poids du modèle
'-> model.json # Informations du modèle
404
{
"message": "Aucun modèle trouvé"
}
Exemple
curl -X GET "{root_url}/get-sign_recognizer-model/alphabet"
POST - Reconnaître une lettre depuis une image
URL : {root_url}/get-alphabet
Description
Reçoit une image et retourne la lettre qu'elle représente en LSF (Langue des Signes Française), ou null
si aucune lettre n’est reconnue.
IMPORTANT : ce point de terminaison conserve les images précédentes pour permettre la reconnaissance sur une séquence (vidéo). Il est donc obligatoire d’appeler le point get-alphabet-end une fois la session terminée.
Requête
En-têtes
{
"Content-Type": "multipart/form-data"
}
Corps
Format form-data avec les paramètres suivants :
Clé | Type | Description |
---|---|---|
file | Fichier (.jpg ou .png) | Image à analyser |
Réponse
200
{
"message": "A"
}
Ou si aucune main n’est détectée :
{
"message": null
}
400
Si le corps ou ses valeurs sont incorrects.
{
"message": "Message d’erreur"
}
Exemple
curl -X POST "{root_url}/get-alphabet" \
-H "Content-Type: multipart/form-data" \
-F "file=@B.jpg"
POST - Reconnaître une lettre depuis des points 3D
URL : {root_url}/get-alphabet2
Description
Attend les points 3D générés par le modèle MediaPipe HandLandmarker
.
IMPORTANT : ce point de terminaison garde les points précédents en mémoire pour reconnaître des signes en mouvement. Il faut obligatoirement appeler get-alphabet-end pour clore la session.
Requête
En-têtes
{
"Content-Type": "application/json"
}
Corps
Exemple de format JSON : chaque champ peut être un tableau de 3 flottants ou null
.
{
"l_hand_position": [
0.8998612761497498,
0.47253280878067017,
-3.850680911909876e-07
],
"l_wrist": [
0.00806891918182373,
0.07892453670501709,
0.015518805012106895
],
"l_thumb_cmc": [
-0.0202289130538702,
0.060800254344940186,
0.0035137240774929523
],
"l_thumb_mcp": [
-0.046166982501745224,
0.043004438281059265,
0.010012363083660603
],
"l_thumb_ip": [
-0.07757717370986938,
0.025659386068582535,
0.016046881675720215
],
"l_thumb_tip": [
-0.10497097671031952,
0.009791262447834015,
0.03523814305663109
],
"l_index_mcp": [
-0.02864322066307068,
-0.0031441221944987774,
0.006585570052266121
],
"l_index_pip": [
-0.03236301615834236,
-0.010864194482564926,
-0.013661608099937439
],
"l_index_dip": [
-0.030568867921829224,
-0.0006146137602627277,
-0.015350844711065292
],
"l_index_tip": [
-0.02689363621175289,
0.00804886780679226,
-0.0029758629389107227
],
"l_middle_mcp": [
-0.00560837984085083,
-0.004359850659966469,
0.0058035170659422874
],
"l_middle_pip": [
-0.0106519078835845,
-0.01468548271805048,
-0.02581506222486496
],
"l_middle_dip": [
-0.01916278339922428,
0.010006235912442207,
-0.033204495906829834
],
"l_middle_tip": [
-0.0093716811388731,
0.011128885671496391,
-0.004174341913312674
],
"l_ring_mcp": [
0.01868732087314129,
-0.0011302419006824493,
-0.0037493272684514523
],
"l_ring_pip": [
0.005036872811615467,
-0.0063772136345505714,
-0.027042007073760033
],
"l_ring_dip": [
-0.0022493936121463776,
0.013661570847034454,
-0.03136857599020004
],
"l_ring_tip": [
0.01045067235827446,
0.018018584698438644,
-0.0101028922945261
],
"l_pinky_mcp": [
0.03163111209869385,
0.010812398977577686,
-0.009892250411212444
],
"l_pinky_pip": [
0.026150468736886978,
0.0005377912893891335,
-0.028811253607273102
],
"l_pinky_dip": [
0.01693340763449669,
0.010664019733667374,
-0.034755412489175797
],
"l_pinky_tip": [
0.020904961973428726,
0.021468045189976692,
-0.027099382132291794
],
"r_hand_position": null,
"r_wrist": null,
"r_thumb_cmc": null,
"r_thumb_mcp": null,
"r_thumb_ip": null,
"r_thumb_tip": null,
"r_index_mcp": null,
"r_index_pip": null,
"r_index_dip": null,
"r_index_tip": null,
"r_middle_mcp": null,
"r_middle_pip": null,
"r_middle_dip": null,
"r_middle_tip": null,
"r_ring_mcp": null,
"r_ring_pip": null,
"r_ring_dip": null,
"r_ring_tip": null,
"r_pinky_mcp": null,
"r_pinky_pip": null,
"r_pinky_dip": null,
"r_pinky_tip": null,
"l_hand_velocity": null,
"r_hand_velocity": null
}
Réponse
200
{
"message": "A"
}
Ou si aucune main n’est détectée :
{
"message": null
}
400
Si le corps ou ses valeurs sont incorrects.
{
"message": "Message d’erreur"
}
Exemple
curl -X POST "{root_url}/get-alphabet2" \
-H "Content-Type: application/json" \
-d "votre JSON"
DELETE - Fin de session de reconnaissance
URL : {root_url}/get-alphabet-end
Description
Nettoie l’historique des images/points après l’utilisation de l’endpoint get-alphabet ou get-alphabet2.
Requête
En-têtes
{
"Content-Type": "application/json"
}
Corps
Aucun
Réponse
200
{
"message": "Historique supprimé"
}
400
Si la requête est invalide (par exemple, mauvaise IP).
{
"message": "Adresse IP invalide"
}
Exemple
curl -X DELETE "{root_url}/get-alphabet" \
-H "Content-Type: multipart/form-data"