🚀 Démarrage rapide
Base URL
http://localhost:5000
🔑 Authentification
Toutes les requêtes API nécessitent le header suivant :
x-api-key: APK-JCONSULT-DEV
⚠️ IMPORTANT - Clé API par défaut
La clé APK-JCONSULT-DEV est pour le développement uniquement.
En production, vous DEVEZ utiliser une clé sécurisée personnalisée !
🎯 Exemple Python minimal
import requests
# Configuration
url = "http://localhost:5000/api/add"
headers = {"x-api-key": "APK-JCONSULT-DEV"}
# Enregistrer un visage
files = {"image": open("photo.jpg", "rb")}
data = {"nom": "Jean Dupont"}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
# {"success": true, "message": "Jean Dupont ajouté (Visage)."}
🎯 Exemple cURL
curl -X POST http://localhost:5000/api/add \
-H "x-api-key: APK-JCONSULT-DEV" \
-F "nom=Jean Dupont" \
-F "image=@photo.jpg"
📊 Stack Technique
| Composant |
Technologie |
Version |
Rôle |
| Framework Web |
Flask |
2.3.2 |
API REST et serveur web |
| Modèle Facial |
ArcFace (DeepFace) |
0.0.98 |
Extraction vecteurs 512-D |
| Recherche |
FAISS |
1.13.2 |
Similarité cosinus ultra-rapide |
| Détection |
OpenCV |
4.8.1 |
Détection de visages |
| Base de données |
SQLite + FAISS |
3.x |
Métadonnées + vecteurs |
📡 Documentation des Endpoints
POST
/api/add
Description : Enregistre un nouveau visage dans la base de données avec extraction automatique de la signature faciale (vecteur 512-D).
🔑 Headers requis
| Header |
Type |
Valeur |
x-api-key |
string |
APK-JCONSULT-DEV Requis |
Content-Type |
string |
multipart/form-data Auto |
📥 Paramètres (form-data)
| Paramètre |
Type |
Description |
Contraintes |
nom |
string |
Nom complet de la personne à enregistrer |
Obligatoire |
image |
file |
Photo du visage (JPG, PNG, BMP) Min: 640x480px | Max: 10MB |
Obligatoire |
✅ Réponse succès (200 OK)
{
"success": true,
"message": "Jean Dupont ajouté (Visage)."
}
❌ Réponse erreur (200 OK - success: false)
{
"success": false,
"message": "Erreur lors de l'enregistrement du visage : Face could not be detected...",
"error": "Face could not be detected"
}
💻 Exemple complet
curl -X POST http://localhost:5000/api/add \
-H "x-api-key: APK-JCONSULT-DEV" \
-F "nom=Jean Dupont" \
-F "image=@photo_jean.jpg"
POST
/api/search
Description : Identifie une personne à partir d'une photo en comparant avec la base de données vectorielle. Retourne le nom et le score de confiance.
🔑 Headers requis
| Header |
Type |
Valeur |
x-api-key |
string |
APK-JCONSULT-DEV Requis |
Content-Type |
string |
multipart/form-data Auto |
📥 Paramètres (form-data)
| Paramètre |
Type |
Description |
Contraintes |
image |
file |
Photo du visage à identifier (JPG, PNG, BMP) Min: 640x480px | Max: 10MB |
Obligatoire |
✅ Réponse (personne identifiée)
{
"success": true,
"result": "Jean Dupont",
"score": 98.5
}
| Champ |
Type |
Description |
success |
boolean |
Statut de la requête |
result |
string |
Nom de la personne identifiée |
score |
float |
Score de confiance (0-100) - Seuil: 65% |
❓ Réponse (personne inconnue)
{
"success": true,
"result": null,
"message": "Aucune correspondance trouvée dans la base."
}
❌ Réponse (erreur)
{
"success": false,
"message": "Erreur lors de l'analyse du visage : la photo ne contient pas de visage détectable..."
}
💻 Exemple complet
curl -X POST http://localhost:5000/api/search \
-H "x-api-key: APK-JCONSULT-DEV" \
-F "image=@photo_test.jpg"
📊 Codes de réponse HTTP
| Code HTTP |
Signification |
Description |
| 200 |
OK |
Requête traitée avec succès (vérifier success dans le JSON) |
| 401 |
Unauthorized |
Clé API invalide, manquante ou incorrecte dans le header x-api-key |
| 400 |
Bad Request |
Paramètres manquants, invalides ou malformés |
| 500 |
Internal Error |
Erreur interne du serveur (vérifier les logs) |
⚙️ Paramètres et Configuration
🔑 Configuration de la clé API
Variable d'environnement : JC_API_KEY
Valeur par défaut : APK-JCONSULT-DEV
Fichier : app.py ligne 11
Type : string
Comment changer la clé API
# Linux/macOS
export JC_API_KEY="votre-cle-secrete-64-caracteres-minimum"
# Windows
set JC_API_KEY=votre-cle-secrete-64-caracteres-minimum
# Docker (.env ou docker-compose.yml)
JC_API_KEY=votre-cle-secrete-64-caracteres-minimum
🎯 Paramètres de Reconnaissance Faciale
| Paramètre |
Type |
Valeur |
Localisation |
Description |
SEUIL_RECONNAISSANCE |
float |
0.65 |
engine.py:65 |
Seuil de reconnaissance (0.0 - 1.0) Plus haut = plus strict |
model_name |
string |
ArcFace |
engine.py:20 |
Modèle d'extraction de signature faciale |
detector_backend |
string |
opencv |
engine.py:23 |
Backend de détection de visages |
enforce_detection |
boolean |
True |
engine.py:22 |
Forcer la détection (erreur si aucun visage) |
align |
boolean |
True |
engine.py:24 |
Aligner les visages avant extraction |
DIMENSION |
integer |
512 |
database.py:9 |
Dimension des vecteurs faciaux (embeddings) |
API_KEY |
string |
APK-JCONSULT-DEV |
app.py:11 |
Clé d'authentification API |
UPLOAD_FOLDER |
string |
uploads |
app.py:7 |
Répertoire des images temporaires |
📈 Calibration du seuil de reconnaissance
Le seuil (SEUIL_RECONNAISSANCE) détermine la sensibilité du système. Modifier dans engine.py ligne 65 :
SEUIL_RECONNAISSANCE = 0.65 # Valeur actuelle (recommandée)
| Plage |
Type |
Sécurité |
Comportement |
0.30 - 0.40 |
float |
Souple |
Reconnaissance large, risque élevé de faux positifs |
0.40 - 0.50 |
float |
Équilibrée |
Bon compromis précision/rappel (usage général) |
0.60 - 0.70 |
float |
Stricte |
Haute sécurité, peu de faux positifs ✅ Recommandé |
> 0.70 |
float |
Très stricte |
Ultra-sécurisé, risque de faux négatifs |
🌐 Variables d'environnement système
| Variable |
Type |
Défaut |
Description |
JC_API_KEY |
string |
APK-JCONSULT-DEV |
Clé d'authentification API (⚠️ changer en prod) |
FLASK_APP |
string |
app.py |
Point d'entrée de l'application Flask |
FLASK_ENV |
string |
production |
Environnement (development | production) |
PYTHONUNBUFFERED |
string |
1 |
Logs en temps réel (0 = bufferisé, 1 = immédiat) |
📁 Fichiers de données
| Fichier |
Type |
Format |
Contenu |
visages.index |
binary |
FAISS |
Index vectoriel (embeddings 512-D normalisés L2) |
mapping.pkl |
pickle |
Python list |
Mapping ID→Nom (liste ordonnée synchronisée avec FAISS) |
donnees.db |
database |
SQLite |
Métadonnées (table: personnes avec id, nom, date_ajout) |
⚠️ Sauvegarde critique
Ces 3 fichiers contiennent toutes vos données. Sauvegardez-les régulièrement !
tar -czf backup.tar.gz visages.index mapping.pkl donnees.db
⚡ Performances système
| Opération |
Type retour |
Temps moyen |
Notes |
| Extraction signature (1er appel) |
array[512] |
~1-2 secondes |
Chargement des modèles IA en mémoire |
| Extraction signature (suivants) |
array[512] |
~0.3-0.5 sec |
Modèles déjà en cache |
| Recherche FAISS (1K visages) |
int, float |
< 0.01 seconde |
Recherche vectorielle ultra-rapide ⚡ |
| Recherche FAISS (10K visages) |
int, float |
< 0.05 seconde |
Temps de recherche quasi-constant |
| Détection visage |
boolean |
~0.1-0.2 sec |
OpenCV Cascade Classifier |
🐳 Configuration Docker
| Paramètre |
Type |
Valeur |
Description |
workers |
integer |
4 |
Nombre de processus Gunicorn parallèles |
timeout |
integer |
120 |
Timeout requête en secondes (important IA) |
bind |
string |
0.0.0.0:5000 |
Adresse d'écoute (host:port) |
memory_limit |
string |
4G |
Limite mémoire Docker (RAM) |
cpus |
string |
2 |
Limite CPU Docker (cores) |
🧪 Console de test interactive
Testez les endpoints API directement depuis votre navigateur sans installer d'outils externes.
💡 Recommandations pour de bons résultats :
✅ À faire :
• Photo de face, bien éclairée et nette
• Résolution minimum : 640x480 pixels
• Formats acceptés : JPG, PNG, BMP
• Arrière-plan neutre de préférence
• Visage bien visible et centré
❌ À éviter :
• Visages de profil ou partiellement cachés
• Lunettes de soleil, masques, chapeaux
• Photos floues ou très compressées
• Éclairage insuffisant ou contre-jour
• Taille de fichier > 10 MB