Encode fullframe body face

This commit is contained in:
Barzan Hayati 2025-09-11 00:34:50 +00:00
parent 97b99ec6ed
commit e90b08bd42
2 changed files with 71 additions and 5 deletions

View File

@ -46,6 +46,8 @@ FaceNvInferServerManager::FaceNvInferServerManager() {
MUXER_OUTPUT_WIDTH = config["MUXER_OUTPUT_WIDTH"];
MUXER_OUTPUT_HEIGHT = config["MUXER_OUTPUT_HEIGHT"];
threshold_face_detection = config["threshold_face_detection"];
compression_coefficient =
static_cast<float>(config["compression_coefficient"]) * 100;
}
bool FaceNvInferServerManager::create_face_nv_infer_server(int num_sources) {
@ -1148,6 +1150,53 @@ void FaceNvInferServerManager::add_face_body(int object_id, float face_score) {
return;
}
void FaceNvInferServerManager::encode_objects_attach_meta(
gpointer ctx, NvBufSurface *ip_surf, NvDsFrameMeta *frame_meta,
NvDsObjectMeta *obj_meta) {
NvDsObjEncUsrArgs objData = {0};
/* To be set by user */
objData.saveImg = FaceNvInferServerManager::save_img;
objData.attachUsrMeta = FaceNvInferServerManager::attach_user_meta;
/* Set if Image scaling Required */
objData.scaleImg = FALSE;
objData.scaledWidth = 0;
objData.scaledHeight = 0;
/* Preset */
// objData.objNum = num_rects;
/* Quality */
objData.quality = 80;
/* Set to calculate time taken to encode JPG image. */
// if (calc_enc) {
// objData.calcEncodeTime = 1;
// }
/*Main Function Call */
nvds_obj_enc_process(static_cast<NvDsObjEncCtxHandle>(ctx), &objData,
ip_surf, obj_meta, frame_meta);
}
void FaceNvInferServerManager::encode_full_frame_attach_meta(
gpointer ctx, NvBufSurface *ip_surf, NvDsFrameMeta *frame_meta) {
NvDsObjEncUsrArgs frameData = {0};
/* Preset */
frameData.isFrame = 1;
/* To be set by user */
frameData.saveImg = FaceNvInferServerManager::save_img;
frameData.attachUsrMeta = FaceNvInferServerManager::attach_user_meta;
/* Set if Image scaling Required */
frameData.scaleImg = FALSE;
frameData.scaledWidth = 0;
frameData.scaledHeight = 0;
/* Quality */
frameData.quality = compression_coefficient;
/* Set to calculate time taken to encode JPG image. */
// if (calc_enc) {
// frameData.calcEncodeTime = 1;
// }
/* Main Function Call */
nvds_obj_enc_process(static_cast<NvDsObjEncCtxHandle>(ctx), &frameData,
ip_surf, NULL, frame_meta);
}
// AVX check function
bool FaceNvInferServerManager::allZeroAVX(const float *data, size_t size) {
size_t i = 0;
@ -1231,12 +1280,14 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
NvDsBatchMeta *batch_meta =
gst_buffer_get_nvds_batch_meta(GST_BUFFER(info->data));
if (!batch_meta) return GST_PAD_PROBE_OK;
bool is_zero_embedding_vector;
bool is_zero_embedding_vector = false;
bool current_full_frame_is_captured = false;
/* Iterate each frame metadata in batch */
for (NvDsMetaList *l_frame = batch_meta->frame_meta_list; l_frame != NULL;
l_frame = l_frame->next) {
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *)l_frame->data;
current_full_frame_is_captured = false;
/* Iterate object metadata in frame */
for (NvDsMetaList *l_obj = frame_meta->obj_meta_list; l_obj != NULL;
@ -1408,10 +1459,6 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
// }
}
}
// std::quick_exit(0);
if (is_zero_embedding_vector == 0) {
;
}
if (score_face > threshold_face_detection) {
// std::cout<<"obj_meta->rect_params left =
@ -1513,6 +1560,17 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
obj_meta);
// nvds_add_obj_meta_to_frame(frame_meta, final_face_obj,
// NULL);
if (is_zero_embedding_vector == false) {
if (current_full_frame_is_captured == false) {
encode_full_frame_attach_meta(ctx, ip_surf,
frame_meta);
current_full_frame_is_captured = true;
}
encode_objects_attach_meta(ctx, ip_surf, frame_meta,
obj_meta);
encode_objects_attach_meta(ctx, ip_surf, frame_meta,
final_face_obj);
}
}
// for (size_t jkl = 0; jkl < outputLayersInfo.size(); jkl++) {
@ -1618,6 +1676,7 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
}
}
nvds_obj_enc_finish(static_cast<NvDsObjEncCtxHandle>(ctx));
// use_device_mem = 1 - use_device_mem;
return GST_PAD_PROBE_OK;
}

View File

@ -24,6 +24,9 @@ class FaceNvInferServerManager {
static std::vector<FACE_BODY> face_body_list;
GstElement *face_detector = NULL;
int face_batch_size;
inline static constexpr bool save_img = TRUE;
inline static constexpr bool attach_user_meta = TRUE;
inline static float compression_coefficient;
static unsigned int FACE_NET_WIDTH;
static unsigned int FACE_NET_HEIGHT;
@ -65,4 +68,8 @@ class FaceNvInferServerManager {
static void add_face_body(int, float);
static bool allZeroAVX(const float *, size_t);
static bool allZero(const float *, size_t);
static void encode_full_frame_attach_meta(gpointer, NvBufSurface *,
NvDsFrameMeta *);
static void encode_objects_attach_meta(gpointer, NvBufSurface *,
NvDsFrameMeta *, NvDsObjectMeta *);
};