>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Python

So erstellen Sie eine 3D-Verkehrsprojektion aus einer Straßenkamera und einem Satellitenbild

Jeder, der versucht hat, eine Standard-Überwachungskamera mit einer Stadtkarte auszurichten, kennt dieses Problem. Man hat eine mp4-Aufnahme von einer Kreuzung in ungefähr dreißig Grad zum Horizont, ein unscharfes Bild und null Daten über Objektivparameter. Um tatsächliche Fahrzeuggeschwindigkeiten zu berechnen oder Spuren auf einer Karte zu plotten, benötigt man typischerweise entweder Lidars oder eine Vor-Ort-Kalibrierung mit geodätischen Markern.

Kürzlich bin ich auf das Projekt TrafficLab-3D gestoßen, dessen Autor versucht hat, dieses Problem auf sehr praktische Weise zu lösen. Die Idee ist, eine Standard-Videoaufzeichnung, einen Screenshot derselben Kreuzung von Satellitenkarten zu nehmen und einen synchronisierten digitalen Zwilling des Verkehrs in einer Desktop-Anwendung zusammenzustellen.

Demo

Was steckt dahinter und warum Sie es brauchen könnten

Das Projekt ist ein PoC, gebaut mit Python und PyQt5. Es bildet das flache Kamerabild auf eine Draufsicht ab, hebt 2D-Erkennungen in 3D-Begrenzungsboxen auf und projiziert gleichzeitig Fahrzeugpositionen auf die Karte.

Ein solches Tool wäre nützlich für Studenten, Verkehrsforschende oder Entwickler von Videoanalyse-Systemen, die schnell Hypothesen testen müssen, ohne teure Ausrüstung zu kaufen.

WelcomeTab

Der gesamte Workflow ist in drei unabhängige Tabs aufgeteilt: Projektionskalibrierung, neuronale Netzwerk-Inferenz und synchronisierte Ergebnisansicht.

Kalibrierung ohne das lästige manuelle Arbeiten mit Matrizen

Der Kern des Projekts befindet sich im Kalibrierungs-Tab. Um Kamerpixel auf reale Meter auf der Satellitenkarte abzubilden, hat der Autor einen Schritt-für-Schritt-Assistenten implementiert.

CalibrationStart

Der Prozess ist in drei aufeinanderfolgende Phasen unterteilt.

Zuerst entfernen Sie die Linsenverzerrung. Das Programm konfiguriert die intrinsische Matrix der Kamera und fünf radial-tangentiale Verzerrungskoeffizienten des Brown-Conrady-Modells. Direkt in der Oberfläche können Sie sehen, wie sich die gekrümmten Rahmenkanten aufrichten.

Als nächstes wird die Homographie konfiguriert. Sie platzieren manuell Referenzpunkte auf dem Kamerabild und deren entsprechende Punkte auf dem Satellitenbild. Der RANSAC-Algorithmus berechnet die Transformationsmatrix der Straßnebene. Sie können sofort auf einen beliebigen Reifen-zu-Asphalt-Kontaktpunkt klicken und prüfen, wo er auf der Karte gelandet ist.

In der dritten Phase werden Parallaxe und Maßstab berücksichtigt. Um von 2D zu 3D zu gelangen, müssen Sie die Höhe von zwei Objekten im Video angeben (zum Beispiel Fußgänger oder Pfähle) sowie den Abstand zwischen Orientierungspunkten auf der Karte. Aus diesen Daten berechnet das Programm die Position der Kamera im Raum und den Pixel-zu-Meter-Umrechnungsfaktor.

CalibrationEnd

Zusätzlich werden der Import von Vektor-SVG-Kreuzungsdiagrammen und die Markierung von Regions of Interest (ROI) unterstützt, um Fehlerkennungen außerhalb der Fahrbahn herauszufiltern.

LocationTab

Inferenz und Visualisierung

Nach der Konfiguration der Geometrie wechseln Sie zum Inferenz-Tab. Die Berechnung ist von der Darstellung getrennt, damit die Oberfläche nicht einfriert, wenn schwere Szenen abgespielt werden.

InferenceTab

Die Pipeline des neuronalen Netzwerks wird über inference_config.yaml und prior_dimensions.json konfiguriert:

  • YOLOv8- oder YOLOv11-Modelle im PyTorch-Format werden für die Objekterkennung verwendet.
  • Standard-Motion-Tracker werden für das Tracking angebunden.
  • Ergebnisse werden durch kinematische Filter geglättet, die Richtung und Geschwindigkeit jedes Objekts berechnen.

Alle Ergebnisse werden in komprimierte .json.gz-Dateien gespeichert. Sie enthalten 3D-Begrenzungsbox-Koordinaten, Bewegungsvektoren und Zeitstempel-Zuordnungen.

Der letzte Bildschirm gibt den Videostream Seite an Seite mit der Geländekarte wieder. Auf der linken Seite sehen Sie das Kamerabild mit überlagerten 3D-Verkehrs-Begrenzungsboxen, und auf der rechten Seite ein Kreuzungsdiagramm mit Kontaktpunkten, Kurspfeilen und präzisen Geschwindigkeitswerten.

VisualizationTab

So führen Sie das Projekt lokal aus

Um es auszuführen, benötigen Sie eine konfigurierte Conda-Umgebung mit installiertem Python und Computer-Vision-Bibliotheken:

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

Der Autor hat vortrainierte Modellgewichte auf Google Drive hochgeladen, zusammen mit Testordnern mit vorkalibrierten Kreuzungen. Wenn Sie nicht sofort Zeit mit dem Beschriften Ihrer eigenen Kameras verbringen möchten, können Sie den Testdatensatz herunterladen und direkt zur Inferenz und Visualisierung springen.

Die Verzeichnisstruktur des Arbeitsbereichs ist unkompliziert:

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

Aktuelle Einschränkungen

Der Autor gibt in der README ehrlich an, dass die Codebasis derzeit ein monolithischer Prototyp ist. Es gibt offensichtliche physikalische Vereinfachungen. Zum Beispiel nimmt das System eine perfekt flache Straßnebene ohne Höhenänderungen an, und Erkennungen stammen von YOLO ohne strikte Einhaltung eines Fahrzeug-Kinematikmodells (wie ein Fahrradmodell), was dazu führen kann, dass 3D-Begrenzungsboxen gelegentlich zittern, wenn sie von großen Bussen verdeckt werden.

Dennoch ist die Kalibrierungs-Pipeline gut konzipiert. Wenn Sie eine funktionierende Grundlage für Smart-City-Forschung, Unfallrekonstruktion oder Verkehrsverfolgung aus zugänglichen Datenquellen benötigen, ist TrafficLab-3D definitiv einen Fork und eine Erkundung wert.

Ähnliche Projekte