Display Stream Info Node

Displays metadata on the video stream

Inputs & Outputs

  • Inputs : 1, Media Format : Raw Video
  • Outputs : 1, Media Format: Raw Video
  • Output Metadata : None

Properties

Property

Value

show_fps

Display effective frame rate at which the video is being processed. Boolean.

ex. true / false

show_objects

If enabled, Location relative to detected object where the label will be displayed along with bounding box.

Options: disabled, bottom_left, bottom_right, top_left, top_right

show_object_detail

If enabled, shows Object's Tracking IDs and Confidence scores when Display Objects is enabled.

Ex. true/false

object_types

If specified, only display objects of these types. Else displays all objects.

Ex. car,person

Accepted formats:
object_label: any object of this type, with or without a classifier attribute. Example: car

object_label.class_type: any object of this type that has a specific classifier attribute. Example: car.red

object_label.*: any object of this type that has at least one classifier attribute. Example: car.* (this will match car.red, car.yellow, etc)

show_metadata

Display stream metadata contained in the video frame. Boolean.

ex. true / false

log_metadata

Log stream metadata contained in the video frame to Console, so it can be viewed under Deployment -> Logs tab. Boolean.

ex. true / false

meta_list

Comma separated list of metadata properties to display/log.
The set of available properties is the combination of individual metadata properties added by all nodes previous to this node.

Example:
video1.source_name - This will display the stream name on the video.

Metadata

Access metadata using the Function Node or using the API, from the snapshot or clip saved downstream of this node.

Metadata Property

Description

None

None

Customize

In order to customize this node for your use case, use the code below inside a Function Node.

from lumeopipeline import VideoFrame  # Lumeo lib to access frame and metadata
from lumeopipeline import Utils
import time

FPS_MEASUREMENT_INTERVAL = 30
frame_count = 0
fps = 0
last_epoch = time.time()
meta_keys_to_show = None

def process_frame(frame: VideoFrame, show_fps=False, show_metadata=False, log_metadata=False, meta_list=None, node_id=None, **kwargs) -> bool:

    global frame_count
    global fps
    global last_epoch
    global meta_keys_to_show
    global FPS_MEASUREMENT_INTERVAL

    show_fps = (show_fps in ["true", "True", True])
    show_metadata = (show_metadata in [u'true', u'True', True])
    log_metadata = (log_metadata in [u'true', u'True', True])

    if meta_keys_to_show is None:
      meta_keys_to_show = meta_list.replace(" ","").split(",") if meta_list is not None else []

    frame_count = frame_count + 1
    if frame_count % FPS_MEASUREMENT_INTERVAL == 0:
      time_elapsed = time.time() - last_epoch
      fps = int(FPS_MEASUREMENT_INTERVAL/time_elapsed)
      last_epoch = time.time()
    
    with frame.data() as mat:
      yidx = 50
      if show_fps:
        (label_width, label_height) = Utils.write_label_on_frame(mat, 25, yidx, "FPS: " + str(fps))
        yidx = yidx + label_height

      if (show_metadata or log_metadata):  
        try:
          meta = frame.meta()
          if meta is not None:
            for (key, value) in meta.get_all().items(): 
              if value is not None and (len(meta_keys_to_show) == 0 or key in meta_keys_to_show):
                if len(meta_keys_to_show) == 0:
                  label = key + " : " + str(value)
                else:
                  label = str(value)

                if show_metadata:
                  (label_width, label_height) = Utils.write_label_on_frame(mat, 25, yidx, label)
                  yidx = yidx + label_height

                if log_metadata:
                  print("[{}] {}".format(node_id, label))

        except Exception as error:
            print(error, flush=True)
            pass

    return True

Did this page help you?