Refactor array copying
This commit is contained in:
parent
e70c9bbd6a
commit
e7c20e08ea
@ -1398,9 +1398,8 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
||||
// std::endl;
|
||||
// }
|
||||
if ((strcmp(layer.layerName, "bbox") == 0)) {
|
||||
for (int l = 0; l < 4; l++) {
|
||||
face_location[l] = data_face[l];
|
||||
}
|
||||
std::memcpy(face_location, data_face,
|
||||
4 * sizeof(float));
|
||||
}
|
||||
if ((strcmp(layer.layerName, "score") == 0)) {
|
||||
score_face = data_face[0];
|
||||
@ -1634,12 +1633,9 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
||||
// add custom infromation to metadata by: set_metadata_ptr, copy_user_meta,
|
||||
// release_user_meta
|
||||
void *FaceNvInferServerManager::set_metadata_ptr(float *arr) {
|
||||
int i = 0;
|
||||
float *user_metadata =
|
||||
(float *)g_malloc0(EMBEDDING_VECTOR_SIZE * sizeof(float));
|
||||
for (i = 0; i < EMBEDDING_VECTOR_SIZE; i++) {
|
||||
user_metadata[i] = arr[i];
|
||||
}
|
||||
std::memcpy(user_metadata, &arr[0], EMBEDDING_VECTOR_SIZE * sizeof(float));
|
||||
return (void *)user_metadata;
|
||||
}
|
||||
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
#define PGIE_DETECTED_CLASS_NUM 1
|
||||
#define BODY_COMPONENT_ID 1
|
||||
#define IMPRECISE_FACE_COMPONENT_ID 2
|
||||
#define BODY_TENSOR_SIZE 57
|
||||
#define MAX_BODY_PER_FRAME 100
|
||||
|
||||
gint NvInferServerManager::frame_number = 0;
|
||||
unsigned int NvInferServerManager::PGIE_NET_WIDTH = 1;
|
||||
@ -339,8 +341,8 @@ uint NvInferServerManager::extract_tensor_metadata(
|
||||
// std::cout << " Dims: [";
|
||||
// for (unsigned int mno = 0; mno < numDims; ++mno) {
|
||||
// std::cout << layer.inferDims.d[mno];
|
||||
// // layer.inferDims.d[0] = 100;
|
||||
// // layer.inferDims.d[1] = 57;
|
||||
// // layer.inferDims.d[0] = MAX_BODY_PER_FRAME;
|
||||
// // layer.inferDims.d[1] = BODY_TENSOR_SIZE;
|
||||
// if (mno < numDims - 1)
|
||||
// std::cout << ", ";
|
||||
// }
|
||||
@ -350,9 +352,8 @@ uint NvInferServerManager::extract_tensor_metadata(
|
||||
|
||||
uint detected_persons = 0;
|
||||
float *data = static_cast<float *>(layer.buffer);
|
||||
for (unsigned int jkl = 0; jkl < 100;
|
||||
jkl++) { // maximum 100 persons for each frame
|
||||
if (data[jkl * 57 + 4] > threshold_body_detection) {
|
||||
for (unsigned int jkl = 0; jkl < MAX_BODY_PER_FRAME; jkl++) {
|
||||
if (data[jkl * BODY_TENSOR_SIZE + 4] > threshold_body_detection) {
|
||||
detected_persons++;
|
||||
}
|
||||
}
|
||||
@ -404,7 +405,8 @@ void NvInferServerManager::update_frame_with_face_body_meta(
|
||||
// injecting your own custom objects into the pipeline and need
|
||||
// to differentiate your component from PGIE/SGIE.
|
||||
|
||||
imprecise_face_obj_meta->confidence = data[index * 57 + 4];
|
||||
imprecise_face_obj_meta->confidence =
|
||||
data[index * BODY_TENSOR_SIZE + 4];
|
||||
// imprecise_face_obj_meta->object_id = UNTRACKED_OBJECT_ID;
|
||||
imprecise_face_obj_meta->class_id =
|
||||
IMPRECISE_FACE_CLASS_ID; // 0 for body detection
|
||||
@ -413,17 +415,18 @@ void NvInferServerManager::update_frame_with_face_body_meta(
|
||||
NvOSD_TextParams &text_params_imprecise_face =
|
||||
imprecise_face_obj_meta->text_params;
|
||||
/* Assign bounding box coordinates. */
|
||||
rect_params_imprecise_face.left =
|
||||
(data[index * 57 + 0] * MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_imprecise_face.left = (data[index * BODY_TENSOR_SIZE + 0] *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_imprecise_face.top =
|
||||
(data[index * 57 + 1] * MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
(data[index * BODY_TENSOR_SIZE + 1] * MUXER_OUTPUT_HEIGHT /
|
||||
PGIE_NET_HEIGHT);
|
||||
Point2D left_down_shoulder =
|
||||
find_left_down_corner_shoulder(data, index);
|
||||
rect_params_imprecise_face.width =
|
||||
((left_down_shoulder.x - data[index * 57 + 0]) *
|
||||
((left_down_shoulder.x - data[index * BODY_TENSOR_SIZE + 0]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_imprecise_face.height =
|
||||
((left_down_shoulder.y - data[index * 57 + 1]) *
|
||||
((left_down_shoulder.y - data[index * BODY_TENSOR_SIZE + 1]) *
|
||||
MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
|
||||
/* Border of width 3. */
|
||||
@ -448,8 +451,10 @@ void NvInferServerManager::update_frame_with_face_body_meta(
|
||||
// adding landmarks to imprecise_face_obj_meta as user_meta
|
||||
NvDsUserMeta *um1 = nvds_acquire_user_meta_from_pool(batch_meta);
|
||||
assert(um1 != NULL);
|
||||
um1->user_meta_data =
|
||||
set_metadata_ptr(&(data[index * 57])); // Add landmarks here
|
||||
|
||||
um1->user_meta_data = set_metadata_ptr(
|
||||
&(data[index * BODY_TENSOR_SIZE])); // Add landmarks here
|
||||
|
||||
um1->base_meta.meta_type =
|
||||
NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID;
|
||||
um1->base_meta.copy_func = (NvDsMetaCopyFunc)copy_user_meta;
|
||||
@ -466,22 +471,22 @@ void NvInferServerManager::update_frame_with_face_body_meta(
|
||||
'\0'; // Ensure null-termination
|
||||
body_obj_meta->unique_component_id =
|
||||
BODY_COMPONENT_ID; // meta->unique_id;
|
||||
body_obj_meta->confidence = data[index * 57 + 4];
|
||||
body_obj_meta->confidence = data[index * BODY_TENSOR_SIZE + 4];
|
||||
// body_obj_meta->object_id = UNTRACKED_OBJECT_ID;
|
||||
body_obj_meta->class_id = PGIE_CLASS_ID_PERSON; // 0 for body detection
|
||||
NvOSD_RectParams &rect_params_body = body_obj_meta->rect_params;
|
||||
NvOSD_TextParams &text_params_body = body_obj_meta->text_params;
|
||||
/* Assign bounding box coordinates. */
|
||||
rect_params_body.left =
|
||||
(data[index * 57 + 0] * MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_body.top =
|
||||
(data[index * 57 + 1] * MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
rect_params_body.width =
|
||||
((data[index * 57 + 2] - data[index * 57 + 0]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_body.height =
|
||||
((data[index * 57 + 3] - data[index * 57 + 1]) *
|
||||
MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
rect_params_body.left = (data[index * BODY_TENSOR_SIZE + 0] *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_body.top = (data[index * BODY_TENSOR_SIZE + 1] *
|
||||
MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
rect_params_body.width = ((data[index * BODY_TENSOR_SIZE + 2] -
|
||||
data[index * BODY_TENSOR_SIZE + 0]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
rect_params_body.height = ((data[index * BODY_TENSOR_SIZE + 3] -
|
||||
data[index * BODY_TENSOR_SIZE + 1]) *
|
||||
MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
|
||||
/* Border of width 3. */
|
||||
rect_params_body.border_width = 3;
|
||||
@ -506,7 +511,7 @@ void NvInferServerManager::update_frame_with_face_body_meta(
|
||||
// NvDsUserMeta *um1 =
|
||||
// nvds_acquire_user_meta_from_pool(batch_meta);
|
||||
// um1->user_meta_data = set_metadata_ptr(
|
||||
// &(data[index * 57])); // Add landmarks here
|
||||
// &(data[index * BODY_TENSOR_SIZE])); // Add landmarks here
|
||||
// um1->base_meta.meta_type =
|
||||
// NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID;
|
||||
// um1->base_meta.copy_func = (NvDsMetaCopyFunc)copy_user_meta;
|
||||
@ -520,12 +525,13 @@ void NvInferServerManager::update_frame_with_face_body_meta(
|
||||
NvInferServerManager::Point2D
|
||||
NvInferServerManager::find_left_down_corner_shoulder(float *data, uint index) {
|
||||
Point2D left_down_shoulder;
|
||||
if (data[index * 57 + 21] > data[index * 57 + 24]) {
|
||||
left_down_shoulder.x = data[index * 57 + 21];
|
||||
left_down_shoulder.y = data[index * 57 + 22];
|
||||
if (data[index * BODY_TENSOR_SIZE + 21] >
|
||||
data[index * BODY_TENSOR_SIZE + 24]) {
|
||||
left_down_shoulder.x = data[index * BODY_TENSOR_SIZE + 21];
|
||||
left_down_shoulder.y = data[index * BODY_TENSOR_SIZE + 22];
|
||||
} else {
|
||||
left_down_shoulder.x = data[index * 57 + 24];
|
||||
left_down_shoulder.y = data[index * 57 + 25];
|
||||
left_down_shoulder.x = data[index * BODY_TENSOR_SIZE + 24];
|
||||
left_down_shoulder.y = data[index * BODY_TENSOR_SIZE + 25];
|
||||
}
|
||||
return left_down_shoulder;
|
||||
}
|
||||
@ -533,13 +539,8 @@ NvInferServerManager::find_left_down_corner_shoulder(float *data, uint index) {
|
||||
// add custom infromation to metadata by: set_metadata_ptr, copy_user_meta,
|
||||
// release_user_meta
|
||||
void *NvInferServerManager::set_metadata_ptr(float *arr) {
|
||||
int i = 0;
|
||||
float *user_metadata = (float *)g_malloc0(57 * sizeof(float));
|
||||
|
||||
for (i = 0; i < 57; i++) {
|
||||
user_metadata[i] = arr[i];
|
||||
}
|
||||
// user_metadata[51] = source_id;
|
||||
float *user_metadata = (float *)g_malloc0(BODY_TENSOR_SIZE * sizeof(float));
|
||||
std::memcpy(user_metadata, &arr[0], BODY_TENSOR_SIZE * sizeof(float));
|
||||
return (void *)user_metadata;
|
||||
}
|
||||
|
||||
@ -548,8 +549,10 @@ gpointer NvInferServerManager::copy_user_meta(gpointer data,
|
||||
(void)user_data;
|
||||
NvDsUserMeta *user_meta = (NvDsUserMeta *)data;
|
||||
gfloat *src_user_metadata = (gfloat *)user_meta->user_meta_data;
|
||||
gfloat *dst_user_metadata = (gfloat *)g_malloc0(57 * sizeof(gfloat));
|
||||
memcpy(dst_user_metadata, src_user_metadata, 57 * sizeof(gfloat));
|
||||
gfloat *dst_user_metadata =
|
||||
(gfloat *)g_malloc0(BODY_TENSOR_SIZE * sizeof(gfloat));
|
||||
memcpy(dst_user_metadata, src_user_metadata,
|
||||
BODY_TENSOR_SIZE * sizeof(gfloat));
|
||||
return (gpointer)dst_user_metadata;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user