NvDsEventMsgMeta

class pyds.NvDsEventMsgMeta

保存事件消息元数据。您可以通过在 extMsg 中设置指向对象的指针,将各种类型的对象(车辆、人员、面部等)附加到事件。 同样,您可以通过在 extMsg 中设置指向对象的指针,将自定义对象附加到事件。 自定义对象必须由元数据解析模块相应地处理。

变量:
  • typeNvDsEventType, 事件类型。

  • objTypeNvDsObjectType, 对象类型。

  • bboxNvDsRect, 对象的边界框。

  • locationNvDsGeoLocation, 对象的地理位置。

  • coordinateNvDsCoordinate, 对象的坐标。

  • objSignatureNvDsObjectSignature, 对象的签名。

  • objClassIdint, 对象的类别 ID。

  • sensorIdint, 生成事件的传感器 ID。

  • moduleIdint, 生成事件的分析模块 ID。

  • placeIdint, 与对象相关的地点 ID。

  • componentIdint, 生成此事件的组件 ID。

  • frameIdint, 此事件的视频帧 ID。

  • confidenceint, 推理的置信度。

  • trackingIdint, 对象的跟踪 ID。

  • tsstr, 生成事件的时间戳。

  • objectIdstr, 检测到/推理出的对象的 ID。

  • sensorStrstr, 传感器的身份字符串。

  • otherAttrsstr, 与对象关联的其他属性。

  • videoPathstr, 视频文件名。

  • extMsg – 用于扩展事件消息元数据的对象。 这可以用于现有字段无法容纳的自定义值,或者如果必须附加对象(车辆、人员、面部等)的特定值。

  • extMsgSizeint, extMsg 中自定义对象的大小。

使用示例

def generate_event_msg_meta(data, class_id):
    meta =pyds.NvDsEventMsgMeta.cast(data)
    meta.sensorId = 0
    meta.placeId = 0
    meta.moduleId = 0
    meta.sensorStr = "sensor-0"
    meta.ts = pyds.alloc_buffer(MAX_TIME_STAMP_LEN + 1)
    pyds.generate_ts_rfc3339(meta.ts, MAX_TIME_STAMP_LEN) #Generate timestamp

    # This demonstrates how to attach custom objects.
    # Any custom object as per requirement can be generated and attached
    # like NvDsVehicleObject / NvDsPersonObject. Then that object should
    # be handled in payload generator library (nvmsgconv.cpp) accordingly.
    if(class_id==PGIE_CLASS_ID_VEHICLE):
        meta.type = pyds.NvDsEventType.NVDS_EVENT_MOVING
        meta.objType = pyds.NvDsObjectType.NVDS_OBJECT_TYPE_VEHICLE
        meta.objClassId = PGIE_CLASS_ID_VEHICLE
        obj = pyds.alloc_nvds_vehicle_object()
        obj = generate_vehicle_meta(obj) #See NvDsVehicleObject example code
        meta.extMsg = obj
        meta.extMsgSize = sys.getsizeof(pyds.NvDsVehicleObject);
    if(class_id == PGIE_CLASS_ID_PERSON):
        meta.type =pyds.NvDsEventType.NVDS_EVENT_ENTRY
        meta.objType = pyds.NvDsObjectType.NVDS_OBJECT_TYPE_PERSON;
        meta.objClassId = PGIE_CLASS_ID_PERSON
        obj = pyds.alloc_nvds_person_object()
        obj=generate_person_meta(obj)
        meta.extMsg = obj
        meta.extMsgSize = sys.getsizeof(pyds.NvDsPersonObject)
    return meta

...

user_event_meta = pyds.nvds_acquire_user_meta_from_pool(batch_meta)
if(user_event_meta):
    # Allocating an NvDsEventMsgMeta instance and getting reference
    # to it. The underlying memory is not manged by Python so that
    # downstream plugins can access it. Otherwise the garbage collector
    # will free it when this probe exits.
    msg_meta=pyds.alloc_nvds_event_msg_meta(user_event_meta)
    msg_meta.bbox.top =  obj_meta.rect_params.top
    msg_meta.bbox.left =  obj_meta.rect_params.left
    msg_meta.bbox.width = obj_meta.rect_params.width
    msg_meta.bbox.height = obj_meta.rect_params.height
    msg_meta.frameId = frame_number
    msg_meta.trackingId = long_to_uint64(obj_meta.object_id)
    msg_meta.confidence = obj_meta.confidence
    msg_meta = generate_event_msg_meta(msg_meta, obj_meta.class_id)

    user_event_meta.user_meta_data = msg_meta;
    user_event_meta.base_meta.meta_type = pyds.NvDsMetaType.NVDS_EVENT_MSG_META

    pyds.nvds_add_user_meta_to_frame(frame_meta, user_event_meta)
else:
    print("Error in attaching event meta to buffer\n")
cast(*args, **kwargs)

重载函数。

  1. cast(self: capsule) -> pyds.NvDsEventMsgMeta

转换为 NvDsEventMsgMeta 对象,调用 pyds.NvDsEventMsgMeta(data)

  1. cast(self: int) -> pyds.NvDsEventMsgMeta

转换为 NvDsEventMsgMeta 对象,调用 pyds.NvDsEventMsgMeta(data)