How to encode multiple images using the same objectMeta inside obj_meta_list

• Hardware Platform (Jetson / GPU) - GPU
• DeepStream Version - 6.0.1
• Issue Type( questions, new requirements, bugs) - new requirements
• Requirement details

I want to save a detected object and also the whole scene of that detection. I’m using the same objMeta from the frameMeta->obj_meta_list. I noticed my object image also saved in higher resolution with extra padding. Its like I can’t use the same object meta to save two images. Is there a work around for this.

I use the following source code.

    NvDsObjEncUsrArgs userData = {false};
    /* To be set by user */
    userData.saveImg = false;
    userData.attachUsrMeta = true;
    /* Preset */
    userData.objNum = objMeta->object_id;
    /* Quality */
    userData.quality = 95;
    /*Main Function Call */
    nvds_obj_enc_process(objEncContext, &userData, ipSurf, objMeta, frameMeta);

    NvDsObjEncUsrArgs userData1 = {false};
    userData1.saveImg = false;
    userData1.attachUsrMeta = true;
    userData1.scaleImg = true;
    userData1.scaledWidth = 960;
    userData1.scaledHeight = 540;
    userData1.objNum = objMeta->object_id;
    objMeta->rect_params.width = frameMeta->source_frame_width;
    objMeta->rect_params.height = frameMeta->source_frame_height;
    objMeta->rect_params.top = 0.0f ;
    objMeta->rect_params.left = 0.0f ;
    userData1.quality = 95;
    nvds_obj_enc_process(objEncContext, &userData1, ipSurf, objMeta, frameMeta);

Found the solution.
We can acquire another objectMeta and add the newUsermeta to it.

// encode the current object
NvDsObjEncUsrArgs userData;
userData.saveImg = false;
userData.attachUsrMeta = true;
userData.objNum = objMeta->object_id;
userData.quality = 80;
nvds_obj_enc_process(objEncContext, &userData, ipSurf, objMeta, frameMeta);

// copy the same object meta and attach to the current frame
NvDsObjectMeta *objMetaCopy = nvds_acquire_obj_meta_from_pool(batchMeta);
nvds_copy_obj_meta(objMeta, objMetaCopy);
nvds_add_obj_meta_to_frame(frameMeta, objMetaCopy, nullptr);

// attach the full frame to be encoded 
NvDsObjEncUsrArgs userDataScene;
userDataScene.saveImg = false;
userDataScene.attachUsrMeta = true;
userDataScene.scaleImg = true;
userDataScene.scaledWidth = 960;
userDataScene.scaledHeight = 540;
userDataScene.objNum = static_cast<int32_t>(objMeta->object_id);
userDataScene.quality = 80;
objMeta->rect_params.width = static_cast<float>(MUXER_OUTPUT_WIDTH);
objMeta->rect_params.height = static_cast<float>(MUXER_OUTPUT_HEIGHT);
objMeta->rect_params.top = 0.0f ;
objMeta->rect_params.left = 0.0f ;
nvds_obj_enc_process(objEncContext, &userDataScene, ipSurf, objMeta, frameMeta);
1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.