Vision par ordinateur · Systèmes temps réel
Surveillance intelligente du trafic
Détection et suivi de véhicules, capture de plaques et estimation de vitesse par homographie.
Un service conteneurisé de surveillance du trafic qui analyse une vidéo et rapporte ce qui s'est réellement passé sur la route : quels véhicules, à quelle vitesse, et lesquels ont dépassé la limite de leur catégorie.
Problème
Une vitesse mesurée en pixels n'est pas une vitesse, et la détection seule perd un véhicule dès qu'il passe derrière un plus gros. Sans identité entre les images ni correspondance entre la vue caméra et les distances réelles, aucun des chiffres attendus par un exploitant n'est fiable.
Objectifs
- Maintenir une identité stable entre les images pour que chaque mesure appartienne à un véhicule précis.
- Produire des vitesses en unités réelles plutôt qu'en pixels par image.
- Capturer une seule bonne image de plaque par véhicule plutôt que des centaines d'inexploitables.
- Signaler les infractions selon des limites différentes par type de véhicule.
- Rendre le comportement du système et du modèle visible pendant le traitement.
Mise en œuvre
- YOLOv8 détecte voitures, camions, bus, motos et vélos ; ByteTrack attribue un identifiant de trace et le conserve malgré les occlusions.
- Un second modèle YOLOv8 détecte les plaques dans chaque vignette de véhicule, en parallèle du suivi plutôt qu'en seconde passe sur la vidéo.
- Un évaluateur de qualité note chaque vignette (netteté, luminosité, taille) et seul le meilleur cliché par trace est conservé.
- Une homographie à neuf points projette le plan de la route en coordonnées réelles, et le rejet des valeurs aberrantes écarte les mesures que la géométrie ne peut pas justifier.
- Un backend FastAPI exécute le traitement en tâche de fond et pousse les mises à jour image par image vers un tableau de bord Streamlit en WebSocket.
- Prometheus collecte la latence par image, le taux de détection, le temps d'inférence et le nombre d'infractions ; Grafana les restitue. L'ensemble tourne sous Docker Compose.
Architecture
- video upload
- FastAPI
- Redis queue
- Celery workers
- YOLOv8 vehicles
- ByteTrack
- YOLOv8 plate detector
- quality assessor
- best-shot storage
- 9-point homography
- outlier rejection
- per-class speed limits
- Prometheus
- Grafana
- MLflow
- Streamlit
- WebSocket updates
Technologies
- YOLOv8
- ByteTrack
- Supervision
- FastAPI
- WebSocket
- Redis
- Celery
- Streamlit
- Prometheus
- Grafana
- MLflow
- Docker
- pytest
Difficultés & solutions
Difficulté
La détection seule compte deux fois les véhicules et les perd derrière les plus gros, ce qui fausse tous les chiffres en aval.
Solution
ByteTrack maintient l'identité entre les images : comptages, vitesses et images de plaques se rattachent à un véhicule et non à des images isolées.
Difficulté
La perspective fait qu'un même déplacement en pixels représente des distances réelles différentes selon la profondeur : une vitesse en pixels n'a pas de sens.
Solution
Une calibration homographique à neuf points projette le plan de la route en coordonnées réelles, avec rejet des lectures invraisemblables.
Difficulté
Enregistrer une vignette de plaque à chaque image produit des milliers d'images le plus souvent illisibles.
Solution
Un évaluateur note netteté, luminosité et taille, et seule la meilleure vignette par véhicule est écrite sur disque.
Difficulté
Un traitement vidéo long ne donne aucun retour à l'exploitant avant la fin.
Solution
Le traitement s'exécute en tâche de fond et diffuse progression, traces et infractions vers le tableau de bord en WebSocket.
Résultats
- L'estimation de vitesse atteint 98,6 % de précision, calculée via une calibration homographique à neuf points avec rejet des valeurs aberrantes plutôt qu'à partir du déplacement en pixels.
- Un évaluateur de qualité note chaque vignette de plaque (netteté, luminosité, taille) : une seule image lisible est conservée par véhicule au lieu de centaines de mauvaises.
- Le pipeline tient 30 FPS tout en détectant, suivant, lisant les plaques et contrôlant les infractions.
- Prometheus et Grafana exposent la latence par image, les taux de détection et le nombre d'infractions, pendant qu'un tableau de bord Streamlit diffuse les résultats en WebSocket au fil du traitement.
Enseignements
- C'est le suivi, et non la détection, qui rend un pipeline de vision utile : l'identité conditionne toutes les métriques en aval.
- La calibration fait la différence entre un chiffre et une mesure. L'homographie a plus compté pour la précision que le choix du modèle.
- Décider ce qu'il ne faut pas stocker s'est révélé aussi important que décider quoi détecter.