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_WIDTH = config["MUXER_OUTPUT_WIDTH"];
|
||||||
MUXER_OUTPUT_HEIGHT = config["MUXER_OUTPUT_HEIGHT"];
|
MUXER_OUTPUT_HEIGHT = config["MUXER_OUTPUT_HEIGHT"];
|
||||||
threshold_face_detection = config["threshold_face_detection"];
|
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) {
|
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;
|
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
|
// AVX check function
|
||||||
bool FaceNvInferServerManager::allZeroAVX(const float *data, size_t size) {
|
bool FaceNvInferServerManager::allZeroAVX(const float *data, size_t size) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
@ -1231,12 +1280,14 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
NvDsBatchMeta *batch_meta =
|
NvDsBatchMeta *batch_meta =
|
||||||
gst_buffer_get_nvds_batch_meta(GST_BUFFER(info->data));
|
gst_buffer_get_nvds_batch_meta(GST_BUFFER(info->data));
|
||||||
if (!batch_meta) return GST_PAD_PROBE_OK;
|
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 */
|
/* Iterate each frame metadata in batch */
|
||||||
for (NvDsMetaList *l_frame = batch_meta->frame_meta_list; l_frame != NULL;
|
for (NvDsMetaList *l_frame = batch_meta->frame_meta_list; l_frame != NULL;
|
||||||
l_frame = l_frame->next) {
|
l_frame = l_frame->next) {
|
||||||
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *)l_frame->data;
|
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *)l_frame->data;
|
||||||
|
current_full_frame_is_captured = false;
|
||||||
|
|
||||||
/* Iterate object metadata in frame */
|
/* Iterate object metadata in frame */
|
||||||
for (NvDsMetaList *l_obj = frame_meta->obj_meta_list; l_obj != NULL;
|
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) {
|
if (score_face > threshold_face_detection) {
|
||||||
// std::cout<<"obj_meta->rect_params left =
|
// std::cout<<"obj_meta->rect_params left =
|
||||||
@ -1513,6 +1560,17 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
obj_meta);
|
obj_meta);
|
||||||
// nvds_add_obj_meta_to_frame(frame_meta, final_face_obj,
|
// nvds_add_obj_meta_to_frame(frame_meta, final_face_obj,
|
||||||
// NULL);
|
// 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++) {
|
// 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;
|
// use_device_mem = 1 - use_device_mem;
|
||||||
return GST_PAD_PROBE_OK;
|
return GST_PAD_PROBE_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,9 @@ class FaceNvInferServerManager {
|
|||||||
static std::vector<FACE_BODY> face_body_list;
|
static std::vector<FACE_BODY> face_body_list;
|
||||||
GstElement *face_detector = NULL;
|
GstElement *face_detector = NULL;
|
||||||
int face_batch_size;
|
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_WIDTH;
|
||||||
static unsigned int FACE_NET_HEIGHT;
|
static unsigned int FACE_NET_HEIGHT;
|
||||||
@ -65,4 +68,8 @@ class FaceNvInferServerManager {
|
|||||||
static void add_face_body(int, float);
|
static void add_face_body(int, float);
|
||||||
static bool allZeroAVX(const float *, size_t);
|
static bool allZeroAVX(const float *, size_t);
|
||||||
static bool allZero(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