Save encoded images to disk
This commit is contained in:
parent
e90b08bd42
commit
434f3c79ec
@ -116,6 +116,7 @@ set_source_files_properties(
|
|||||||
src/pipeline_manager.cpp
|
src/pipeline_manager.cpp
|
||||||
src/nv_tracker_manager.cpp
|
src/nv_tracker_manager.cpp
|
||||||
src/face_nv_infer_server_manager.cpp
|
src/face_nv_infer_server_manager.cpp
|
||||||
|
src/nv_osd_manager.cpp
|
||||||
PROPERTIES COMPILE_FLAGS "-Wno-missing-field-initializers"
|
PROPERTIES COMPILE_FLAGS "-Wno-missing-field-initializers"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -66,5 +66,7 @@
|
|||||||
"redis_broker_port": 6379,
|
"redis_broker_port": 6379,
|
||||||
"topic_redis": "redis_stream"
|
"topic_redis": "redis_stream"
|
||||||
},
|
},
|
||||||
"compression_coefficient": 0.125
|
"compression_coefficient": 0.125,
|
||||||
|
"write_full_frame_to_disk": true,
|
||||||
|
"write_cropped_objects_to_disk": true
|
||||||
}
|
}
|
||||||
@ -9,6 +9,7 @@
|
|||||||
#define PGIE_CLASS_ID_PERSON 0
|
#define PGIE_CLASS_ID_PERSON 0
|
||||||
#define PGIE_DETECTED_CLASS_NUM 1
|
#define PGIE_DETECTED_CLASS_NUM 1
|
||||||
#define SGIE_DETECTED_CLASS_NUM 1
|
#define SGIE_DETECTED_CLASS_NUM 1
|
||||||
|
#define BODY_COMPONENT_ID 1
|
||||||
#define IMPRECISE_FACE_COMPONENT_ID 2
|
#define IMPRECISE_FACE_COMPONENT_ID 2
|
||||||
#define FINAL_FACE_COMPONENT_ID 3
|
#define FINAL_FACE_COMPONENT_ID 3
|
||||||
|
|
||||||
@ -1164,14 +1165,26 @@ void FaceNvInferServerManager::encode_objects_attach_meta(
|
|||||||
/* Preset */
|
/* Preset */
|
||||||
// objData.objNum = num_rects;
|
// objData.objNum = num_rects;
|
||||||
/* Quality */
|
/* Quality */
|
||||||
objData.quality = 80;
|
// objData.quality = 80;
|
||||||
/* Set to calculate time taken to encode JPG image. */
|
/* Set to calculate time taken to encode JPG image. */
|
||||||
// if (calc_enc) {
|
// if (calc_enc) {
|
||||||
// objData.calcEncodeTime = 1;
|
// objData.calcEncodeTime = 1;
|
||||||
// }
|
// }
|
||||||
/*Main Function Call */
|
/*Main Function Call */
|
||||||
|
|
||||||
|
// bool nvds_obj_enc_process (NvDsObjEncCtxHandle, NvDsObjEncUsrArgs *,
|
||||||
|
// NvBufSurface *, NvDsObjectMeta *, NvDsFrameMeta *);
|
||||||
nvds_obj_enc_process(static_cast<NvDsObjEncCtxHandle>(ctx), &objData,
|
nvds_obj_enc_process(static_cast<NvDsObjEncCtxHandle>(ctx), &objData,
|
||||||
ip_surf, obj_meta, frame_meta);
|
ip_surf, obj_meta, frame_meta);
|
||||||
|
if (obj_meta->unique_component_id == 1) {
|
||||||
|
std::cout << "obj_meta->unique_component_id = "
|
||||||
|
<< obj_meta->unique_component_id
|
||||||
|
<< " obj_meta->rect_params.width = "
|
||||||
|
<< obj_meta->rect_params.width
|
||||||
|
<< " obj_meta->rect_params.height = "
|
||||||
|
<< obj_meta->rect_params.height << std::endl;
|
||||||
|
std::quick_exit(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FaceNvInferServerManager::encode_full_frame_attach_meta(
|
void FaceNvInferServerManager::encode_full_frame_attach_meta(
|
||||||
@ -1198,7 +1211,7 @@ void FaceNvInferServerManager::encode_full_frame_attach_meta(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AVX check function
|
// AVX check function
|
||||||
bool FaceNvInferServerManager::allZeroAVX(const float *data, size_t size) {
|
bool FaceNvInferServerManager::all_zero_avx(const float *data, size_t size) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
__m256 zero = _mm256_setzero_ps(); // 8 floats of 0.0
|
__m256 zero = _mm256_setzero_ps(); // 8 floats of 0.0
|
||||||
for (; i + 8 <= size; i += 8) {
|
for (; i + 8 <= size; i += 8) {
|
||||||
@ -1213,7 +1226,7 @@ bool FaceNvInferServerManager::allZeroAVX(const float *data, size_t size) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FaceNvInferServerManager::allZero(const float *data, size_t size) {
|
bool FaceNvInferServerManager::all_zero(const float *data, size_t size) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
|
||||||
#if defined(__AVX512F__)
|
#if defined(__AVX512F__)
|
||||||
@ -1293,12 +1306,34 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
for (NvDsMetaList *l_obj = frame_meta->obj_meta_list; l_obj != NULL;
|
for (NvDsMetaList *l_obj = frame_meta->obj_meta_list; l_obj != NULL;
|
||||||
l_obj = l_obj->next) {
|
l_obj = l_obj->next) {
|
||||||
NvDsObjectMeta *obj_meta = (NvDsObjectMeta *)l_obj->data;
|
NvDsObjectMeta *obj_meta = (NvDsObjectMeta *)l_obj->data;
|
||||||
NvDsObjectMeta *parent = NULL;
|
|
||||||
if (obj_meta->unique_component_id != 1) {
|
if (obj_meta->unique_component_id == 1 &&
|
||||||
NvDsObjectMeta *parent = obj_meta->parent;
|
obj_meta->obj_user_meta_list != NULL) {
|
||||||
(void)parent;
|
// body object obj_user_meta_list list is empty so
|
||||||
|
// for loop : Iterate user metadata in object to search SGIE's
|
||||||
|
// tensor data could not execute.
|
||||||
|
std::cout << "obj_meta->unique_component_id = "
|
||||||
|
<< obj_meta->unique_component_id
|
||||||
|
<< " obj_meta->rect_params.width = "
|
||||||
|
<< obj_meta->rect_params.width
|
||||||
|
<< " obj_meta->rect_params.height = "
|
||||||
|
<< obj_meta->rect_params.height << std::endl;
|
||||||
}
|
}
|
||||||
(void)parent;
|
// if (obj_meta->unique_component_id == 2) {
|
||||||
|
// body = obj_meta->parent;
|
||||||
|
|
||||||
|
// // if(body)
|
||||||
|
// // {
|
||||||
|
// // std::cout<<"body->class_id = "<<body->class_id
|
||||||
|
// // << " body->unique_component_id =
|
||||||
|
// "<<body->unique_component_id<<std::endl;
|
||||||
|
// // if (body->unique_component_id==1){
|
||||||
|
// // std::quick_exit(0);
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// }
|
||||||
|
// (void)parent;
|
||||||
// if (obj_meta->unique_component_id !=
|
// if (obj_meta->unique_component_id !=
|
||||||
// IMPRECISE_FACE_COMPONENT_ID){
|
// IMPRECISE_FACE_COMPONENT_ID){
|
||||||
// continue;
|
// continue;
|
||||||
@ -1331,7 +1366,9 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
// // std::cout<<"obj_meta->class_id ="
|
// // std::cout<<"obj_meta->class_id ="
|
||||||
// <<obj_meta->class_id<<std::endl; continue;
|
// <<obj_meta->class_id<<std::endl; continue;
|
||||||
// }
|
// }
|
||||||
|
// std::cout<<"obj_meta->class_id = "<<obj_meta->class_id
|
||||||
|
// << " obj_meta->unique_component_id =
|
||||||
|
// "<<obj_meta->unique_component_id<<std::endl;
|
||||||
/* Iterate user metadata in object to search SGIE's tensor data */
|
/* Iterate user metadata in object to search SGIE's tensor data */
|
||||||
for (NvDsMetaList *l_user = obj_meta->obj_user_meta_list;
|
for (NvDsMetaList *l_user = obj_meta->obj_user_meta_list;
|
||||||
l_user != NULL; l_user = l_user->next) {
|
l_user != NULL; l_user = l_user->next) {
|
||||||
@ -1442,7 +1479,7 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
0.0f) // if the first element is zero, then its
|
0.0f) // if the first element is zero, then its
|
||||||
// possible all element are zero
|
// possible all element are zero
|
||||||
{
|
{
|
||||||
is_zero_embedding_vector = allZero(data_face, 512);
|
is_zero_embedding_vector = all_zero(data_face, 512);
|
||||||
// is_zero_embedding_vector = 1 where approximately
|
// is_zero_embedding_vector = 1 where approximately
|
||||||
// 3 times more than is_zero_embedding_vector 0
|
// 3 times more than is_zero_embedding_vector 0
|
||||||
} else {
|
} else {
|
||||||
@ -1556,8 +1593,6 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
// um1->base_meta.release_func =
|
// um1->base_meta.release_func =
|
||||||
// (NvDsMetaReleaseFunc)release_user_meta;
|
// (NvDsMetaReleaseFunc)release_user_meta;
|
||||||
// nvds_add_user_meta_to_obj(obj_meta, um1);
|
// nvds_add_user_meta_to_obj(obj_meta, um1);
|
||||||
nvds_add_obj_meta_to_frame(frame_meta, final_face_obj,
|
|
||||||
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 (is_zero_embedding_vector == false) {
|
||||||
@ -1571,6 +1606,8 @@ GstPadProbeReturn FaceNvInferServerManager::sgie_pad_buffer_probe(
|
|||||||
encode_objects_attach_meta(ctx, ip_surf, frame_meta,
|
encode_objects_attach_meta(ctx, ip_surf, frame_meta,
|
||||||
final_face_obj);
|
final_face_obj);
|
||||||
}
|
}
|
||||||
|
nvds_add_obj_meta_to_frame(frame_meta, final_face_obj,
|
||||||
|
obj_meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
// for (size_t jkl = 0; jkl < outputLayersInfo.size(); jkl++) {
|
// for (size_t jkl = 0; jkl < outputLayersInfo.size(); jkl++) {
|
||||||
|
|||||||
@ -66,8 +66,8 @@ class FaceNvInferServerManager {
|
|||||||
static NvOSD_RectParams *allign_postprocess(NvOSD_RectParams &, float *);
|
static NvOSD_RectParams *allign_postprocess(NvOSD_RectParams &, float *);
|
||||||
static float numpy_clip(float, float, float);
|
static float numpy_clip(float, float, float);
|
||||||
static void add_face_body(int, float);
|
static void add_face_body(int, float);
|
||||||
static bool allZeroAVX(const float *, size_t);
|
static bool all_zero_avx(const float *, size_t);
|
||||||
static bool allZero(const float *, size_t);
|
static bool all_zero(const float *, size_t);
|
||||||
static void encode_full_frame_attach_meta(gpointer, NvBufSurface *,
|
static void encode_full_frame_attach_meta(gpointer, NvBufSurface *,
|
||||||
NvDsFrameMeta *);
|
NvDsFrameMeta *);
|
||||||
static void encode_objects_attach_meta(gpointer, NvBufSurface *,
|
static void encode_objects_attach_meta(gpointer, NvBufSurface *,
|
||||||
|
|||||||
@ -11,8 +11,16 @@
|
|||||||
#define PGIE_CLASS_ID_PERSON 0
|
#define PGIE_CLASS_ID_PERSON 0
|
||||||
|
|
||||||
gint NvOsdManager::frame_number = 0;
|
gint NvOsdManager::frame_number = 0;
|
||||||
|
bool NvOsdManager::write_full_frame_to_disk = false;
|
||||||
|
bool NvOsdManager::write_cropped_objects_to_disk = false;
|
||||||
|
|
||||||
NvOsdManager::NvOsdManager() {}
|
NvOsdManager::NvOsdManager() {
|
||||||
|
const auto &config = ConfigManager::get_instance().get_config();
|
||||||
|
write_full_frame_to_disk =
|
||||||
|
config.at("write_full_frame_to_disk").get<bool>();
|
||||||
|
write_cropped_objects_to_disk =
|
||||||
|
config.at("write_cropped_objects_to_disk").get<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
bool NvOsdManager::create_nv_osd() {
|
bool NvOsdManager::create_nv_osd() {
|
||||||
/* Create OSD to draw on the converted RGBA buffer */
|
/* Create OSD to draw on the converted RGBA buffer */
|
||||||
@ -30,7 +38,8 @@ bool NvOsdManager::create_nv_osd() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Attach probe to a pad in the pipeline
|
// Attach probe to a pad in the pipeline
|
||||||
void NvOsdManager::attach_probe_to_src_nvosd() {
|
void NvOsdManager::attach_probe_to_src_nvosd(
|
||||||
|
NvDsObjEncCtxHandle obj_ctx_handle) {
|
||||||
GstPad *src_pad = gst_element_get_static_pad(nvosd, "src");
|
GstPad *src_pad = gst_element_get_static_pad(nvosd, "src");
|
||||||
if (!src_pad) {
|
if (!src_pad) {
|
||||||
std::cerr << "Unable to get nvosd src pad\n";
|
std::cerr << "Unable to get nvosd src pad\n";
|
||||||
@ -38,10 +47,82 @@ void NvOsdManager::attach_probe_to_src_nvosd() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gst_pad_add_probe(src_pad, GST_PAD_PROBE_TYPE_BUFFER,
|
gst_pad_add_probe(src_pad, GST_PAD_PROBE_TYPE_BUFFER,
|
||||||
osd_src_pad_buffer_probe, NULL, NULL);
|
osd_src_pad_buffer_probe, (gpointer)obj_ctx_handle, NULL);
|
||||||
gst_object_unref(src_pad);
|
gst_object_unref(src_pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NvOsdManager::save_full_frame(NvDsFrameMeta *frame_meta) {
|
||||||
|
char fileFrameNameString[FILE_NAME_SIZE];
|
||||||
|
const char *osd_string = "OSD";
|
||||||
|
|
||||||
|
/* For Demonstration Purposes we are writing metadata to jpeg images of
|
||||||
|
* the first 10 frames only.
|
||||||
|
* The files generated have an 'OSD' prefix. */
|
||||||
|
NvDsUserMetaList *usrMetaList = frame_meta->frame_user_meta_list;
|
||||||
|
FILE *file;
|
||||||
|
int stream_num = 0;
|
||||||
|
while (usrMetaList != NULL) {
|
||||||
|
NvDsUserMeta *usrMetaData = (NvDsUserMeta *)usrMetaList->data;
|
||||||
|
// std::cout<<"usrMetaData->base_meta.meta_type frame =
|
||||||
|
// "<<usrMetaData->base_meta.meta_type<<std::endl;
|
||||||
|
if (usrMetaData->base_meta.meta_type == NVDS_CROP_IMAGE_META) {
|
||||||
|
snprintf(fileFrameNameString, FILE_NAME_SIZE, "%s_frame_%d_%d.jpg",
|
||||||
|
osd_string, frame_number, stream_num++);
|
||||||
|
NvDsObjEncOutParams *enc_jpeg_image =
|
||||||
|
(NvDsObjEncOutParams *)usrMetaData->user_meta_data;
|
||||||
|
/* Write to File */
|
||||||
|
file = fopen(fileFrameNameString, "wb");
|
||||||
|
fwrite(enc_jpeg_image->outBuffer, sizeof(uint8_t),
|
||||||
|
enc_jpeg_image->outLen, file);
|
||||||
|
fclose(file);
|
||||||
|
// std::cout<<"fileFrameNameString =
|
||||||
|
// "<<fileFrameNameString<<std::endl;
|
||||||
|
}
|
||||||
|
usrMetaList = usrMetaList->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NvOsdManager::save_cropped_objects(NvDsFrameMeta *frame_meta,
|
||||||
|
NvDsObjectMeta *obj_meta,
|
||||||
|
guint num_rects) {
|
||||||
|
const char *osd_string = "OSD";
|
||||||
|
// std::cout<<"obj_meta->unique_component_id =
|
||||||
|
// "<<obj_meta->unique_component_id<<std::endl;
|
||||||
|
char fileObjNameString[FILE_NAME_SIZE];
|
||||||
|
|
||||||
|
/* For Demonstration Purposes we are writing metadata to jpeg images of
|
||||||
|
* vehicles or persons for the first 100 frames only.
|
||||||
|
* The files generated have a 'OSD' prefix. */
|
||||||
|
// std::cout<<"in obj_meta_list NvOsdManager"<<std::endl;
|
||||||
|
// std::quick_exit(0);
|
||||||
|
NvDsUserMetaList *usrMetaList = obj_meta->obj_user_meta_list;
|
||||||
|
FILE *file;
|
||||||
|
while (usrMetaList != NULL) {
|
||||||
|
NvDsUserMeta *usrMetaData = (NvDsUserMeta *)usrMetaList->data;
|
||||||
|
// std::cout<<"usrMetaData->base_meta.meta_type object =
|
||||||
|
// "<<usrMetaData->base_meta.meta_type<<std::endl;
|
||||||
|
if (usrMetaData->base_meta.meta_type == NVDS_CROP_IMAGE_META) {
|
||||||
|
NvDsObjEncOutParams *enc_jpeg_image =
|
||||||
|
(NvDsObjEncOutParams *)usrMetaData->user_meta_data;
|
||||||
|
|
||||||
|
snprintf(fileObjNameString, FILE_NAME_SIZE, "%s_%d_%d_%d_%s.jpg",
|
||||||
|
osd_string, frame_number, frame_meta->batch_id, num_rects,
|
||||||
|
obj_meta->obj_label);
|
||||||
|
/* Write to File */
|
||||||
|
file = fopen(fileObjNameString, "wb");
|
||||||
|
fwrite(enc_jpeg_image->outBuffer, sizeof(uint8_t),
|
||||||
|
enc_jpeg_image->outLen, file);
|
||||||
|
fclose(file);
|
||||||
|
std::cout << "fileObjNameString = " << fileObjNameString
|
||||||
|
<< " obj_meta->class_id =" << obj_meta->class_id
|
||||||
|
<< std::endl;
|
||||||
|
usrMetaList = NULL;
|
||||||
|
} else {
|
||||||
|
usrMetaList = usrMetaList->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* This is the buffer probe function that we have registered on the sink pad
|
/* This is the buffer probe function that we have registered on the sink pad
|
||||||
* of the OSD element. All the infer elements in the pipeline shall attach
|
* of the OSD element. All the infer elements in the pipeline shall attach
|
||||||
* their metadata to the GstBuffer, here we will iterate & process the metadata
|
* their metadata to the GstBuffer, here we will iterate & process the metadata
|
||||||
@ -65,6 +146,7 @@ GstPadProbeReturn NvOsdManager::osd_src_pad_buffer_probe(GstPad *pad,
|
|||||||
l_frame = l_frame->next) {
|
l_frame = l_frame->next) {
|
||||||
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *)(l_frame->data);
|
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *)(l_frame->data);
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
if (write_full_frame_to_disk == true) save_full_frame(frame_meta);
|
||||||
for (l_obj = frame_meta->obj_meta_list; l_obj != NULL;
|
for (l_obj = frame_meta->obj_meta_list; l_obj != NULL;
|
||||||
l_obj = l_obj->next) {
|
l_obj = l_obj->next) {
|
||||||
obj_meta = (NvDsObjectMeta *)(l_obj->data);
|
obj_meta = (NvDsObjectMeta *)(l_obj->data);
|
||||||
@ -80,6 +162,8 @@ GstPadProbeReturn NvOsdManager::osd_src_pad_buffer_probe(GstPad *pad,
|
|||||||
// << " Object ID: " << obj_meta->object_id
|
// << " Object ID: " << obj_meta->object_id
|
||||||
// << std::endl;
|
// << std::endl;
|
||||||
}
|
}
|
||||||
|
if (write_cropped_objects_to_disk == true)
|
||||||
|
save_cropped_objects(frame_meta, obj_meta, num_rects);
|
||||||
}
|
}
|
||||||
display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
|
display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
|
||||||
NvOSD_TextParams *txt_params = &display_meta->text_params[0];
|
NvOSD_TextParams *txt_params = &display_meta->text_params[0];
|
||||||
|
|||||||
@ -4,16 +4,19 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "gstnvdsmeta.h"
|
#include "gstnvdsmeta.h"
|
||||||
|
#include "config_manager.hpp"
|
||||||
|
#include "custom_gstnvdsinfer.hpp"
|
||||||
|
|
||||||
class NvOsdManager {
|
class NvOsdManager {
|
||||||
private:
|
private:
|
||||||
public:
|
public:
|
||||||
GstElement *nvosd = NULL;
|
GstElement *nvosd = NULL;
|
||||||
|
static bool write_full_frame_to_disk, write_cropped_objects_to_disk;
|
||||||
NvOsdManager();
|
NvOsdManager();
|
||||||
bool create_nv_osd();
|
bool create_nv_osd();
|
||||||
~NvOsdManager();
|
~NvOsdManager();
|
||||||
static gint frame_number;
|
static gint frame_number;
|
||||||
void attach_probe_to_src_nvosd();
|
void attach_probe_to_src_nvosd(NvDsObjEncCtxHandle);
|
||||||
static GstPadProbeReturn osd_src_pad_buffer_probe(GstPad *,
|
static GstPadProbeReturn osd_src_pad_buffer_probe(GstPad *,
|
||||||
GstPadProbeInfo *,
|
GstPadProbeInfo *,
|
||||||
gpointer);
|
gpointer);
|
||||||
@ -21,4 +24,6 @@ class NvOsdManager {
|
|||||||
static GstPadProbeReturn osd_sink_pad_buffer_probe(GstPad *,
|
static GstPadProbeReturn osd_sink_pad_buffer_probe(GstPad *,
|
||||||
GstPadProbeInfo *,
|
GstPadProbeInfo *,
|
||||||
gpointer);
|
gpointer);
|
||||||
|
static void save_full_frame(NvDsFrameMeta *);
|
||||||
|
static void save_cropped_objects(NvDsFrameMeta *, NvDsObjectMeta *, guint);
|
||||||
};
|
};
|
||||||
@ -623,8 +623,8 @@ bool PipelineManager::create_pipeline_elements(int num_sources,
|
|||||||
|
|
||||||
face_nv_infer_server_manager->create_face_nv_infer_server(num_sources);
|
face_nv_infer_server_manager->create_face_nv_infer_server(num_sources);
|
||||||
|
|
||||||
nv_osd_manager
|
nv_osd_manager->attach_probe_to_src_nvosd(
|
||||||
->attach_probe_to_src_nvosd(); // nvinfer Or use "nvtracker" if after
|
obj_ctx_handle); // nvinfer Or use "nvtracker" if after
|
||||||
|
|
||||||
message_handling->create_message_handler(pipeline, g_run_forever, loop);
|
message_handling->create_message_handler(pipeline, g_run_forever, loop);
|
||||||
setup_pipeline();
|
setup_pipeline();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user