Attach face metadata to pipeline in nvtracker probe
This commit is contained in:
parent
c2fa0d35da
commit
48c96c974e
67
.vscode/settings.json
vendored
67
.vscode/settings.json
vendored
@ -4,5 +4,70 @@
|
||||
"C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
|
||||
"C_Cpp.default.cppStandard": "c++17",
|
||||
"C_Cpp.intelliSenseEngine": "default",
|
||||
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
|
||||
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
|
||||
"files.associations": {
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cstring": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"array": "cpp",
|
||||
"atomic": "cpp",
|
||||
"bit": "cpp",
|
||||
"chrono": "cpp",
|
||||
"codecvt": "cpp",
|
||||
"compare": "cpp",
|
||||
"concepts": "cpp",
|
||||
"condition_variable": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"deque": "cpp",
|
||||
"forward_list": "cpp",
|
||||
"map": "cpp",
|
||||
"set": "cpp",
|
||||
"string": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"algorithm": "cpp",
|
||||
"functional": "cpp",
|
||||
"iterator": "cpp",
|
||||
"memory": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"numeric": "cpp",
|
||||
"optional": "cpp",
|
||||
"random": "cpp",
|
||||
"ratio": "cpp",
|
||||
"string_view": "cpp",
|
||||
"system_error": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"fstream": "cpp",
|
||||
"future": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"iomanip": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"iostream": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"mutex": "cpp",
|
||||
"new": "cpp",
|
||||
"numbers": "cpp",
|
||||
"ostream": "cpp",
|
||||
"semaphore": "cpp",
|
||||
"sstream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"stop_token": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"thread": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"valarray": "cpp"
|
||||
}
|
||||
}
|
||||
@ -6,6 +6,10 @@ set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF) # Disable compiler-specific extensions
|
||||
|
||||
# set(CMAKE_BUILD_TYPE Debug) # Automatically adds -g
|
||||
# OR
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
|
||||
|
||||
# Configure where binaries will be placed
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
|
||||
@ -63,14 +63,14 @@ GstPadProbeReturn GstdsExampleManager::gstds_example_src_pad_buffer_probe(
|
||||
if (obj_meta->class_id == PGIE_CLASS_ID_PERSON) {
|
||||
person_count++;
|
||||
num_rects++;
|
||||
std::cout << "In GstdsExample src "
|
||||
<< "x = " << obj_meta->rect_params.left
|
||||
<< " y = " << obj_meta->rect_params.top
|
||||
<< " w = " << obj_meta->rect_params.width
|
||||
<< " h = " << obj_meta->rect_params.height
|
||||
<< " score = " << obj_meta->confidence
|
||||
<< " Object ID: " << obj_meta->object_id
|
||||
<< std::endl;
|
||||
// std::cout << "In GstdsExample src "
|
||||
// << "x = " << obj_meta->rect_params.left
|
||||
// << " y = " << obj_meta->rect_params.top
|
||||
// << " w = " << obj_meta->rect_params.width
|
||||
// << " h = " << obj_meta->rect_params.height
|
||||
// << " score = " << obj_meta->confidence
|
||||
// << " Object ID: " << obj_meta->object_id
|
||||
// << std::endl;
|
||||
}
|
||||
|
||||
NvDsUserMeta *user_meta = NULL;
|
||||
@ -88,10 +88,12 @@ GstPadProbeReturn GstdsExampleManager::gstds_example_src_pad_buffer_probe(
|
||||
// (like your float* user_meta_data) to an object
|
||||
// (NvDsObjectMeta) using DeepStream APIs.
|
||||
|
||||
(void)user_meta_data;
|
||||
if (user_meta->base_meta.meta_type ==
|
||||
NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID) {
|
||||
for (int jkl = 0; jkl < 52; jkl++)
|
||||
std::cout << user_meta_data[jkl] << std::endl;
|
||||
// std::cout << "In GstdsExample src "<<std::endl;
|
||||
// for (int jkl = 0; jkl < 57; jkl++)
|
||||
// std::cout << user_meta_data[jkl] << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -105,11 +107,11 @@ GstPadProbeReturn GstdsExampleManager::gstds_example_src_pad_buffer_probe(
|
||||
|
||||
nvds_add_display_meta_to_frame(frame_meta, display_meta);
|
||||
}
|
||||
g_print(
|
||||
"In GstdsExample src "
|
||||
"Frame Number = %d "
|
||||
"Person Count = %d\n",
|
||||
frame_number, person_count);
|
||||
// g_print(
|
||||
// "In GstdsExample src "
|
||||
// "Frame Number = %d "
|
||||
// "Person Count = %d\n",
|
||||
// frame_number, person_count);
|
||||
|
||||
frame_number++;
|
||||
return GST_PAD_PROBE_OK;
|
||||
|
||||
@ -29,7 +29,7 @@ void MetricsManager::setup_prometheus() {
|
||||
|
||||
void MetricsManager::metrics_loop() { // prometheus::Gauge *my_gauge
|
||||
while (running) {
|
||||
std::cout << "metrics_loop" << std::endl;
|
||||
// std::cout << "metrics_loop" << std::endl;
|
||||
counter->Increment();
|
||||
// simulate updating a metric
|
||||
my_gauge->Set(static_cast<double>(rand() % 100));
|
||||
|
||||
@ -235,7 +235,7 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
(void)stream_height;
|
||||
(void)stream_width;
|
||||
|
||||
float source_id = (float)frame_meta->source_id;
|
||||
// float source_id = (float)frame_meta->source_id;
|
||||
/* Iterate user metadata in frames to search PGIE's tensor metadata */
|
||||
for (NvDsMetaList *l_user = frame_meta->frame_user_meta_list;
|
||||
l_user != NULL; l_user = l_user->next) {
|
||||
@ -308,12 +308,13 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
jkl += 4) { // 100 persons for each frame
|
||||
if (data[jkl * 57 + 4] > threshold_body_detection) {
|
||||
detected_persons++;
|
||||
std::cout
|
||||
<< "nvinferserver first for x = " << data[jkl * 57 + 0]
|
||||
<< " y = " << data[jkl * 57 + 1]
|
||||
<< " w = " << data[jkl * 57 + 2]
|
||||
<< " h = " << data[jkl * 57 + 3]
|
||||
<< " score = " << data[jkl * 57 + 4] << std::endl;
|
||||
// std::cout
|
||||
// << "nvinferserver first for x = " << data[jkl * 57 +
|
||||
// 0]
|
||||
// << " y = " << data[jkl * 57 + 1]
|
||||
// << " w = " << data[jkl * 57 + 2]
|
||||
// << " h = " << data[jkl * 57 + 3]
|
||||
// << " score = " << data[jkl * 57 + 4] << std::endl;
|
||||
for (unsigned int mno = 0; mno < 57; ++mno) {
|
||||
float value = data[jkl * 57 + mno];
|
||||
(void)value;
|
||||
@ -344,11 +345,13 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
int((data[index * 57 + 3] - data[index * 57 + 1]) *
|
||||
MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
|
||||
std::cout << "nvinferserver second for x = " << rect_params.left
|
||||
<< " y = " << rect_params.top
|
||||
<< " w = " << rect_params.width
|
||||
<< " h = " << rect_params.height
|
||||
<< " score = " << obj_meta->confidence << std::endl;
|
||||
// std::cout << "nvinferserver second for x = " <<
|
||||
// rect_params.left
|
||||
// << " y = " << rect_params.top
|
||||
// << " w = " << rect_params.width
|
||||
// << " h = " << rect_params.height
|
||||
// << " score = " << obj_meta->confidence <<
|
||||
// std::endl;
|
||||
|
||||
/* Border of width 3. */
|
||||
rect_params.border_width = 3;
|
||||
@ -370,9 +373,8 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
// adding landmarks to obj_meta as user_meta
|
||||
NvDsUserMeta *um1 =
|
||||
nvds_acquire_user_meta_from_pool(batch_meta);
|
||||
um1->user_meta_data =
|
||||
set_metadata_ptr(&(data[index * 57 + 6]),
|
||||
source_id); // Add landmarks here
|
||||
um1->user_meta_data = set_metadata_ptr(
|
||||
&(data[index * 57])); // 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;
|
||||
@ -389,15 +391,14 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
|
||||
// add custom infromation to metadata by: set_metadata_ptr, copy_user_meta,
|
||||
// release_user_meta
|
||||
void *NvInferServerManager::set_metadata_ptr(float *arr, float source_id) {
|
||||
void *NvInferServerManager::set_metadata_ptr(float *arr) {
|
||||
int i = 0;
|
||||
float *user_metadata =
|
||||
(float *)g_malloc0(17 * 3 * sizeof(float) + 1 * sizeof(float));
|
||||
float *user_metadata = (float *)g_malloc0(57 * sizeof(float));
|
||||
|
||||
for (i = 0; i < 51; i++) {
|
||||
for (i = 0; i < 57; i++) {
|
||||
user_metadata[i] = arr[i];
|
||||
}
|
||||
user_metadata[51] = source_id;
|
||||
// user_metadata[51] = source_id;
|
||||
return (void *)user_metadata;
|
||||
}
|
||||
|
||||
@ -406,10 +407,8 @@ 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(17 * 3 * sizeof(gfloat) + 1 * sizeof(gfloat));
|
||||
memcpy(dst_user_metadata, src_user_metadata,
|
||||
17 * 3 * sizeof(gfloat) + 1 * sizeof(gfloat));
|
||||
gfloat *dst_user_metadata = (gfloat *)g_malloc0(57 * sizeof(gfloat));
|
||||
memcpy(dst_user_metadata, src_user_metadata, 57 * sizeof(gfloat));
|
||||
return (gpointer)dst_user_metadata;
|
||||
}
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ class NvInferServerManager {
|
||||
// static GstPadProbeReturn osd_sink_pad_buffer_probe_new(GstPad *,
|
||||
// GstPadProbeInfo
|
||||
// *, gpointer);
|
||||
static void *set_metadata_ptr(float *, float);
|
||||
static void *set_metadata_ptr(float *);
|
||||
static gpointer copy_user_meta(gpointer, gpointer);
|
||||
static void release_user_meta(gpointer, gpointer);
|
||||
};
|
||||
@ -71,14 +71,14 @@ GstPadProbeReturn NvOsdManager::osd_src_pad_buffer_probe(GstPad *pad,
|
||||
if (obj_meta->class_id == PGIE_CLASS_ID_PERSON) {
|
||||
person_count++;
|
||||
num_rects++;
|
||||
std::cout << "In OSD sink "
|
||||
<< "x = " << obj_meta->rect_params.left
|
||||
<< " y = " << obj_meta->rect_params.top
|
||||
<< " w = " << obj_meta->rect_params.width
|
||||
<< " h = " << obj_meta->rect_params.height
|
||||
<< " score = " << obj_meta->confidence
|
||||
<< " Object ID: " << obj_meta->object_id
|
||||
<< std::endl;
|
||||
// std::cout << "In OSD sink "
|
||||
// << "x = " << obj_meta->rect_params.left
|
||||
// << " y = " << obj_meta->rect_params.top
|
||||
// << " w = " << obj_meta->rect_params.width
|
||||
// << " h = " << obj_meta->rect_params.height
|
||||
// << " score = " << obj_meta->confidence
|
||||
// << " Object ID: " << obj_meta->object_id
|
||||
// << std::endl;
|
||||
}
|
||||
}
|
||||
display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
|
||||
@ -110,11 +110,11 @@ GstPadProbeReturn NvOsdManager::osd_src_pad_buffer_probe(GstPad *pad,
|
||||
|
||||
nvds_add_display_meta_to_frame(frame_meta, display_meta);
|
||||
}
|
||||
g_print(
|
||||
"In OSD sink "
|
||||
"Frame Number = %d "
|
||||
"Person Count = %d\n",
|
||||
frame_number, person_count);
|
||||
// g_print(
|
||||
// "In OSD sink "
|
||||
// "Frame Number = %d "
|
||||
// "Person Count = %d\n",
|
||||
// frame_number, person_count);
|
||||
|
||||
frame_number++;
|
||||
return GST_PAD_PROBE_OK;
|
||||
|
||||
@ -1,10 +1,21 @@
|
||||
#include "nv_tracker_manager.hpp"
|
||||
|
||||
#define NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID \
|
||||
(nvds_get_user_meta_type(const_cast<gchar *>("NVIDIA.NVINFER.USER_META")))
|
||||
#define SET_GPU_ID(object, gpu_id) \
|
||||
g_object_set(G_OBJECT(object), "gpu-id", gpu_id, NULL);
|
||||
#define GPU_ID 0
|
||||
#define MAX_DISPLAY_LEN 64
|
||||
#define PGIE_CLASS_ID_PERSON 0
|
||||
#define FACE_COMPONENT_ID 2
|
||||
#define FACE_CLASS_ID 42
|
||||
#define THRESHOLD_LANDMARKS 0.1
|
||||
|
||||
unsigned int NvTrackerManager::PGIE_NET_WIDTH = 1;
|
||||
unsigned int NvTrackerManager::PGIE_NET_HEIGHT = 1;
|
||||
unsigned int NvTrackerManager::MUXER_OUTPUT_WIDTH = 1;
|
||||
unsigned int NvTrackerManager::MUXER_OUTPUT_HEIGHT = 1;
|
||||
std::vector<NvTrackerManager::FaceBody> NvTrackerManager::body_face_list;
|
||||
|
||||
gint NvTrackerManager::frame_number = 0;
|
||||
|
||||
@ -12,6 +23,10 @@ NvTrackerManager::NvTrackerManager() {
|
||||
const auto &config = ConfigManager::get_instance().get_config();
|
||||
ll_config_file = config["ll-config-file"].get<std::string>();
|
||||
ll_lib_file = config["ll-lib-file"].get<std::string>();
|
||||
PGIE_NET_WIDTH = config["PGIE_NET_WIDTH"];
|
||||
PGIE_NET_HEIGHT = config["PGIE_NET_HEIGHT"];
|
||||
MUXER_OUTPUT_WIDTH = config["MUXER_OUTPUT_WIDTH"];
|
||||
MUXER_OUTPUT_HEIGHT = config["MUXER_OUTPUT_HEIGHT"];
|
||||
}
|
||||
|
||||
bool NvTrackerManager::create_nv_tracker() {
|
||||
@ -30,6 +45,27 @@ bool NvTrackerManager::create_nv_tracker() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool NvTrackerManager::check_existence(int object_id, int source_id, float area,
|
||||
bool *is_area_updated) {
|
||||
for (std::vector<FaceBody>::iterator iter = body_face_list.begin();
|
||||
iter != body_face_list.end(); iter++) {
|
||||
if (((*iter).object_id == object_id) &&
|
||||
((*iter).source_id == source_id)) {
|
||||
if (area > (*iter).largest_area) {
|
||||
(*iter).largest_area = area;
|
||||
*is_area_updated = true;
|
||||
}
|
||||
(*iter).num_frames++;
|
||||
std::cout << "source_id = " << source_id
|
||||
<< " object_id = " << object_id
|
||||
<< " face num_frames = " << (*iter).num_frames
|
||||
<< std::endl;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Attach probe to a pad in the pipeline
|
||||
void NvTrackerManager::attach_probe_to_element() {
|
||||
GstPad *src_pad = gst_element_get_static_pad(tracker, "src");
|
||||
@ -71,16 +107,226 @@ GstPadProbeReturn NvTrackerManager::tracker_src_pad_buffer_probe(
|
||||
if (obj_meta->class_id == PGIE_CLASS_ID_PERSON) {
|
||||
person_count++;
|
||||
num_rects++;
|
||||
std::cout << "In Tracker sink "
|
||||
<< "x = " << obj_meta->rect_params.left
|
||||
<< " y = " << obj_meta->rect_params.top
|
||||
<< " w = " << obj_meta->rect_params.width
|
||||
<< " h = " << obj_meta->rect_params.height
|
||||
<< " score = " << obj_meta->confidence
|
||||
<< " object_id = " << obj_meta->object_id
|
||||
<< std::endl;
|
||||
// std::cout << "In Tracker sink "
|
||||
// << " source_id " << frame_meta->source_id
|
||||
// << " x = " << obj_meta->rect_params.left
|
||||
// << " y = " << obj_meta->rect_params.top
|
||||
// << " w = " << obj_meta->rect_params.width
|
||||
// << " h = " << obj_meta->rect_params.height
|
||||
// << " score = " << obj_meta->confidence
|
||||
// << " object_id = " << obj_meta->object_id
|
||||
// << std::endl;
|
||||
}
|
||||
// else{
|
||||
// std::cout << "obj_meta->class_id = "
|
||||
// << obj_meta->class_id << std::endl;
|
||||
// std::quick_exit(0);
|
||||
// }
|
||||
|
||||
NvDsUserMeta *user_meta = NULL;
|
||||
NvDsMetaList *l_user_meta = NULL;
|
||||
float *user_meta_data = NULL;
|
||||
uint index = 0;
|
||||
for (l_user_meta = obj_meta->obj_user_meta_list;
|
||||
l_user_meta != NULL; l_user_meta = l_user_meta->next) {
|
||||
user_meta = (NvDsUserMeta *)(l_user_meta->data);
|
||||
user_meta_data = (float *)user_meta->user_meta_data;
|
||||
// std::cout << " source_id " << frame_meta->source_id
|
||||
// << " object_id = " << obj_meta->object_id
|
||||
// << std::endl;
|
||||
|
||||
// user_meta->base_meta.meta_type == 7 means it is user-defined
|
||||
// metadata (NVDS_USER_META).
|
||||
|
||||
// This is typically used when you attach custom metadata
|
||||
// (like your float* user_meta_data) to an object
|
||||
// (NvDsObjectMeta) using DeepStream APIs.
|
||||
|
||||
if (user_meta->base_meta.meta_type ==
|
||||
NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID) {
|
||||
// std::cout << "In Tracker sink "<<std::endl;
|
||||
// for (int jkl = 0; jkl < 52; jkl++)
|
||||
// std::cout << user_meta_data[jkl] << std::endl;
|
||||
|
||||
if (obj_meta->object_id == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// ???????????????????????????????????????????????????????????????????
|
||||
// NvDsObjectMeta *obj_meta =
|
||||
// nvds_acquire_obj_meta_from_pool(batch_meta);
|
||||
// obj_meta->unique_component_id = meta->unique_id;
|
||||
// obj_meta->confidence = user_meta_data[index * 57 + 4];
|
||||
// obj_meta->object_id = UNTRACKED_OBJECT_ID;
|
||||
// obj_meta->class_id = 0;
|
||||
|
||||
if (!(user_meta_data[index * 57 + 8] >
|
||||
THRESHOLD_LANDMARKS &&
|
||||
user_meta_data[index * 57 + 11] >
|
||||
THRESHOLD_LANDMARKS &&
|
||||
user_meta_data[index * 57 + 14] >
|
||||
THRESHOLD_LANDMARKS &&
|
||||
user_meta_data[index * 57 + 17] >
|
||||
THRESHOLD_LANDMARKS &&
|
||||
user_meta_data[index * 57 + 20] >
|
||||
THRESHOLD_LANDMARKS &&
|
||||
user_meta_data[index * 57 + 23] >
|
||||
THRESHOLD_LANDMARKS &&
|
||||
user_meta_data[index * 57 + 26] >
|
||||
THRESHOLD_LANDMARKS)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// NvOSD_RectParams &face_rect_params;
|
||||
// NvOSD_RectParams *face_rect_params = nullptr; // Fill
|
||||
// face_rect_params.top, .left, .width, .height
|
||||
NvOSD_RectParams *face_rect_params = new NvOSD_RectParams();
|
||||
|
||||
/* Assign bounding box coordinates. */
|
||||
// Right Shoulder - Left Shoulder
|
||||
if (user_meta_data[index * 57 + 24] >
|
||||
user_meta_data[index * 57 + 21]) {
|
||||
face_rect_params->width =
|
||||
abs((user_meta_data[index * 57 + 24] -
|
||||
user_meta_data[index * 57 + 0]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
} else {
|
||||
face_rect_params->width =
|
||||
abs((user_meta_data[index * 57 + 21] -
|
||||
user_meta_data[index * 57 + 0]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
}
|
||||
|
||||
if (user_meta_data[index * 57 + 25] >
|
||||
user_meta_data[index * 57 + 22]) {
|
||||
face_rect_params->height =
|
||||
abs((user_meta_data[index * 57 + 25] -
|
||||
user_meta_data[index * 57 + 1]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
} else {
|
||||
face_rect_params->height =
|
||||
abs((user_meta_data[index * 57 + 22] -
|
||||
user_meta_data[index * 57 + 1]) *
|
||||
MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
}
|
||||
|
||||
NvDsObjectMeta *face_obj =
|
||||
nvds_acquire_obj_meta_from_pool(batch_meta);
|
||||
face_obj->unique_component_id =
|
||||
FACE_COMPONENT_ID; // Use a new component ID
|
||||
face_obj->confidence = 1.0;
|
||||
|
||||
face_obj->rect_params = *face_rect_params;
|
||||
face_obj->rect_params.has_bg_color = 0;
|
||||
face_obj->rect_params.border_width = 2;
|
||||
face_obj->rect_params.border_color =
|
||||
NvOSD_ColorParams{1.0, 0.0, 0.0, 1.0}; // Red box
|
||||
// std::quick_exit(0);
|
||||
|
||||
// std::cout << "In Tracker sink "
|
||||
// << " source_id = " << frame_meta->source_id
|
||||
// << " object_id = " << obj_meta->object_id
|
||||
// << " x = " << obj_meta->rect_params.left
|
||||
// << " y = " << obj_meta->rect_params.top
|
||||
// << " w = " << obj_meta->rect_params.width
|
||||
// << " h = " << obj_meta->rect_params.height
|
||||
// << " score = " << obj_meta->confidence
|
||||
// << std::endl;
|
||||
bool is_area_updated = false;
|
||||
FaceBody current_face;
|
||||
current_face.largest_area = face_obj->rect_params.height *
|
||||
face_obj->rect_params.width;
|
||||
current_face.object_id = obj_meta->object_id;
|
||||
current_face.source_id = frame_meta->source_id;
|
||||
if (!check_existence(
|
||||
obj_meta->object_id, current_face.source_id,
|
||||
current_face.largest_area, &is_area_updated)) {
|
||||
current_face.num_frames = 1;
|
||||
body_face_list.push_back(current_face);
|
||||
std::cout << "source_id = " << current_face.source_id
|
||||
<< " frame_num = " << frame_meta->frame_num
|
||||
<< " object_id = " << obj_meta->object_id
|
||||
<< " size body_face_list = "
|
||||
<< body_face_list.size() << std::endl;
|
||||
face_obj->class_id = FACE_CLASS_ID;
|
||||
}
|
||||
if (is_area_updated) {
|
||||
face_obj->class_id = FACE_CLASS_ID;
|
||||
std::cout << "source_id = " << current_face.source_id
|
||||
<< " frame_num = " << frame_meta->frame_num
|
||||
<< " object_id = " << obj_meta->object_id
|
||||
<< " area is updated" << std::endl;
|
||||
// std::quick_exit(0);
|
||||
} else {
|
||||
face_obj->class_id = 41;
|
||||
// std::cout<<"not is_area_updated "<< std::endl;
|
||||
}
|
||||
|
||||
// NvOSD_RectParams &rect_params = obj_meta->rect_params;
|
||||
// NvOSD_TextParams &text_params = obj_meta->text_params;
|
||||
/* Assign bounding box coordinates. */
|
||||
// rect_params.left = int(data[index * 57 + 0] *
|
||||
// MUXER_OUTPUT_WIDTH /
|
||||
// PGIE_NET_WIDTH);
|
||||
// rect_params.top = int(data[index * 57 + 1] *
|
||||
// MUXER_OUTPUT_HEIGHT /
|
||||
// PGIE_NET_HEIGHT);
|
||||
// rect_params.width =
|
||||
// int((data[index * 57 + 2] - data[index * 57 + 0]) *
|
||||
// MUXER_OUTPUT_WIDTH / PGIE_NET_WIDTH);
|
||||
// rect_params.height =
|
||||
// int((data[index * 57 + 3] - data[index * 57 + 1]) *
|
||||
// MUXER_OUTPUT_HEIGHT / PGIE_NET_HEIGHT);
|
||||
|
||||
// std::cout << "nvinferserver second for x = " <<
|
||||
// rect_params.left
|
||||
// << " y = " << rect_params.top
|
||||
// << " w = " << rect_params.width
|
||||
// << " h = " << rect_params.height
|
||||
// << " score = " << obj_meta->confidence <<
|
||||
// std::endl;
|
||||
|
||||
// /* Border of width 3. */
|
||||
// rect_params.border_width = 3;
|
||||
// rect_params.has_bg_color = 0;
|
||||
// rect_params.border_color = NvOSD_ColorParams{1, 0, 0, 1};
|
||||
// /* display_text requires heap allocated memory. */
|
||||
// text_params.display_text = g_strdup(pgie_class_str[0]);
|
||||
// /* Display text above the left top corner of the object.
|
||||
// */ text_params.x_offset = rect_params.left;
|
||||
// text_params.y_offset = rect_params.top - 10;
|
||||
// /* Set black background for the text. */
|
||||
// text_params.set_bg_clr = 1;
|
||||
// text_params.text_bg_clr = NvOSD_ColorParams{0, 0, 0, 1};
|
||||
// /* Font face, size and color. */
|
||||
// text_params.font_params.font_name = (gchar *)"Serif";
|
||||
// text_params.font_params.font_size = 11;
|
||||
// text_params.font_params.font_color =
|
||||
// NvOSD_ColorParams{1, 1, 1, 1};
|
||||
// adding landmarks to obj_meta as user_meta
|
||||
// nvds_add_child_object(obj_meta, face_obj);
|
||||
// nvds_attach_obj_meta(obj_meta, face_obj, NULL);
|
||||
|
||||
// NvDsUserMeta *um1 =
|
||||
// nvds_acquire_user_meta_from_pool(batch_meta);
|
||||
// um1->user_meta_data =
|
||||
// set_metadata_ptr(&(data[index * 57 + 6]),
|
||||
// source_id); // 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;
|
||||
// um1->base_meta.release_func =
|
||||
// (NvDsMetaReleaseFunc)release_user_meta;
|
||||
// nvds_add_user_meta_to_obj(obj_meta, um1);
|
||||
// nvds_add_obj_meta_to_frame(frame_meta, obj_meta, NULL);
|
||||
nvds_add_obj_meta_to_frame(frame_meta, face_obj, obj_meta);
|
||||
}
|
||||
// index++;
|
||||
}
|
||||
}
|
||||
|
||||
display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
|
||||
NvOSD_TextParams *txt_params = &display_meta->text_params[0];
|
||||
display_meta->num_labels = 1;
|
||||
@ -110,12 +356,12 @@ GstPadProbeReturn NvTrackerManager::tracker_src_pad_buffer_probe(
|
||||
|
||||
nvds_add_display_meta_to_frame(frame_meta, display_meta);
|
||||
}
|
||||
g_print(
|
||||
"In Tracker sink "
|
||||
"Frame Number = %d "
|
||||
"Person Count = %d\n",
|
||||
frame_number, person_count);
|
||||
// g_print(
|
||||
// "In Tracker sink "
|
||||
// "Frame Number = %d "
|
||||
// "Person Count = %d\n",
|
||||
// frame_number, person_count);
|
||||
|
||||
frame_number++;
|
||||
return GST_PAD_PROBE_OK;
|
||||
}
|
||||
}
|
||||
@ -1,14 +1,32 @@
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
|
||||
#include "config_manager.hpp"
|
||||
#include "gstnvdsmeta.h"
|
||||
#include "nvdsmeta.h"
|
||||
#include "nvdsmeta_schema.h"
|
||||
|
||||
class NvTrackerManager {
|
||||
private:
|
||||
struct FaceBody {
|
||||
int object_id = 0;
|
||||
int source_id = 0;
|
||||
int num_frames = 0;
|
||||
float largest_area = -1;
|
||||
};
|
||||
|
||||
static std::vector<FaceBody> body_face_list;
|
||||
|
||||
public:
|
||||
static unsigned int PGIE_NET_WIDTH;
|
||||
static unsigned int PGIE_NET_HEIGHT;
|
||||
static unsigned int MUXER_OUTPUT_WIDTH;
|
||||
static unsigned int MUXER_OUTPUT_HEIGHT;
|
||||
GstElement *tracker = NULL;
|
||||
static gint frame_number;
|
||||
std::string ll_config_file;
|
||||
@ -20,4 +38,5 @@ class NvTrackerManager {
|
||||
static GstPadProbeReturn tracker_src_pad_buffer_probe(GstPad *,
|
||||
GstPadProbeInfo *,
|
||||
gpointer);
|
||||
static bool check_existence(int, int, float, bool *);
|
||||
};
|
||||
@ -74,7 +74,7 @@ void PipelineManager::set_row_csv_fps(const std::string& name, double fps) {
|
||||
return;
|
||||
} else {
|
||||
csv_fp << name << "," << fps << "\n";
|
||||
std::cout << "Wrote: " << name << " = " << fps << "\n";
|
||||
// std::cout << "Wrote: " << name << " = " << fps << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,8 +97,8 @@ GstPadProbeReturn PipelineManager::osd_sink_pad_buffer_probe(
|
||||
.count();
|
||||
fps_osd = 60000.0 / ms;
|
||||
self->set_row_csv_fps("fps_osd", fps_osd);
|
||||
std::cout << "Writing fps_osd...\n";
|
||||
g_print("FPS_osd_sink: %.2f\n", fps_osd);
|
||||
// std::cout << "Writing fps_osd...\n";
|
||||
// g_print("FPS_osd_sink: %.2f\n", fps_osd);
|
||||
last_time_osd_sink = now;
|
||||
}
|
||||
return GST_PAD_PROBE_OK;
|
||||
@ -130,10 +130,10 @@ GstPadProbeReturn PipelineManager::probe_fps(GstPad* pad, GstPadProbeInfo* info,
|
||||
current_time_fps_probe - last_time_fps_probe)
|
||||
.count();
|
||||
fps_probe = 30000.0 / duration;
|
||||
g_print("fps_probe FPS: %.2f\n", fps_probe);
|
||||
// g_print("fps_probe FPS: %.2f\n", fps_probe);
|
||||
last_time_fps_probe = current_time_fps_probe;
|
||||
self->set_row_csv_fps("fps_probe", fps_probe);
|
||||
std::cout << "Writing fps_probe...\n";
|
||||
// std::cout << "Writing fps_probe...\n";
|
||||
}
|
||||
}
|
||||
return GST_PAD_PROBE_OK;
|
||||
@ -166,12 +166,12 @@ GstPadProbeReturn PipelineManager::buffer_probe(GstPad* pad,
|
||||
fps_buffer_probe =
|
||||
(double)(frame_count_buffer_probe * 1000 / (double)elapsed);
|
||||
if (elapsed >= 1000) { // Update every second
|
||||
g_print("FPS_buffer_probe: %.2f\n", fps_buffer_probe);
|
||||
// g_print("FPS_buffer_probe: %.2f\n", fps_buffer_probe);
|
||||
frame_count_buffer_probe = 0;
|
||||
last_time_buffer_probe = current_time_buffer_probe;
|
||||
}
|
||||
self->set_row_csv_fps("fps_buffer_probe", fps_buffer_probe);
|
||||
std::cout << "Writing fps_buffer_probe...\n";
|
||||
// std::cout << "Writing fps_buffer_probe...\n";
|
||||
|
||||
return GST_PAD_PROBE_OK;
|
||||
}
|
||||
@ -216,8 +216,9 @@ bool PipelineManager::check_playing_pipeline() {
|
||||
g_printerr("Failed to start pipeline!\n");
|
||||
return false;
|
||||
} else {
|
||||
g_print("Pipeline state: %d (1=NULL, 2=READY, 3=PAUSED, 4=PLAYING)\n",
|
||||
state);
|
||||
// g_print("Pipeline state: %d (1=NULL, 2=READY, 3=PAUSED,
|
||||
// 4=PLAYING)\n",
|
||||
// state);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -283,7 +284,7 @@ gboolean PipelineManager::check_pipeline_state(gpointer user_data) {
|
||||
GstElement* pipeline = (GstElement*)user_data;
|
||||
GstState state;
|
||||
gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE);
|
||||
g_print("Pipeline state (periodic check): %d\n", state);
|
||||
// g_print("Pipeline state (periodic check): %d\n", state);
|
||||
return G_SOURCE_CONTINUE; // Keep timer active
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user