>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Comment créer une projection de trafic 3D à partir d'une caméra de rue et d'une image satellite

Quiconque a essayé d'aligner une caméra de surveillance standard avec une carte urbaine connaît cette galère. Vous avez un enregistrement mp4 d'un carrefour à environ trente degrés par rapport à l'horizon, une image floue, et aucune donnée sur les paramètres de l'objectif. Pour calculer les vitesses réelles des véhicules ou tracer des trajectoires sur une carte, vous avez généralement besoin soit de lidars, soit d'une pré-calibration sur site avec des repères géodésiques.

Récemment, je suis tombé sur le projet TrafficLab-3D, dont l'auteur a tenté de résoudre ce problème d'une manière très pratique. L'idée est de prendre un enregistrement vidéo standard, une capture d'écran du même carrefour depuis des cartes satellite, et d'assembler un jumeau numérique synchronisé du trafic dans une application de bureau.

Demo

Ce qui se cache sous le capot et pourquoi vous pourriez en avoir besoin

Le projet est une preuve de concept construite avec Python et PyQt5. Il mappe l'image plate de la caméra vers une vue de dessus, élève les détections 2D en boîtes englobantes 3D, et projette simultanément les positions des véhicules sur la carte.

Un tel outil serait utile pour les étudiants, les chercheurs en flux de trafic, ou les développeurs de systèmes d'analyse vidéo qui ont besoin de tester rapidement des hypothèses sans acheter d'équipement coûteux.

WelcomeTab

L'ensemble du flux de travail est divisé en trois onglets indépendants : calibration de la projection, inférence du réseau de neurones, et visualisation synchronisée des résultats.

Calibration sans les tracas du travail manuel des matrices

Le cœur du projet se trouve dans l'onglet de calibration. Pour mapper les pixels de la caméra vers des mètres réels sur la carte satellite, l'auteur a implémenté un assistant étape par étape.

CalibrationStart

Le processus est divisé en trois étapes séquentielles.

Tout d'abord, vous supprimez la distorsion de l'objectif. Le programme configure la matrice intrinsèque de la caméra et les cinq coefficients de distorsion radiale-tangentielle du modèle de Brown-Conrady. Directement dans l'interface, vous pouvez voir les bords courbes du cadre se redresser.

Ensuite, l'homographie est configurée. Vous placez manuellement des points de référence sur l'image de la caméra et leurs points correspondants sur l'image satellite. L'algorithme RANSAC calcule la matrice de transformation du plan routier. Vous pouvez immédiatement cliquer sur n'importe quel point de contact pneu-asphalte et vérifier où il a atterri sur la carte.

Dans la troisième étape, la parallaxe et l'échelle sont prises en compte. Pour passer de la 2D à la 3D, vous devez spécifier la hauteur de deux objets dans la vidéo (par exemple, des piétons ou des poteaux) et la distance entre des repères sur la carte. À partir de ces données, le programme calcule la position de la caméra dans l'espace et le facteur de conversion pixel-mètres.

CalibrationEnd

De plus, l'importation de schémas d'intersection vectoriels SVG et le marquage de régions d'intérêt (ROI) sont pris en charge pour filtrer les fausses détections en dehors de la chaussée.

LocationTab

Inférence et visualisation

Après avoir configuré la géométrie, vous passez à l'onglet d'inférence. Le calcul est séparé du rendu afin que l'interface ne se fige pas lors de la lecture de scènes lourdes.

InferenceTab

Le pipeline du réseau de neurones est configuré via inference_config.yaml et prior_dimensions.json :

  • Les modèles YOLOv8 ou YOLOv11 au format PyTorch sont utilisés pour la détection d'objets.
  • Des trackers de mouvement standard sont connectés pour le suivi.
  • Les résultats sont lissés par des filtres cinématiques qui calculent la direction et la vitesse de chaque objet.

Tous les résultats sont enregistrés dans des fichiers .json.gz compressés. Ils contiennent les coordonnées des boîtes englobantes 3D, les vecteurs de mouvement et les associations d'horodatage.

L'écran final lit le flux vidéo côte à côte avec la carte du terrain. À gauche, vous voyez le flux de la caméra avec les boîtes englobantes de trafic 3D superposées, et à droite — un schéma d'intersection avec les points de contact, les flèches de cap et les valeurs de vitesse précises.

VisualizationTab

Comment exécuter le projet en local

Pour l'exécuter, vous aurez besoin d'un environnement Conda configuré avec Python et les bibliothèques de vision par ordinateur installées :

git clone https://github.com/duy-phamduc68/TrafficLab-3D.git
cd TrafficLab-3D
conda env create -f environment.yml
conda activate trafficlab
python main.py

L'auteur a téléchargé les poids des modèles pré-entraînés sur Google Drive, ainsi que des dossiers de test avec des intersections pré-calibrées. Si vous ne voulez pas passer du temps à étiqueter vos propres caméras tout de suite, vous pouvez télécharger l'ensemble de test et passer directement à l'inférence et à la visualisation.

La structure du répertoire de travail est simple :

TrafficLab-3D/
├── location/
│   └── {location_code}/
│       ├── footage/
│       ├── cctv_{location_code}.png
│       └── sat_{location_code}.png
├── models/
├── output/
├── inference_config.yaml
└── main.py

Limitations actuelles

L'auteur indique honnêtement dans le README que la base de code est actuellement un prototype monolithique. Il y a des simplifications physiques évidentes. Par exemple, le système suppose un plan routier parfaitement plat sans changements d'élévation, et les détections proviennent de YOLO sans adhérer strictement à un modèle cinématique de véhicule (comme un modèle de bicyclette), ce qui peut provoquer des tremblements occasionnels des boîtes englobantes 3D lorsqu'elles sont masquées par de grands bus.

Néanmoins, le pipeline de calibration est bien conçu. Si vous avez besoin d'une base fonctionnelle pour la recherche sur les villes intelligentes, la reconstruction d'accidents ou le suivi du trafic à partir de sources de données accessibles, TrafficLab-3D mérite certainement d'être forké et exploré.

Projets similaires