How to match vehicle IDs when using LPD in back-to-back detectors?

**• Hardware Platform (GPU) RTX 3060
**• DeepStream Version 7.0
• TensorRT Version
**• NVIDIA GPU Driver Version (valid for GPU only) CUDA12.1
• Issue Type (questions)
I am using back-to-back detectors to set up vehicle detection (primary GIE) along with LPD & LPR (secondary GIE). Is there a way to match the LPR results to the vehicle IDs detected in vehicle detection?

source.txt

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
#gie-kitti-output-dir=streamscl

[tiled-display]
enable=1
rows=4
columns=2
width=1920
height=1080
gpu-id=0
#(0): nvbuf-mem-default - Default memory allocated, specific to particular platform
#(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory, applicable for Tesla
#(2): nvbuf-mem-cuda-device - Allocate Device cuda memory, applicable for Tesla
#(3): nvbuf-mem-cuda-unified - Allocate Unified cuda memory, applicable for Tesla
#(4): nvbuf-mem-surface-array - Allocate Surface Array memory, applicable for Jetson
nvbuf-memory-type=0

[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
type=2
uri=file:/user/config/MB-51Y26CSAGNI.mkv


[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File 7=nv3dsink (Jetson only)
type=2
sync=1
source-id=0
gpu-id=0
nvbuf-memory-type=0

[sink1]
enable=0
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=3
#1=mp4 2=mkv
container=1
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=0
#iframeinterval=10
bitrate=2000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
output-file=out.mp4
source-id=0

[sink2]
enable=0
#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming
type=4
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=1
sync=0
#iframeinterval=10
bitrate=400000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
rtsp-port=8554
udp-port=5400



[osd]
enable=1
gpu-id=0
border-width=1
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0

[streammux]
gpu-id=0
##Boolean property to inform muxer that sources are live
live-source=0
buffer-pool-size=1
batch-size=1
##time out in usec, to wait after the first buffer is available
##to push the batch even if the complete batch is not formed
batched-push-timeout=40000
## Set muxer output width and height
width=1920
height=1080
##Enable to maintain aspect ratio wrt source, and allow black borders, works
##along with width, height properties
enable-padding=0
nvbuf-memory-type=0

[primary-gie]
enable=1
gpu-id=0
model-engine-file=/opt/nvidia/deepstream/deepstream-6.1/samples/models/Primary_Detector/resnet10.caffemodel_b4_gpu0_int8.engine
interval=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=/opt/nvidia/deepstream/deepstream-6.1/samples/configs/deepstream-app/config_infer_primary.txt


[tracker]
enable=1
tracker-width=640
tracker-height=384
#tracker-width=960
#tracker-height=544
ll-lib-file=/opt/nvidia/deepstream/deepstream/lib/libnvds_nvmultiobjecttracker.so
#ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_IOU.yml
ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_NvDCF_perf.yml
#ll-config-file=/chttl/config/ReID/config_tracker_NvDCF_accuracy.yml
#ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_NvDCF_accuracy.yml
#ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_NvDCF_accuracy_nv.yml
#ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_NvDCF_max_perf.yml
#ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_DeepSORT.yml
#ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_tracker_NvSORT.yml
gpu-id=0
enable-batch-process=1
#enable-past-frame=1
#display-tracking-id=1

[secondary-gie0]
enable=1
#model-engine-file=/opt/nvidia/deepstream/deepstream/samples/models/Secondary_CarColor/resnet18.caffemodel_b16_gpu0_int8.engine
#batch-size=16
gpu-id=0
gie-unique-id=5
operate-on-gie-id=1
operate-on-class-ids=2;5;6;
config-file=/chttl/config/config_infer_secondary_color.txt

[secondary-gie1]
enable=1
model-engine-file=/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app/tao_pretrained_models/yolov4-tiny/yolov4_tiny_usa_b4_gpu0_int8.engine
gpu-id=0
batch-size=4
gie-unique-id=2
operate-on-gie-id=1
#operate-on-class-ids=0;
config-file=/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app/lpd_us_config.txt

[secondary-gie2]
enable=1
model-engine-file=/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app/LP/LPR/us_lprnet_baseline18_deployable.etlt_b16_gpu0_fp16.engine

batch-size=1
gpu-id=0
gie-unique-id=3
operate-on-gie-id=2
#operate-on-class-ids=0;
config-file=/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app/lpr_config_sgie_us.txt


[tests]
file-loop=1

[nvds-analytics]
enable=0
config-file=/chttl/config/config_nvdsanalytics.txt

LPD inference result will be stored in the object meta, LPR output will be attached to the classifier meta in the object meta. deepstream_tao_apps/apps/tao_others/deepstream_lpr_app/deepstream-lpr-app/deepstream_lpr_app.c at master · NVIDIA-AI-IOT/deepstream_tao_apps
If you get the object meta before nvmultistreamtiler, the “parent” in the NvDsObjectMeta will be the PGIE object meta for the SGIE object.

To run DeepStream 6.2 in the DeepStream 7.0 environment is not supported.

Will the “parent” in the NvDsObjectMeta for the SGIE object include the tracker ID from the PGIE object meta?

Because I need to match the object ID with its license plate.

Alright, that was an input error on my part.

The “parent” is also a NvDsObjectMeta. Please refer to NVIDIA DeepStream SDK API Reference: _NvDsObjectMeta Struct Reference | NVIDIA Docs


Will ID75 and license plate AMK0616 be under the same parent, as shown in the example image?

Yes. The plate string is stored in the SGIE object meta, and the “parent” of the SGIE object meta is the PGIE object meta. " object_id" in the object meta is the track id.

https://docs.nvidia.com/metropolis/deepstream/dev-guide/sdk-api/struct__NvDsObjectMeta.html#a05c043991bdf68a50e1844ae92283337

1 Like

Thank you very much.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.