TRAFFIC_ROAD_APP / test_csv_format.py
cyberai-1
Update upload
1a6e37b
Raw
History Blame Contribute Delete
3.7 kB
#!/usr/bin/env python3
"""
Test script to verify CSV format matches SCHEMA_EXAMPLE.csv
"""
import csv
from io import StringIO
# Exemple de détections comme generées par le backend
frame_detections = [
{
"frame": 1,
"timestamp_sec": 0.033,
"scene_name": "abc123",
"group_id": "abc123",
"video_name": "traffic_clip1.mp4",
"track_id": "",
"class_name": "Vehicle",
"confidence": 0.912,
"bbox_x1": 340,
"bbox_y1": 210,
"bbox_x2": 520,
"bbox_y2": 310,
"cx": 430,
"cy": 260,
"frame_width": 1920,
"frame_height": 1080,
"crossed_line": "false",
"direction": "",
"speed_px_s": 0.0
},
{
"frame": 2,
"timestamp_sec": 0.067,
"scene_name": "abc123",
"group_id": "abc123",
"video_name": "traffic_clip1.mp4",
"track_id": "",
"class_name": "Vehicle",
"confidence": 0.908,
"bbox_x1": 345,
"bbox_y1": 213,
"bbox_x2": 525,
"bbox_y2": 313,
"cx": 435,
"cy": 263,
"frame_width": 1920,
"frame_height": 1080,
"crossed_line": "false",
"direction": "",
"speed_px_s": 14.2
},
{
"frame": 48,
"timestamp_sec": 1.600,
"scene_name": "abc123",
"group_id": "abc123",
"video_name": "traffic_clip1.mp4",
"track_id": "",
"class_name": "Vehicle",
"confidence": 0.887,
"bbox_x1": 560,
"bbox_y1": 290,
"bbox_x2": 740,
"bbox_y2": 390,
"cx": 650,
"cy": 340,
"frame_width": 1920,
"frame_height": 1080,
"crossed_line": "true",
"direction": "down",
"speed_px_s": 15.1
},
]
# Generate CSV
output = StringIO()
writer = csv.writer(output, lineterminator="\n")
# Header
writer.writerow([
"frame", "timestamp_sec", "scene_name", "group_id",
"video_name", "track_id", "class_name", "confidence",
"bbox_x1", "bbox_y1", "bbox_x2", "bbox_y2",
"cx", "cy", "frame_width", "frame_height",
"crossed_line", "direction", "speed_px_s"
])
# Data rows
for det in frame_detections:
writer.writerow([
det["frame"],
f"{det['timestamp_sec']:.3f}",
det["scene_name"],
det["group_id"],
det["video_name"],
det["track_id"],
det["class_name"],
f"{det['confidence']:.3f}",
det["bbox_x1"],
det["bbox_y1"],
det["bbox_x2"],
det["bbox_y2"],
det["cx"],
det["cy"],
det["frame_width"],
det["frame_height"],
det["crossed_line"],
det["direction"],
f"{det['speed_px_s']:.1f}"
])
# Print result
csv_output = output.getvalue()
print("Generated CSV:")
print("=" * 120)
print(csv_output)
print("=" * 120)
# Compare with expected format
expected_header = "frame,timestamp_sec,scene_name,group_id,video_name,track_id,class_name,confidence,bbox_x1,bbox_y1,bbox_x2,bbox_y2,cx,cy,frame_width,frame_height,crossed_line,direction,speed_px_s"
actual_header = csv_output.split('\n')[0]
print("\nExpected header:")
print(expected_header)
print("\nActual header:")
print(actual_header)
print("\nHeaders match:", expected_header == actual_header)
# Verify number of columns
lines = csv_output.strip().split('\n')
for i, line in enumerate(lines, 1):
cols = line.split(',')
expected_cols = 19
if len(cols) != expected_cols:
print(f"Row {i}: WARNING - Expected {expected_cols} columns, got {len(cols)}")
else:
print(f"Row {i}: OK ({len(cols)} columns)")
print("\n✅ CSV Format validation complete!")