Skip to main content

Static object experimental data stream

Available from AXIS OS 13.0, the com.axis.scene.frame.experimental.static.v0 topic provides scene metadata for both moving and stationary objects. The topic also introduces confidence groups, simplified object attributes, and updates that omit unchanged detections. It extends the Frame v1 format.

You can consume the topic over MQTT or from an ACAP application through the Device Data Hub API.

warning

Experimental topic

Use this topic only for testing and evaluation. Don't use it in production. The topic will be removed after the evaluation period. Some features may later become part of production topics, based on feedback.

The topic is currently not supported on radar cameras, including AXIS Q1656-DLE and AXIS Q1686-DLE.

Changes from Frame v1

The experimental topic changes how you interpret both individual detections and complete messages.

Type of changeUpdate
AddedEvery detection has a moving property
AddedEvery classification has a confidence_group in addition to its score
AddedA Disappeared event marks an object as temporarily not detected while its track remains active
ChangedA message may omit unchanged detections; an omitted detection keeps its previous state
ChangedColor, clothing color, and face visibility contain one result instead of scored alternatives or a score

Comparing the formats

The following examples represent the same human detection. The experimental format adds confidence_group and moving. It also replaces Frame v1 arrays, which contain every supported color and its score, with the most likely color for each item of clothing.

Experimental detection
{
"object_track_id": "human-17",
"class": {
"type": "Human",
"score": 0.88,
// Added: use this value when filtering classifications
"confidence_group": "Selective",
// Changed: one value without alternatives or scores
"upper_clothing_color": "red",
"lower_clothing_color": "black"
},
"bounding_box": {
"left": 0.31,
"top": 0.38,
"right": 0.43,
"bottom": 0.73
},
// Added: current movement state
"moving": false
}

Movement state

Each detection has a required moving property that reports whether the object's position in the scene is changing:

  • true: The object's position is changing.
  • false: The object's position is stationary.

The property doesn't describe movement within the object. For example, a person dancing in place can have moving: false because their position remains the same. The producer determines whether the object is moving based on its detected position. This assessment can change during a track as the detected position changes.

Filter classifications by confidence group

Each classification includes both score and confidence_group. A given score can represent different levels of confidence across models, firmware versions, and analytics releases. As a result, filtering on a fixed score can produce different results after an update.

Use confidence_group instead of a fixed score threshold to decide which classifications to accept. Don't calculate a confidence group from score.

The groups are ordered from broader detection to higher confidence. Each classification has exactly one group. Use the groups as acceptance settings for your use case, not as fixed score ranges. The use cases below are examples, not definitions of the groups.

  • Broad: Search across all possible detections when missing one is costly.
  • Inclusive: Provide a broad set of candidates for further analysis by an AI system.
  • Balanced: Support general-purpose detection with a balance of missed and false detections.
  • Selective: Trigger notifications when false detections are more costly.
  • Strict: Trigger an action only for highly reliable detections.

Groups are mutually exclusive. A Balanced classification is more confident than an Inclusive classification, but it isn't also Inclusive. To require Balanced confidence or higher, check for Balanced, Selective, or Strict.

Because each classification has its own group, you can use different minimum groups for different objects or actions. For example, accept Balanced for people counting but require Strict before triggering an intrusion alert.

To set a minimum confidence group, filter out every broader group. For example, a minimum of Balanced filters out Broad and Inclusive, leaving Balanced, Selective, and Strict.

You can use Data Transformation with jq to filter the topic on the device. This expression removes Broad and Inclusive detections:

jq expression
.detections |= (
. // []
| map(
.class.confidence_group as $group
| select($group != "Broad" and $group != "Inclusive")
)
)

Read simplified object attributes

The experimental topic simplifies attributes that otherwise require you to compare scores. It reports only the most likely color or clothing color, without a score. It also reports face visibility as a boolean value.

Object classFrame v1Experimental topic
Bus, Car, and Truckcolors: every supported color and its scorecolor: the most likely color as a string
Humanupper_clothing_colors: every supported color and its scoreupper_clothing_color: the most likely color as a string
Humanlower_clothing_colors: every supported color and its scorelower_clothing_color: the most likely color as a string
Headface_visible: a score from 0.0 to 1.0face_visible: true or false

Other attributes keep their Frame v1 representation. This includes carries_bag, license_plate_id, nested license_plate data, and the country_code, plate_number, and vehicle_id properties of a license plate detection.

Interpret updates and tracking events

Frame v1 reports all detections present in each frame. The experimental topic can instead omit a detection when its state hasn't changed. For example, a stationary object may not appear in every message.

Maintain the current state

To maintain the current state of the scene, store the latest detection for each object_track_id and update it as follows:

  • When an ID appears for the first time, add the detection to your current object state.
  • When the same ID appears again, replace its previous detection and mark the object as detected.
  • When a message omits an ID, leave that detection and its visibility state unchanged.
  • When you receive Rename, associate the detections stored for from_id with to_id. Use to_id as the continuing identity.
  • When you receive Disappeared, mark the object as not detected.
  • When you receive TrackEnded, remove the object from your current state. It won't be mentioned again.