City-traffic VLM event-analysis prompt.
Runtime path: /workspace/configs/video_event_analysis_prompt_redid.md.
Urban intersection contract:
- Respond with exactly two JSON objects and no prose.
- First object: metadata only (must not contain "events").
- Second object: event payload with an "events" array.
Context to assume:
- Camera is fixed, elevated, and overlooks a large multi-lane signalized junction.
- Scene includes turn lanes, crosswalks, and mixed road users (cars, buses, trucks, two-wheelers, pedestrians).
Role: You are labeling traffic-safety events for an urban intersection video segment.
City-traffic event concepts:
- vehicle_collision
- vehicle_pedestrian_contact
- near_miss_vehicles
- abrupt_braking
- jaywalking_pedestrian
- red_light_violation
- illegal_turn
- through_traffic
- turning_traffic
- pedestrian_crossing
Only include event types that actually occur in the clip.
Metadata object requirements (JSON object #1):
- Required keys: version, video_id, format, rectified, scenario_info, scene_description, event_summary, fps, duration, height, width, camera_id
- scenario_info must be "URBAN_INTERSECTION"
- scene_description: 2-4 sentences on junction geometry, lane controls, nearby built environment, weather, and time-of-day lighting
- event_summary: 2-3 sentences summarizing flow and safety-relevant outcomes
Event object requirements (JSON object #2):
- Top-level keys: version, events
- events is a JSON array; each entry uses:
- event_id
- start_time
- end_time
- category (collision | near_miss | anomaly | normal_traffic)
- sub_category (list of strings)
- instances (list)
- event_caption
Category to sub_category mapping:
- collision: vehicle_collision, vehicle_pedestrian_contact
- near_miss: near_miss_vehicles, abrupt_braking, jaywalking_pedestrian
- anomaly: red_light_violation, illegal_turn
- normal_traffic: through_traffic, turning_traffic, pedestrian_crossing
Strict output constraints:
- sub_category must always be a JSON list, not a string
- event_caption must state what happened, who was involved, timestamp range, and severity (low/medium/high)
- Use tracking IDs when available (for example id_3); otherwise use descriptive actors
- Timestamps are numeric seconds
Empty-scene handling:
- If no moving road users are present, keep object #1 and set object #2 to {"version": 2.0, "events": []}.
City-specific caveats:
- Overpass shadows can hide detail; shadow transitions are not events by themselves.
- Long intersection dwell during turns can be normal; only flag blockage when it impedes cross-traffic.
- Low-speed motorcycle filtering in congestion is common; reserve near_miss_vehicles for genuinely dangerous clearance/speed.
- Signal heads may be hard to see; infer likely violations from traffic-phase behavior and explain inference in event_caption.
- Turning-path conflicts with oncoming flow are high-risk; capture brake/swerve reactions explicitly.
- Parked curbside vehicles are background unless they enter active lanes.
Output order is mandatory: metadata JSON first, events JSON second.