Cómo crear una proyección de tráfico 3D a partir de una cámara de calle e imagen satelital
Cualquiera que haya intentado alinear una cámara de vigilancia estándar con un mapa de la ciudad conoce este dolor. Tienes una grabación mp4 de una intersección a aproximadamente treinta grados del horizonte, una imagen borrosa y cero datos sobre los parámetros del lente. Para calcular velocidades reales de vehículos o trazar rutas en un mapa, normalmente necesitas lidars o precalibración en el sitio con marcadores geodésicos.
Recientemente me encontré con el proyecto TrafficLab-3D, cuyo autor intentó resolver este problema de una manera muy práctica. La idea es tomar una grabación de video estándar, una captura de pantalla de la misma intersección desde mapas satelitales y ensamblar un gemelo digital sincronizado del tráfico en una aplicación de escritorio.

Qué hay debajo del capó y por qué podrías necesitarlo
El proyecto es un PoC construido con Python y PyQt5. Mapea la imagen plana de la cámara a una vista cenital, eleva las detecciones 2D a cajas delimitadoras 3D y simultáneamente proyecta las posiciones de los vehículos en el mapa.
Una herramienta así sería útil para estudiantes, investigadores de flujo de tráfico o desarrolladores de sistemas de análisis de video que necesitan probar hipótesis rápidamente sin comprar equipos costosos.

Todo el flujo de trabajo se divide en tres pestañas independientes: calibración de proyección, inferencia de red neuronal y visualización de resultados sincronizados.
Calibración sin el inconveniente del trabajo manual con matrices
El núcleo del proyecto está en la pestaña de calibración. Para mapear píxeles de la cámara a metros del mundo real en el mapa satelital, el autor implementó un asistente paso a paso.

El proceso se divide en tres etapas secuenciales.
Primero, eliminas la distorsión del lente. El programa configura la matriz intrínseca de la cámara y cinco coeficientes de distorsión radial-tangencial del modelo de Brown-Conrady. Justo en la interfaz puedes ver cómo los bordes curvos del marco se enderezan.
Luego, se configura la homografía. Colocas manualmente puntos de referencia en el marco de la cámara y sus puntos correspondientes en la imagen satelital. El algoritmo RANSAC calcula la matriz de transformación del plano de la carretera. Puedes hacer clic inmediatamente en cualquier punto de contacto neumático-asfalto y verificar dónde aterrizó en el mapa.
En la tercera etapa, se tienen en cuenta la paralaje y la escala. Para pasar de 2D a 3D, necesitas especificar la altura de dos objetos en el video (por ejemplo, peatones o postes) y la distancia entre puntos de referencia en el mapa. A partir de estos datos, el programa calcula la posición de la cámara en el espacio y el factor de conversión de píxeles a metros.

Además, se soporta la importación de diagramas de intersección vectoriales en SVG y el marcado de regiones de interés (ROI) para filtrar detecciones falsas fuera de la calzada.

Inferencia y visualización
Después de configurar la geometría, pasas a la pestaña de inferencia. El cómputo está separado de la renderización para que la interfaz no se congele al reproducir escenas pesadas.

La tubería de la red neuronal se configura mediante inference_config.yaml y prior_dimensions.json:
- Se utilizan modelos YOLOv8 o YOLOv11 en formato PyTorch para la detección de objetos.
- Se conectan rastreadores de movimiento estándar para el seguimiento.
- Los resultados se suavizan mediante filtros cinemáticos que calculan la dirección y velocidad de cada objeto.
Todos los resultados se guardan en archivos .json.gz comprimidos. Contienen coordenadas de cajas delimitadoras 3D, vectores de movimiento y asociaciones de marca de tiempo.
La pantalla final reproduce la transmisión de video lado a lado con el mapa del terreno. A la izquierda ves la alimentación de la cámara con cajas delimitadoras de tráfico 3D superpuestas, y a la derecha — un diagrama de intersección con puntos de contacto, flechas de rumbo y valores precisos de velocidad.

Cómo ejecutar el proyecto localmente
Para ejecutarlo, necesitarás un entorno Conda configurado con Python y bibliotecas de visión por computadora instaladas:
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
El autor subió pesos de modelos pre-entrenados a Google Drive, junto con carpetas de prueba con intersecciones pre-calibradas. Si no quieres pasar tiempo etiquetando tus propias cámaras de inmediato, puedes descargar el conjunto de prueba y saltar directamente a la inferencia y visualización.
La estructura del directorio de trabajo es directa:
TrafficLab-3D/
├── location/
│ └── {location_code}/
│ ├── footage/
│ ├── cctv_{location_code}.png
│ └── sat_{location_code}.png
├── models/
├── output/
├── inference_config.yaml
└── main.py
Limitaciones actuales
El autor declara honestamente en el README que la base de código actualmente es un prototipo monolítico. Hay simplificaciones físicas obvias. Por ejemplo, el sistema asume un plano de carretera perfectamente plano sin cambios de elevación, y las detecciones provienen de YOLO sin adherencia estricta a un modelo cinemático de vehículo (como un modelo de bicicleta), lo que puede causar que las cajas delimitadoras 3D ocasionalmente tiemblen cuando están oscurecidas por autobuses grandes.
Sin embargo, la tubería de calibración está bien diseñada. Si necesitas una base funcional para investigación de ciudad inteligente, reconstrucción de accidentes o seguimiento de tráfico a partir de fuentes de datos accesibles, TrafficLab-3D definitivamente vale la pena bifurcarlo y explorarlo.
Proyectos relacionados