Custom tracker always gets 0 objects in NvMOTProcessParams. I have tested a code that worked in previous DS versions, but fails now in DS 7.0, because inputs are always empty. While params->frameList is not empty (it correctly contains pointer to 1 frame), its contents (frame->objectsIn.numFilled) are always of length 0, even in a scene where your closed source trackers (NvDCF/…) correctly track objects.
• Hardware Platform (Jetson / GPU)
GPU • DeepStream Version
7.0 • TensorRT Version
8.6.1.6 • Issue Type( questions, new requirements, bugs)
bug • How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)
Create a custom tracker and observe its inputs
I am attaching a code of trivial tracker that always receives 0 objects in NvMOTProcessParams to NvMOT_Process() function.
frame->objectsIn.numFilled will be set in void NvTrackerProc::fillMOTFrame() in /opt/nvidia/deepstream/deepstream-7.0/sources/gst-plugins/gst-nvtracker/nvtracker_proc.cpp. Can you add some log to have a check?
When I use my trivial tracker, the “NvTrackerProc::fillMOTFrame” function is run, but no objects are added, pObjList->numFilled is always 0.
Furthermore, pObjList->numAllocated == 0 and frameMeta.obj_meta_list == NULL.
This is the console output when loading the tracker library:
gstnvtracker: Loading low-level lib at lib/libByteTracker.so
gstnvtracker: Optional NvMOT_RetrieveMiscData not implemented
gstnvtracker: Optional NvMOT_RemoveStreams not implemented
When I use one of your trackers, objects are added as expected. Both variables are not 0 or NULL.
The only difference between the two situations is a choice of tracker library.
I have found the issue. It appears that these parameters are mandatory since DS7.0. Once I have added these lines into NvMOT_Query, the tracker started working again.
pQuery->maxTargetsPerStream = 150;
pQuery->maxShadowTrackingAge = 30; // Maximum length of shadow tracking, required if supportPastFrame is true
pQuery->outputReidTensor = true; // Set true only if the low-level tracker supports outputting reid feature
pQuery->reidFeatureSize = 256; // Size of Re-ID feature, required if outputReidTensor is true