NvDsEventMsgMeta¶
- class pyds.NvDsEventMsgMeta¶
保存事件消息元数据。您可以通过在
extMsg
中设置指向对象的指针,将各种类型的对象(车辆、人员、面部等)附加到事件。 同样,您可以通过在extMsg
中设置指向对象的指针,将自定义对象附加到事件。 自定义对象必须由元数据解析模块相应地处理。- 变量:
type –
NvDsEventType
, 事件类型。objType –
NvDsObjectType
, 对象类型。bbox –
NvDsRect
, 对象的边界框。location –
NvDsGeoLocation
, 对象的地理位置。coordinate –
NvDsCoordinate
, 对象的坐标。objSignature –
NvDsObjectSignature
, 对象的签名。objClassId – int, 对象的类别 ID。
sensorId – int, 生成事件的传感器 ID。
moduleId – int, 生成事件的分析模块 ID。
placeId – int, 与对象相关的地点 ID。
componentId – int, 生成此事件的组件 ID。
frameId – int, 此事件的视频帧 ID。
confidence – int, 推理的置信度。
trackingId – int, 对象的跟踪 ID。
ts – str, 生成事件的时间戳。
objectId – str, 检测到/推理出的对象的 ID。
sensorStr – str, 传感器的身份字符串。
otherAttrs – str, 与对象关联的其他属性。
videoPath – str, 视频文件名。
extMsg – 用于扩展事件消息元数据的对象。 这可以用于现有字段无法容纳的自定义值,或者如果必须附加对象(车辆、人员、面部等)的特定值。
extMsgSize – int, 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)¶
重载函数。
cast(self: capsule) -> pyds.NvDsEventMsgMeta
转换为
NvDsEventMsgMeta
对象,调用 pyds.NvDsEventMsgMeta(data)cast(self: int) -> pyds.NvDsEventMsgMeta
转换为
NvDsEventMsgMeta
对象,调用 pyds.NvDsEventMsgMeta(data)