>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Python

Jak utworzyć projekcję ruchu drogowego w 3D z kamery ulicznej i obrazu satelitarnego

Każdy, kto próbował dopasować standardową kamerę monitoringu do mapy miasta, zna ten ból. Masz nagranie mp4 ze skrzyżowania pod kątem około trzydziestu stopni do horyzontu, rozmazany obraz i zero danych o parametrach obiektywu. Aby obliczyć rzeczywiste prędkości pojazdów lub wykreślić trasy na mapie, zazwyczaj potrzebujesz lidaru lub wstępnej kalibracji na miejscu z markerami geodezyjnymi.

Ostatnio natknąłem się na projekt TrafficLab-3D, którego autor próbował rozwiązać ten problem w bardzo praktyczny sposób. Pomysł polega na tym, aby wziąć standardowe nagranie wideo, zrzut ekranu tego samego skrzyżowania z map satelitarnych i złożyć zsynchronizowany cyfrowy bliźniak ruchu drogowego w aplikacji desktopowej.

Demo

Co jest pod maską i dlaczego możesz tego potrzebować

Projekt to PoC zbudowany przy użyciu Pythona i PyQt5. Mapuje płaski obraz z kamery na widok z góry, przekształca detekcje 2D w trójwymiarowe ramki ograniczające i jednocześnie rzutuje pozycje pojazdów na mapę.

Takie narzędzie byłoby przydatne dla studentów, badaczy przepływu ruchu drogowego lub deweloperów systemów analizy wideo, którzy chcą szybko przetestować hipotezy bez kupowania drogiego sprzętu.

WelcomeTab

Cały przepływ pracy jest podzielony na trzy niezależne zakładki: kalibracja projekcji, wnioskowanie z sieci neuronowej i zsynchronizowane przeglądanie wyników.

Kalibracja bez żmudnej pracy z macierzami ręcznie

Serce projektu znajduje się w zakładce kalibracji. Aby zmapować piksele kamery na metry w świecie rzeczywistym na mapie satelitarnej, autor zaimplementował kreator krok po kroku.

CalibrationStart

Proces jest podzielony na trzy kolejne etapy.

Najpierw usuwasz dystorsję obiektywu. Program konfiguruje wewnętrzną macierz kamery i pięć współczynników dystorsji promieniowo-tangencjalnej modelu Browna-Conrady ego. Tuż w interfejsie możesz zobaczyć, jak zakrzywione krawędzie kadru prostują się.

Następnie konfigurowana jest homografia. Ręcznie umieszczasz punkty odniesienia na kadrze kamery i ich odpowiadające punkty na obrazie satelitarnym. Algorytm RANSAC oblicza macierz transformacji płaszczyzny jezdni. Możesz od razu kliknąć w dowolny punkt styku opony z asfaltem i sprawdzić, gdzie wylądował na mapie.

W trzecim etapie uwzględniane są paralaksa i skala. Aby przejść z 2D do 3D, musisz określić wysokość dwóch obiektów w wideo (na przykład pieszych lub słupów) oraz odległość między punktami orientacyjnymi na mapie. Na podstawie tych danych program oblicza pozycję kamery w przestrzeni i współczynnik konwersji pikseli na metry.

CalibrationEnd

Dodatkowo obsługiwany jest import wektorowych diagramów skrzyżowań w formacie SVG oraz oznaczanie regionów zainteresowania (ROI) w celu filtrowania fałszywych detekcji poza jezdnią.

LocationTab

Wnioskowanie i wizualizacja

Po skonfigurowaniu geometrii przechodzisz do zakładki wnioskowania. Obliczenia są oddzielone od renderowania, więc interfejs nie zawiesza się podczas odtwarzania ciężkich scen.

InferenceTab

Potok sieci neuronowej jest konfigurowany przez inference_config.yaml i prior_dimensions.json:

  • Modele YOLOv8 lub YOLOv11 w formacie PyTorch są używane do wykrywania obiektów.
  • Standardowe śledziki ruchu są połączone do śledzenia.
  • Wyniki są wygładzane przez filtry kinematyczne, które obliczają kierunek i prędkość każdego obiektu.

Wszystkie wyniki są zapisywane do skompresowanych plików .json.gz. Zawierają współrzędne 3D ramek ograniczających, wektory ruchu i skojarzenia znaczników czasowych.

Końcowy ekran odtwarza strumień wideo obok mapy terenu. Po lewej stronie widzisz obraz z kamery z nałożonymi trójwymiarowymi ramkami ograniczającymi ruchu drogowego, a po prawej — diagram skrzyżowania z punktami styku, strzałkami kierunku i precyzyjnymi wartościami prędkości.

VisualizationTab

Jak uruchomić projekt lokalnie

Aby go uruchomić, potrzebujesz skonfigurowanego środowiska Conda z zainstalowanym Pythonem i bibliotekami do obrazowania komputerowego:

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

Autor udostępnił wstępnie wytrenowane wagi modelu na Google Drive, wraz z folderami testowymi z wstępnie skalibrowanymi skrzyżowaniami. Jeśli nie chcesz od razu poświęcać czasu na etykietowanie własnych kamer, możesz pobrać zestaw testowy i od razu przejść do wnioskowania i wizualizacji.

Struktura katalogu roboczego jest prosta:

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

Obecne ograniczenia

Autor szczerze stwierdza w README, że baza kodu jest obecnie monolitycznym prototypem. Istnieją oczywiste uproszczenia fizyczne. Na przykład system zakłada idealnie płaską płaszczyznę jezdni bez zmian wysokości, a detekcje pochodzą z YOLO bez ścisłego przestrzegania kinematycznego modelu pojazdu (jak model rowerowy), co może powodować sporadyczne wahania trójwymiarowych ramek ograniczających, gdy są zasłonięte przez duże autobusy.

Niemniej jednak potok kalibracji jest dobrze zaprojektowany. Jeśli potrzebujesz działającej podstawy do badań nad inteligentnym miastem, rekonstrukcji wypadków lub śledzenia ruchu drogowego z dostępnych źródeł danych, TrafficLab-3D zdecydowanie warto przetestować i poznać.

Powiązane projekty