description
Collision-warning rule in real-world metres. Each camera is calibrated with a 4-point planar homography (image_points → real_points); bbox reference points are transformed to floor coordinates and pairwise distances checked every frame: MHE↔MHE closer than min_distance_mhe_vs_mhe (default 2.0 m) while BOTH vehicles are moving, or MHE↔person closer than min_distance_mhe_vs_person (default 2.5 m) while the MHE is moving. Persons riding an MHE are excluded as drivers (bbox-overlap history); a vehicle stationary >= 3 s (with brief-movement tolerance) is exempt; near-duplicate boxes are skipped. A pair fires after violent_count consecutive illegal frames, once per pair. Confidence is a Gaussian of the measured distance blended with (1 - IoU). Cross-object rule — pure geometry + homography, no extra model.
use cases
- forklift-to-pedestrian struck-by prevention in shared warehouse floors
- MHE convoy distance enforcement in narrow aisles
- any real-distance proximity requirement between two tracked object classes
limitations
- needs per-camera homography calibration (4 image points ↔ 4 floor points in metres)
- distances are floor-plane — raised loads/mezzanines break the planar assumption
- fire-once per track pair; a new approach by the same pair after track loss re-fires
config parameters
general
| Parameter | Type | Default | Notes |
|---|---|---|---|
| min_distance_mhe_vs_mhe * | number | 2.0 | metres (min 0) |
| min_distance_mhe_vs_person * | number | 2.5 | metres (min 0) |
| legal_stop_duration_seconds | number | 3.0 | (min 0) |
zone
| Parameter | Type | Default | Notes |
|---|---|---|---|
| image_points * | array of pair of number | [] | 4 calibration corners in image pixels (exactly 4 points / 2 endpoints; empty until per-camera setup) |
| real_points * | array of pair of number | [] | matching floor coordinates in metres (exactly 4 points / 2 endpoints; empty until per-camera setup) |
advanced
| Parameter | Type | Default | Notes |
|---|---|---|---|
| confidence_threshold | number | 0.5 | (min 0, max 1) |
| min_detections | integer | 5 | (min 1) |
| violent_count | integer | 1 | (min 1) |
| stationary_gap_seconds | number | 1.0 | (min 0) |
| move_distance_threshold | number | 0.2 | (min 0) |
| same_object_iou | number | 0.2 | (min 0, max 1) |
| driver_iou_threshold | number | 0.05 | (min 0, max 1) |
| driver_min_ratio | number | 0.6 | (min 0, max 1) |
| driver_min_detections | integer | 3 | (min 1) |
| driver_checking_frames | integer | 10 | (min 1) |
| evidence_frames | integer | 50 | (min 1) |
golden replay cases
| Case | Frames | Expected events |
|---|---|---|
| proximity | 20 | 1 |