Encode fullframe body face
This commit is contained in:
parent
97b99ec6ed
commit
e90b08bd42
@ -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;
|
||||
}
|
||||
|
||||
@ -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 *);
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user