Skip to content

Associate Entities Node

AI/ML/Tracking

Gives local tracks from one or more cameras a global identity by comparing appearance embeddings. A track is collected for a few observations before it creates a new entity; later tracks that look like a known entity are matched to it, even on another camera. Every board and user of this app using the same task id shares the identities. They live in this process's memory only: after an hour without calls or a restart the task starts over and entity ids begin again at 1. An app can have at most 16 active tasks (64 per process); an idle task is released after an hour.

tracking_associate_entitiesonnx
Inputs7
Outputs4
Security exposure7/10
Packageonnx

Ratings

Scores range from 0 to 10. Higher values mean more impact, exposure, or operational weight.

SecurityAttack surface and exposure impact.
7/10High
PrivacyPotential sensitivity of processed data.
4/10Medium
PerformanceRuntime or resource pressure.
8/10High
GovernancePolicy, audit, or compliance impact.
4/10Medium
ReliabilityOperational stability considerations.
7/10High
CostExternal or compute cost impact.
10/10High

Input Pins

7

Input

Execution
exec_in

Initiate Execution

Observations

Struct Array
observations

Observations with appearance embeddings, e.g. from Extract Appearance. Observations with a track id accumulate evidence per track; ones without are only matched to known entities, and lost tracks only report the entity they already have. Timestamps are Unix milliseconds from one clock shared by all cameras of the task; a missing timestamp means now, and one further ahead of this machine's clock than a minute (or half the entity lifetime, if shorter) is clamped.

AppearanceObservationAppearanceObservation15 fields
x1number:floatrequired
format float
y1number:floatrequired
format float
x2number:floatrequired
format float
y2number:floatrequired
format float
scorenumber:floatrequired
format float
class_idxinteger:int32required
format int32
class_namestring | null
embeddingArray<number:float>

L2-normalized appearance embedding; empty when none was extracted

default []
itemsnumber:floatarray item
format float
camera_idstring

Camera the observation came from

default ""
session_idstring

Stream session of that camera

default ""
tracker_idstring

Tracker instance that issued `track_id`; track ids are only unique per tracker instance

default ""
track_idinteger | null

Local track id from Track Detections, if the observation belongs to a track

format uint64default nullmin 0
stateTrackState

State of the source track; plain detections are `tracked`

default "tracked"
variant 1constvariant

Matched to a detection in the latest frame

const "tracked"
variant 2constvariant

Not matched recently; kept alive for re-identification until it expires

const "lost"
timestamp_msinteger:int64

Frame capture time in Unix milliseconds

format int64default 0
detection_indexinteger | null

Index of the source element in the producing node's input array

format uint32default nullmin 0
Default []

Task Id

String
task_id

Identities are shared by every board, user and camera of this app using the same task id

Default default

Min Similarity

Float
min_similarity

Lowest cosine similarity for matching an observation to an entity

Default 0.4
Range 0 to 1

Ambiguity Margin

Float
ambiguity_margin

A match is left unresolved when the next best entity is at most this much less similar

Default 0.05
Range 0 to 1

Min Observations

Integer
min_observations

Observations a new track needs before it is matched or creates an entity (at least 1)

Default 3

Entity Lifetime (ms)

Integer
entity_ttl_ms

Entities, track bindings and pending tracks unseen for this long, measured by observation timestamps, are forgotten

Default 600000

Output Pins

4

Output

Execution
exec_out

Done with the Execution

Associations

Struct Array
associations

Observations with their global entity id, in input order

EntityAssociationEntityAssociation16 fields
x1number:floatrequired
format float
y1number:floatrequired
format float
x2number:floatrequired
format float
y2number:floatrequired
format float
scorenumber:floatrequired
format float
class_idxinteger:int32required
format int32
class_namestring | null
camera_idstring
default ""
session_idstring
default ""
tracker_idstring
default ""
track_idinteger | null
format uint64default nullmin 0
timestamp_msinteger:int64
format int64default 0
detection_indexinteger | null
format uint32default nullmin 0
entity_idinteger:uint64required

Global entity id, unique within the association task

format uint64min 0
similaritynumber:floatrequired

Cosine similarity to the entity's prototype: of this observation when `matched` or `created`, of the track's last embedded observation when `tracked`

format float
statusAssociationStatusrequired
variant 1constvariant

The local track was already bound to this entity

const "tracked"
variant 2constvariant

The local track was newly matched to an existing entity

const "matched"
variant 3constvariant

No existing entity matched; a new one was created

const "created"
Default []

Unresolved

Struct Array
unresolved

Observations without an entity yet, with the reason and the closest entities

UnresolvedObservationUnresolvedObservation16 fields
x1number:floatrequired
format float
y1number:floatrequired
format float
x2number:floatrequired
format float
y2number:floatrequired
format float
scorenumber:floatrequired
format float
class_idxinteger:int32required
format int32
class_namestring | null
camera_idstring
default ""
session_idstring
default ""
tracker_idstring
default ""
track_idinteger | null
format uint64default nullmin 0
timestamp_msinteger:int64
format int64default 0
detection_indexinteger | null
format uint32default nullmin 0
reasonUnresolvedReasonrequired
variant 1constvariant

The local track has not been observed often enough to create an entity

const "pending"
variant 2constvariant

Two or more entities match within the ambiguity margin

const "ambiguous"
variant 3constvariant

The observation carries no usable embedding

const "missing_embedding"
variant 4constvariant

No track id, so no evidence can accumulate and no entity is created

const "untracked"
variant 5constvariant

The track is lost: its box is a prediction, so it neither matches nor creates an entity

const "lost"
observationsinteger:uint32required

Observations accumulated for this local track so far

format uint32min 0
candidatesArray<EntityCandidate>required

Closest entities, most similar first

itemsEntityCandidatearray item
entity_idinteger:uint64required
format uint64min 0
similaritynumber:floatrequired
format float
Default []

Entity Count

Integer
entity_count

Number of entities currently known to this task

Node Info

Internal name
tracking_associate_entities
Category
AI/ML/Tracking
Version
1