Skip to main content

Tracks

A track represents a single detected object moving through a camera’s field of view over time. The state machine creates a track when an object is first detected and maintains it as new detections arrive.

Track state object

Every signal delivered to your workflow includes a track_state object with the full current state of the track:
{
  "track_state": {
    "track_id": "019bb7ea-4050-7e9b-8761-f8df773fd3e5",
    "tag": "forklift",
    "datasource_id": "507eaeca-cc89-4501-9e0d-0d062a8f355d",
    "datasource_name": "Op 120",
    "device_id": "41",
    "site_id": "3",
    "site_name": "Mid-Range Engine Plant CMEP",
    "first_seen": "2026-01-13T15:12:52.005Z",
    "last_seen": "2026-01-13T15:18:52.005Z",
    "track_age": "360.000",
    "detection_count": 43,
    "position": { ... },
    "motion": { ... },
    "zones": { ... },
    "interactions": [ ... ]
  }
}

Key track fields

FieldDescription
track_idUnique identifier for this track (UUID)
tagObject type detected (e.g., “forklift”, “person”, “amr”)
datasource_idCamera/data source UUID
datasource_nameHuman-readable camera name
site_id / site_nameThe site where this camera is located
track_startWhen the track was first created in the system
first_seenWhen the state machine first saw this track. Usually the same as track_start, but can differ if the system restarted.
last_seenTimestamp of the most recent detection received — updates with every track_updated signal
track_ageDuration of the track in seconds
detection_countNumber of individual detections in this track

Position

The track’s current position includes both pixel and geo-referenced coordinates:
{
  "position": {
    "pix": { "x": 902, "y": 448 },
    "geo": { "lon": -85.950773951, "lat": 39.130477131 },
    "polygon": {
      "coordinates": [[[867, 397], [937, 397], [937, 499], [867, 499], [867, 397]]]
    }
  }
}
  • pix — pixel coordinates of the object’s center in the camera frame
  • geo — geographic longitude/latitude (if camera is geo-calibrated)
  • polygon — the bounding box of the detected object

Motion

Velocity and distance metrics in both pixel and geographic units:
{
  "motion": {
    "pix": {
      "velocity": 6.52,
      "distance": 438.77,
      "instantaneous_velocity": 10.7,
      "instantaneous_direction": 86.3,
      "sample_count": 41
    },
    "geo": {
      "velocity": 0.23,
      "distance": 16.57,
      "instantaneous_velocity": 1.5,
      "instantaneous_direction": 86.3,
      "sample_count": 41
    }
  }
}
FieldDescription
velocityRolling average speed (px/s or m/s)
distanceTotal distance traveled
instantaneous_velocitySpeed between the two most recent detections
instantaneous_directionDirection of travel in degrees (0-360) between the two most recent detections
sample_countNumber of detection pairs used for calculation
Geographic motion fields (geo) are only populated when the camera is geo-calibrated. Otherwise they will be null.

Zones

A zone is a defined polygon region within a camera’s field of view. Zones are configured in the Worlds platform and represent areas of interest — loading bays, walkways, restricted areas, intersections, etc.

Active zones

The zones.active object contains every zone the track currently intersects:
{
  "zones": {
    "active": {
      "79": {
        "zone_id": "79",
        "zone_name": "op120-zone",
        "entered_at": "2026-01-13T15:12:52.005Z",
        "dwell_time": 360,
        "detection_count": 43,
        "intersection": {
          "current_percent": 59.25,
          "avg_percent": 21.17,
          "sample_count": 43
        },
        "motion": {
          "pix": { "velocity": 6.52, "distance": 438.77 },
          "geo": { "velocity": 0.23, "distance": 16.57 }
        }
      }
    }
  }
}

Key zone fields

FieldDescription
zone_id / zone_nameZone identifier and human-readable name
entered_atWhen the track first entered this zone
dwell_timeHow long the track has been in this zone (seconds)
detection_countNumber of detections while in this zone
intersection.current_percentHow much of the object’s bounding box overlaps the zone right now (0–100%)
intersection.avg_percentAverage intersection over the track’s time in this zone
motionPer-zone velocity and distance (may differ from overall track motion)

Zone history

When a track exits a zone, it moves from zones.active to zones.history:
{
  "zones": {
    "history": [
      {
        "zone_id": "42",
        "zone_name": "Loading Bay 1",
        "entered_at": "2026-01-13T15:10:00.000Z",
        "exited_at": "2026-01-13T15:12:30.000Z",
        "dwell_time": 150,
        "motion": { ... }
      }
    ]
  }
}
History is useful for checks like zone sequence validation (did the track visit zones in a specific order?) and historical velocity analysis.

Zone sequence

The zones.sequence array records the order in which zones were entered:
{
  "zones": {
    "sequence": [
      { "zone_id": "42", "entered_at": "2026-01-13T15:10:00.000Z" },
      { "zone_id": "79", "entered_at": "2026-01-13T15:12:52.005Z" }
    ]
  }
}
This is used by the zone sequence check to detect wrong-way travel or validate that objects follow expected paths.

Interactions (batch mode only)

When the trigger is configured for batch mode, the state machine calculates interactions between tracks. For each detection, it looks at a 1-second window before and after and identifies other tracks whose bounding boxes were nearby.
{
  "interactions": [
    {
      "track_id": "other-track-uuid",
      "tag": "Vehicle",
      "first_interaction_at": "2026-01-15T10:00:10.000Z",
      "last_interaction_at": "2026-01-15T10:00:25.000Z",
      "total_duration": 15.0,
      "proximity": {
        "interaction_count": 20,
        "pix": { "min": 15.0, "avg": 30.5, "min_at": "2026-01-15T10:00:15.000Z" },
        "geo": { "min": 0.5, "avg": 1.2, "min_at": "2026-01-15T10:00:15.000Z" }
      },
      "overlap": {
        "overlap_count": 5,
        "max_overlap_percent": 0.35,
        "max_overlap_at": "2026-01-15T10:00:20.000Z",
        "total_overlap_duration": 3.0
      }
    }
  ]
}
FieldDescription
proximity.pix.minClosest pixel distance between bounding box edges
proximity.geo.minClosest geographic distance in meters
overlap.max_overlap_percentMaximum bounding box overlap as a percentage
overlap.total_overlap_durationTotal seconds the bounding boxes overlapped
total_durationTotal time the two tracks were interacting
Interactions are used by Type III checks for use cases like safety near-miss detection, PPE compliance, and tailgating.
In streaming mode, the interactions array is always empty. Interaction calculation requires looking at all detections in a time window, which is only possible after the track has expired in batch processing.

Zone state

In addition to track-level zone data, the state machine also produces zone state — an aggregate view of what’s happening in a specific zone. This is available when the trigger is configured with signal type Zone State.
{
  "zone_state": {
    "zone_id": "92",
    "zone_name": "Aisle-Zone-West",
    "datasource_id": "2ba0f384-...",
    "datasource_name": "Shortblock_LB1 - West View",
    "active_tracks": {
      "track-uuid-1": {
        "tag": "forklift",
        "entered_at": "2026-02-19T18:35:59.803Z",
        "dwell_time": 25.0,
        "detection_count": 7,
        "intersection": { "current_percent": 45.3, "avg_percent": 82.3 },
        "motion": { "pix": { "velocity": 40.8, "instantaneous_velocity": 10.7 } }
      }
    },
    "track_count": 4,
    "updated_at": "2026-02-19T18:36:40.464Z",
    "trigger_track_id": "track-uuid-2",
    "trigger_tag": "tugger"
  }
}
FieldDescription
active_tracksMap of all tracks currently in the zone, with per-track metrics
track_countTotal number of active tracks in the zone
trigger_track_idThe track that caused this zone update
trigger_tagObject type of the trigger track
Zone state is used with the Zone Activity Check for use cases like congestion and congregation where you care about aggregate zone activity rather than individual track behavior.