scoresfloat[N] — score de confiance par détectionREQUIS
classesfloat[N] — indice de classe préditREQUIS
masksfloat[N × H × W] — masques de segmentationOPTIONNEL
Paramètres runtime
Seuil confiance
0.40
Seuil NMS (IoU)
0.50
Caméras simultanées20
Masques segmentationActivés
Precision TensorRTFP16
⚠
NMS à compléter — La fonction applyNMS() est un stub. Remplacer par nmsdk::nonMaxSuppression() ou l'implémentation NVIDIA officielle pour les cas de production à haute densité de détections.
⚠
Memory leak potentiel — segInfo.mask = new float[…] alloue sur le heap sans RAII. En production : utiliser std::vector<float> ou un allocateur géré par DeepStream.
ℹ
Offset masque à vérifier — Le calcul i × (maskWidth × maskHeight) suppose une disposition contigüe. Vérifier la sortie réelle du modèle ONNX exporté : certains exports YOLOv11-seg intercalent les coefficients proto et les masques finaux.
UI web Python · Détection USB live · Cycle calibration guidé · Export JSON · Intégration DeepStream
PythonStreamlit
Le Calibration Manager Streamlit est l'interface opérateur du cycle de calibration. Il orchestre la détection USB, le guidage visuel, l'appel au script ChArUco, et valide la qualité avant de passer les paramètres au pipeline DeepStream. Il ne remplace pas le script Python de calibration — il l'encapsule dans une UI actionnable.
📷
Détection USB live
Scan automatique jusqu'à 10 indexes USB. Preview frame live par caméra. Résolution 4K si supportée (3840×2160).
🎯
Cycle de calibration guidé
25 captures par caméra avec progress bar. L'opérateur bouge le damier ChArUco pendant la capture automatique (0.3s entre images).
✅
Validation 3 axes
Checks manuels : angle · netteté · exposition. Seuil auto : reproj < 1.5 px = OK. Sauvegarde JSON horodatée par caméra.
🔄
Recalibration globale
Recalibration simultanée de toutes les caméras pour cohérence 3D multi-vue. Hook pour bundle adjustment.
💾
Export JSON + NPZ
cam{N}_status.json horodaté. Compatible avec le script ChArUco et le pipeline DeepStream / YOLOv11-seg.
🚀
Lancement DeepStream
Bouton sidebar → déclenche garagevault_deepstream_pipeline.py avec les caméras calibrées.
⚠
Calibration simulée — reproj_error = np.random.uniform(0.4, 1.2) est un placeholder. Remplacer par l'appel réel à calibrate_single_camera() du script ChArUco.
⚠
Résolution 4K non garantie — CAP_PROP_FRAME_WIDTH = 3840 est une suggestion. OpenCV silently fallback sur la résolution max supportée — vérifier avec cap.get(cv2.CAP_PROP_FRAME_WIDTH) après set.
ℹ
Threading à prévoir — La calibration bloque le thread Streamlit. Pour 20 caméras simultanées, encapsuler chaque run_calibration() dans un threading.Thread ou utiliser concurrent.futures.ThreadPoolExecutor.
Intégration dans la chaîne GarageVault
1
Streamlit — Détection & Preview
L'opérateur ouvre streamlit run calibration_manager.py · les caméras USB disponibles sont listées · preview live de chaque flux.
2
Cycle calibration ChArUco (25 captures)
Bouton "Lancer calibration" → appel run_calibration(cam_id) → capture 25 frames à 0.3s d'intervalle → appel calibrate_single_camera() → erreur de reprojection.
Version Test Légère — 4 Caméras · CPU Only · Intel i5
Sans NVIDIA / CUDA · 1080p · YOLOv11 OpenCV DNN · Undistortion CPU · Développement & tests terrain
CPU ONLY4 camsStreamlit
Cette version est conçue pour développement, tests terrain et démo sans matériel NVIDIA. Elle reproduit le workflow complet (calibration → undistortion → inférence YOLO → rapport) sur CPU Intel i5, avec 4 caméras USB 1080p. Aucune dépendance DeepStream, CUDA ou TensorRT.
4
caméras max
1080p
résolution capture
640²
taille inférence YOLO
20
images calibration
✓ Ce que fait cette version
•Détection USB live 4 caméras (indexes 0–3)
•Preview 1080p redimensionné 1280×720 dans Streamlit
•Paramètres identity fallback si pas de calib (.npz vide)
✗ Ce qui n'est pas inclus
•DeepStream / TensorRT / CUDA — aucune dépendance GPU
•Parser C++ NvDsYoloSegParser (remplacé par DNN OpenCV)
•Batch de 20 caméras simultanées (4 max CPU)
•Résolution 4K (limitée à 1080p pour perf CPU)
•NMS GPU accélérée (CPU NMS via OpenCV suffit)
•Broker MQTT / Holochain (pipeline aval non inclus)
•Temps réel 30fps (latence CPU ~200–400ms/frame)
⚠
Matrice identity — np.eye(3)*1000, np.zeros(5) est un placeholder invalide. Remplacer par les vraies valeurs intrinsèques une fois la calibration ChArUco réelle effectuée — sinon l'undistortion est no-op.
⚠
Seuil reprojection 1.8 px — Plus permissif que la prod (1.5 px). Pour usage terrain de test uniquement. Recalibrer avec le script ChArUco complet avant passage en production portique.
ℹ
Migration vers prod — Les fichiers .npz générés sont directement compatibles avec le pipeline DeepStream. Remplacer les données placeholders par les vraies matrices et déposer dans calibration_params/ du serveur production.
Compatibilité garantie : les fichiers .npz et status.json produits par la version légère sont identiques en format à ceux attendus par le pipeline DeepStream — migration transparente dès passage sur hardware NVIDIA.
garagevault_test_light.pyCPU ONLY4 cams
Installation minimale
# Aucun CUDA requis
pip install streamlit \
opencv-python \
opencv-contrib-python \
numpy tqdm
# Lancement
streamlit run \
garagevault_test_light.py
L'opérateur doit ouvrir le lien sur son téléphone et se connecter
Mobile connecté—
Opérateur : —
Photos reçues0/ 14
✅
Capture terminée
0 photos • 0 défaut(s) signalé(s)
Photos reçues en direct
Aucune photo reçue
POC — En production : le lien est envoyé par SMS/email à l'opérateur. Le mobile se connecte via WebSocket au serveur de session. Ici, la communication se fait via BroadcastChannel entre onglets du même navigateur.
Aperçu de l'email envoyé
Aperçu fidèle — cet email serait envoyé automatiquement lors de la génération des accès (POC : envoi réel non implémenté)