Skip to main content

traffic-digital-twin-cctv

Digital twin de tráfico desde footage CCTV — detecta, cuenta y rastrea vehículos usando solo video mp4 de cámaras. Inspirado en duy-phamduc68/TrafficLab-3D (⭐315).

설치로 이동

소스 정보

저장소
Ntizar/NtizarBrainMasterMind
최근 소스 활동
2026년 7월 5일 19:29
감지된 SKILL.md 언어
스페인어
스타
2
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
traffic-digital-twin-cctv
version
1.0.0
description
Digital twin de tráfico desde footage CCTV — detecta, cuenta y rastrea vehículos usando solo video mp4 de cámaras. Inspirado en duy-phamduc68/TrafficLab-3D (⭐315).
tags
["traffic","digital-twin","cctv","computer-vision","yolo","tracking","3d"]
# Digital Twin de Tráfico desde CCTV ## Resumen Crea un digital twin de tráfico usando solo footage de cámaras CCTV (mp4). Detecta vehículos con YOLO, rastrea con DeepSORT, y reconstruye posiciones 3D en un mapa. Sin sensores adicionales. ## Cuándo usar - Análisis de tráfico urbano desde cámaras existentes - Digital twin de intersección o tramo de carretera - Conteo y clasificación de vehículos sin hardware adicional - Visualización 3D de flujo de tráfico ## Arquitectura ``` Video CCTV (mp4) ↓ Frame extraction (cv2) ↓ YOLO detection (coches, camiones, motos, buses) ↓ DeepSORT tracking (ID por vehículo) ↓ Homography: pixel → coordenadas reales ↓ Digital Twin 3D ├── Mapa 3D de la zona ├── Vehículos como meshes animados ├── Trayectorias históricas └── Métricas: conteo, velocidad, densidad ``` ## Patrón de uso ```python import cv2 from ultralytics import YOLO from deep_sort_realtime import DeepSort # 1. Cargar modelo YOLO model = YOLO('yolov8n.pt') tracker = DeepSort(max_age=30) # 2. Procesar video CCTV cap = cv2.VideoCapture('cctv_footage.mp4') detections_log = [] while cap.isOpened(): ret, frame = cap.read() if not ret: break # Detectar vehículos results = model(frame, classes=[2, 3, 5, 7]) # car, motorcycle, bus, truck # Formatear para DeepSORT detections = [] for box in results[0].boxes: x1, y1, x2, y2 = box.xyxy[0].tolist() conf = box.conf[0].item() detections.append(([x1, y1, x2-x1, y2-y1], conf, int(box.cls))) # Tracking tracks = tracker.update_tracks(detections, frame=frame) for track in tracks: if not track.is_confirmed(): continue track_id = track.track_id bbox = track.to_tlbr() # Homography: pixel → coordenadas reales real_pos = pixel_to_world(bbox_center(bbox), homography_matrix) detections_log.append({ 'id': track_id, 'position': real_pos, 'class': track.get_det_class(), 'frame': frame_count }) # 3. Exportar para visualización 3D import json json.dump(detections_log, open('traffic_data.json', 'w')) ``` ```javascript // Visualización 3D del digital twin const trafficData = await loadJSON('traffic_data.json'); // Agrupar por vehículo const vehicles = groupByID(trafficData); vehicles.forEach(v => { // Crear mesh para cada vehículo const mesh = new THREE.Mesh(vehicleGeometry, vehicleMaterial); scene.add(mesh); // Animar trayectoria v.positions.forEach((pos, i) => { setTimeout(() => { mesh.position.set(pos.x, 0, pos.z); }, i * 33); // 30fps }); }); ``` ## Pitfalls - **Homography:** Necesita calibración: 4+ puntos conocidos en la imagen → coordenadas reales. - **Oclusiones:** YOLO falla con oclusiones. DeepSORT ayuda a mantener ID durante oclusiones cortas. - **Perspective:** Cámaras con ángulo muy pronunciado dificultan la detección. Mejor ángulo cenital. - **Night mode:** YOLO falla con poca luz. Usar modelo entrenado para night o IR. - **Frame rate:** Procesar a 10-15fps es suficiente para tráfico. 30fps = más datos pero más costoso. ## Referencias - TrafficLab-3D: https://github.com/duy-phamduc68/TrafficLab-3D - YOLO: https://github.com/ultralytics/ultralytics - DeepSORT: https://github.com/levanons/deep-sort-pytorch --- **Hecho con ❤️ por David Antizar**
GitHub에서 보기