Menu:
- QCNode Sample Application
- 1. QCNode Sample Application command line arguments
- 2. QCNode Samples
- 2.1 QCNode DataReader Sample
- 2.2 QCNode Camera Sample
- 2.3 QCNode C2D Sample
- 2.4 QCNode Remap Sample
- 2.5 QCNode Qnn Sample
- 2.6 QCNode PostProcCenternet Sample
- 2.7 QCNode TinyViz Sample
- 2.8 QCNode VideoEncoder Sample
- 2.9 QCNode Recorder Sample
- 2.10 QCNode PlrPre Sample
- 2.11 QCNode PlrPost Sample
- 2.12 QCNode DataOnline Sample
- 2.13 QCNode CL2DFlex Sample
- 2.14 QCNode GL2DFlex Sample
- 2.15 QCNode Shared Ring Sample
- 2.16 QCNode FpsAdapter Sample
- 2.17 QCNode VideoDecoder Sample
- 2.18 QCNode OpticalFlow Sample
- 2.19 QCNode OpticalFlowViz Sample
- 2.20 QCNode FrameSync Sample
- 2.21 QCNode DepthFromStereo Sample
- 2.22 QCNode DepthFromStereoViz Sample
- 2.23 QCNode VideoDemuxer Sample
- 2.24 QCNode Radar Sample
- 2.25 QCNode C2C Sample
- 2.26 QCNode Temporal Sample
- 2.27 QCNode ResMon Sample
- 2.28 QCNode Genie Sample
- 2.29 QCNode ComputeLidarCoord Sample
- 3. Typical QCNode Sample Application pipelines
This QCNode sample is an application to demonstrate how to use the QCNode components.
Below is a sample that how to use command line arguments to tell the QCNode sample application to create the component with the specified arguments.
export QC_LOG_LEVEL=INFO
./bin/qcrun ./bin/QCNodeSampleApp \
-n component0_name -t component0_type \
-k component0_attr1_name -v component0_attr1_value \
-k component0_attr2_name -v component0_attr2_value \
... \
-n componentX_name -t componentX_type \
-k componentX_attr1_name -v componentX_attr1_value \
-k componentX_attr2_name -v componentX_attr2_value \Note: the "-n componentX_name -t componentX_type" must be in the begin for each component, and all the repeated "-k componentX_attr?_name -v componentX_attr?_value" are going to specify the attributes for this component.
| parameter | required | type | comments |
|---|---|---|---|
| -n | true | string | The unique component name |
| -t | true | string | The component type name, options from [DataReader, Camera, Remap, Qnn, C2D, PostProcCenternet, TinyViz, VideoEncoder, VideoDecoder, Recorder, PlrPre, PlrPost, DataOnline, CL2DFlex, GL2DFlex, SharedRing, FpsAdapter, OpticalFlow, OpticalFlowViz, FrameSync, DepthFromStereo, DepthFromStereoViz, Radar, C2C, Temporal, ComputeLidarCoord] |
| -k | true | string | The unique component attribute name |
| -v | true | string | The attribute value for the previous attribute name |
| -c | false | string | Specify the client name for HeteroScheduler |
| -d | false | - | Direct the QCNode log to stdout |
| -T | false | int | Specify the time in seconds that the QCNodeSampleApp runs, if not specified or value 0, it means that the QCNodeSampleApp will run forever until stop signal(Ctrl + C). |
| -V | false | - | Prints the QCNode application version information to the standard output. |
| attribute | required | type | default | comments |
|---|---|---|---|---|
| number | false | int | 1 | The number of simulated sensors |
| typeX | false | string | "image" | The buffer type for the simulated sensor X, options from [image, tensor] |
| formatX | false | string | "nv12" | The image format for the simulated camera X, options from [nv12, uyvy, rgb, bgr, p010, nv12_ubwc] |
| widthX | false | int | 1920 | The image width for the simulated camera X |
| heightX | false | int | 1024 | The image height for the simulated camera X |
| data_pathX | true | string | - | The data path for the simulated sensor X that contain the image files |
| tensor_typeX | false | string | float32 | The tensor type, options from [int8, int16, int32, int64, uint8, uint16, uint32, uint64, float16, float32, float64, sfixed_point8, sfixed_point16, sfixed_point32, ufixed_point8, ufixed_point16, ufixed_point32 ] |
| dimsX | true | string | - | The tensor dimensions, in format "N,H,W,C", "N,S,C", "N,C", or "N" depends on the number of dimensions. |
| offset | false | int | 0 | Specifies the starting index for the simulated sensor data. |
| fps | false | int | 30 | The frame rate per second |
| pool_size | false | int | 4 | the image memory pool size |
| cache | false | bool | true | use cached memory or not for the image memory |
| topic | true | string | - | the output topic name |
Note: "X" is value from 0 to number-1, thus the attribute with suffix "X" is repeated for different simulated camera.
The command line template example for image type data reader that simulate a camera:
-n CAM0 -t DataReader -k number -v 1 \
-k format0 -v uyvy -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k pool_size -v 4 \
-k topic -v /sensor/camera/CAM0/raw \Refer DataReader Utils for how to generate a data reader inputs from video(*.mp4).
The command line template example for tensor type data reader that simulate a lidar:
-n LIDAR0 -t DataReader -k number -v 2 \
-k type0 -v tensor -k tensor_type0 -v float32 -k dims0 -v "300000,4" \
-k data_path0 -v /data/LIDAR0 \
-k type1 -v image -k format1 -v nv12 -k width1 -v 1920 -k height1 -v 1024 \
-k data_path1 -v /data/LIDAR0 \
-k pool_size -v 4 -k fps -v 10 \
-k topic -v /sensor/lidar/LIDAR0/raw \Please note that for lidar pipeline, TinyViz was used to visualize the pointcould, and to save computing resource to dynamic generate images from pointcloud, pre-generated images was used, that's why another "data_path1".
Refer DataReader Utils for how to generate a data reader inputs point cloud files.
| attribute | required | type | default | comments |
|---|---|---|---|---|
| number | false | int | 1 | The number of camera streams |
| client_id | false | int | 0 | client id, used for multi client usecase, set to 0 by default for single client usecase |
| is_primary | false | bool | false | Flag to indicate if the session is primary or not when configured the clientId |
| recovery | false | bool | false | Flag to enable the self-recovery for the session |
| input_id | true | int | - | The camera input id |
| src_id | false | int | 0 | Input source identifier |
| input_mode | false | int | 0 | The input mode id |
| width | true | int | - | The image width for the stream 0 |
| height | true | int | - | The image height for the stream 0 |
| format | false | string | "nv12" | The camera frame format for the stream 0, options from [nv12, uyvy, p010, nv12_ubwc, tp10_ubwc, rgb, bgr] |
| stream_id | false | int | 0 | The camera stream id for the stream 0 |
| pool_size | false | int | 4 | The image memory pool size for the stream 0 |
| submit_request_pattern | false | int | 0 | The submit request pattern for the stream 0 |
| request_mode | false | bool | false | The camera request mode |
| frame_drop_patten | false | int | 0 | The frame drop patten defined by qcarcam |
| frame_drop_period | false | int | 0 | The frame drop period defined by qcarcam |
| isp_use_case | false | int | 3 | The ISP use case |
| op_mode | false | int | 2 | The input operation mode, 1: Inline ISP, 2: Injection to ISP. |
| multi_stream_frame_ready | false | bool | false | Flag to set multiple streams frame ready event in one callback. |
| ignore_error | false | bool | false | Ignore the error of Camera Init&Start |
| immediate_release | false | bool | false | Perform an immediate camera frame release in the camera frame ready callback if true. Be cautious, as this approach does not provide life cycle management for the camera buffer, and data consistency is not guaranteed. |
| topic | true | string | - | The output topic name |
| widthX | false | int | - | The image width for the stream X |
| heightX | false | int | - | The image height for the stream X |
| formatX | false | string | "nv12" | The camera frame format for the stream X, options from [nv12, uyvy, p010, nv12_ubwc, tp10_ubwc, rgb, bgr] |
| stream_idX | false | int | ${X} | The camera stream id for the stream X |
| pool_sizeX | false | int | 4 | The image memory pool size for the stream X |
| submit_request_patternX | false | int | 0 | The submit request pattern for the stream X |
| topicX | false | string | - | The output topic name for the stream X |
Note: "X" is value from 1 to number-1, thus the attribute with suffix "X" is repeated for different streams.
The command line template example:
- Basic request mode:
-n CAM0 -t Camera -k input_id -v 0 \
-k width -v 1928 -k height -v 1208 \
-k request_mode -v true \
-k topic -v /sensor/camera/CAM0/raw \- Multi-stream mode with request pattern:
-n CAM0 -t Camera -k input_id -v 8 -k number -v 2 \
-k isp_use_case -v 65 -k request_mode -v true \
-k multi_stream_frame_ready -v true \
-k stream_id -v 1 \
-k submit_request_pattern -v 1 \
-k width -v 3840 -k height -v 2160 \
-k pool_size -v 4 \
-k topic -v /sensor/camera/CAM0_0/raw \
-k stream_id1 -v 5 \
-k submit_request_pattern1 -v 0 \
-k width1 -v 3840 -k height1 -v 2160 \
-k pool_size1 -v 4 \
-k topic1 -v /sensor/camera/CAM0_1/raw| attribute | required | type | default | comments |
|---|---|---|---|---|
| output_width | false | int | 1920 | The output image width |
| output_height | false | int | 1024 | The output image height |
| output_format | false | string | nv12 | The output image format, options from [uyvy, nv12, rgb, bgr, p010 ] |
| batch_size | false | int | 1 | The Remap input batch size |
| input_widthX | false | int | 1920 | The input X image width |
| input_heightX | false | int | 1024 | The input X image height |
| input_formatX | false | string | uyvy | The input X image format, options from [uyvy, nv12, rgb, bgr, p010 ] |
| roi_xX | false | int | 0 | The ROI top x for input X |
| roi_yX | false | int | 0 | The ROI top y for input X |
| roi_widthX | false | int | =output_width | The ROI width for input X |
| roi_heightX | false | int | =output_height | The ROI height for input X |
| pool_size | false | int | 4 | the image memory pool size |
| cache | false | bool | true | use cached memory or not for the image memory |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
Note: "X" is value from 0 to batch_size-1, thus the attribute with suffix "X" is repeated for different input batch.
The command line template example:
-n C2D0 -t C2D -k batch_size -v 1 \
-k input_width0 -v 2048 -k input_height0 -v 1216 -k input_format0 -v nv12 \
-k roi_x0 -v 0 -k roi_y0 -v 0 -k roi_width0 -v 1928 -k roi_height0 -v 1208 \
-k output_width -v 2048 -k output_height -v 1216 -k output_format -v uyvy \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/uyvy \
-k cache -v false| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | "htp0" | The processor type, options from [htp0, htp1, cpu, gpu] |
| core_id | false | int | 0 | The processor core ID, options from [0,1,2,3] |
| rsm_priority | false | int | 0 | the RSM request priority, options [0,1,2,3], 0 is the lowest and 3 is highest priority. |
| output_width | false | int | 1152 | The output image width |
| output_height | false | int | 800 | The output image height |
| output_format | false | string | rgb | The output image format, options from [rgb, bgr] |
| batch_size | false | int | 1 | The Remap input batch size |
| input_widthX | false | int | 1920 | The input X image width |
| input_heightX | false | int | 1024 | The input X image height |
| input_formatX | false | string | uyvy | The input X image format, options from [uyvy, nv12, nv12_ubwc] |
| map_widthX | false | int | =output_width | The map width for input X |
| map_heightX | false | int | =output_height | The map height for input X |
| roi_xX | false | int | 0 | The ROI top x for input X |
| roi_yX | false | int | 0 | The ROI top y for input X |
| roi_widthX | false | int | =output_width | The ROI width for input X |
| roi_heightX | false | int | =output_height | The ROI height for input X |
| pool_size | false | int | 4 | the image memory pool size |
| normalize | false | bool | true | enable or disable normalization |
| map_table | false | bool | false | enable or disable create map from map table pointers |
| mapX_pathX | false | string | "./data/test/remap/mapX.raw" | map table path of width direction for input X |
| mapY_pathX | false | string | "./data/test/remap/mapY.raw" | map table path of height direction for input X |
| quant_scale | false | float | 0.0186584480106831 | The quantization scale of the quantize model input |
| quant_offset | false | int | 114 | The quantization offset of the quantize model input |
| Rsub | false | float | 123.675 | The sub normalization parameter of R channel |
| Rmul | false | float | 0.0171 | The mul normalization parameter of R channel |
| Radd | false | float | 0.0 | The add normalization parameter of R channel |
| Gsub | false | float | 116.28 | The sub normalization parameter of G channel |
| Gmul | false | float | 0.0175 | The mul normalization parameter of G channel |
| Gadd | false | float | 0.0 | The add normalization parameter of G channel |
| Bsub | false | float | 103.53 | The sub normalization parameter of B channel |
| Bmul | false | float | 0.0174 | The mul normalization parameter of B channel |
| Badd | false | float | 0.0 | The add normalization parameter of B channel |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
Note: "X" is value from 0 to batch_size-1, thus the attribute with suffix "X" is repeated for different input batch.
The command line template example:
-n REMAP0 -t Remap -k batch_size -v 1 \
-k input_width0 -v 2048 -k input_height0 -v 1216 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM0/uyvy \
-k output_topic -v /sensor/camera/CAM0/remap \| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | "htp0" | The processor type, options from [htp0, htp1, cpu, gpu] |
| core_ids | false | int list | 0 | Comma-separated list of core IDs on which the QNN model will run. |
| rsm_priority | false | int | 0 | the RSM request priority, options [0,1,2,3], 0 is the lowest and 3 is highest priority. |
| async | fasle | bool | false | If true, enable to use QNN Async Execute API, else use QNN Sync Execute API. |
| model_path | true | string | - | The QNN model path |
| load_type | false | string | binary | The QNN model load type, options: binary, library |
| image_convert | false | string | default | The image convert method for input image, options from [default, gray, chroma_first]. default: the default way to convert the image to 1 or more tenors. gray: convert the image to 1 tensor with the gray(luminance) part of the image. chroma_first: the same as default for NV12 or P010, but with chroma tensor first and then luma tensor. |
| pool_size | false | int | 4 | the image memory pool size |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
| udo | false | string | - | udo lib path and interface provider name. e.g. libQnnAutoAiswOpPackage.so:AutoAiswOpPackageInterfaceProvider |
| model_io_info_topic | false | string | "" | if configured, this topic will be used to publish the input/output tensor informatin of the model, generally used by the QCNode DataOnline Sample for the QNN online inference. |
| perf_profile | false | string | burst |
Specifies perf profile to set. Options: low_balanced, balanced, default, high_performance, sustained_high_performance, burst, low_power_saver, power_saver, high_power_saver, extreme_power_saver Default: default |
| weight_sharing_enabled | fasle | bool | false | If true, enable the weight sharing. |
| extended_udma | fasle | bool | false | If true, enable the extended udma feature. |
The command line template example:
-n CNT0 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM0/remap \
-k output_topic -v /sensor/camera/CAM0/qnn \| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | "cpu" | The processor type, options from [cpu, gpu] |
| roi_x | false | int | 0 | The ROI top x |
| roi_y | false | int | 0 | The ROI top y |
| width | false | int | 1920 | The ROI width |
| height | false | int | 1024 | The ROI height |
| score_threshold | false | float | 0.6 | The score threshold |
| nms_threshold | false | float | 0.6 | The NMS threshold |
| pool_size | false | int | 4 | the image memory pool size |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n POSTPROC_CNT0 -t PostProcCenternet \
-k processor -v cpu \
-k width -v 1928 -k height -v 1028 \
-k input_topic -v /sensor/camera/CAM0/qnn \
-k output_topic -v /sensor/camera/CAM0/objs \| attribute | required | type | default | comments |
|---|---|---|---|---|
| winW | false | int | 1920 | The window width |
| winH | false | int | 1080 | The window height |
| cameras | true | string list | - | The cameras' name list |
| cam_topicX | false | string | /sensor/camera/${cameras[X]}/raw | the input camera frame topic name for camera X |
| obj_topicX | false | string | /sensor/camera/${cameras[X]}/objs | the input road object topic name for camera X |
| batch_indexX | false | int | 0 | The camera frame index in the data frames |
The command line template example:
-n VIZ -t TinyViz -k cameras -v CAM0,CAM1,CAM2,CAM3The command line template example for Lidar pipeline:
-n VIZ -t TinyViz -k cameras -v LIDAR0 \
-k batch_index0 -v 1 \
-k cam_topic0 -v /sensor/lidar/LIDAR0/raw \
-k obj_topic0 -v /sensor/lidar/LIDAR0/objs| attribute | required | type | default | comments |
|---|---|---|---|---|
| width | true | int | - | The image width |
| height | true | int | - | The image height |
| pool_size | false | int | 4 | The image memory pool size |
| bitrate | false | int | 8000000 | The encoding bitrate |
| fps | false | int | 30 | The frame rate per second |
| buffer_size | false | int | 2*width*height | The image buffer size |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
| format | false | string | "nv12" | The image format, options from [nv12, nv12_ubwc] |
| output_format | false | string | h265 | The output image format, options from [h264, h265] |
| profile | false | string | HEVC_MAIN for h265 or H264_MAIN for h264 | The video encoder profile, options from [H264_BASELINE, H264_HIGH, H264_MAIN, HEVC_MAIN, HEVC_MAIN10] |
| gop | false | int | 20 | No of P-Pictures between 2 I-Frames |
| numInputBufferReq | false | int | $pool_size | Number of input buffers |
| numOutputBufferReq | false | int | $pool_size | Number of output buffers |
The command line template example:
-n VENC0 -t VideoEncoder -k width -v 1920 -k height -v 1024 \
-k bitrate -v 8000000 \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/hevc \| attribute | required | type | default | comments |
|---|---|---|---|---|
| max | false | int | 1000 | The maximum recorded images |
| topic | true | string | - | the input topic name |
For compressed image format, all the images are saved into 1 file with name "/tmp/${name}.raw". For the non-compressed image format, with separated images with name "/tmp/${name}_${id}_${batch_id}.raw" to save the real image content. The file with name "/tmp/${name}.meta" is used to record image information, below is an example:
$ cat /tmp/REC0.meta
0: frameId 0 timestamp 322037864334718: batch=3 resolution=1024x768 stride=2048 actual_height=768 format=2
$ ls -l /tmp/*.raw
-rw-rw-r-- 2 root root 1572864 Jan 04 17:27 /tmp/REC0_0_0.raw
-rw-rw-r-- 2 root root 1572864 Jan 04 17:27 /tmp/REC0_0_1.raw
-rw-rw-r-- 2 root root 1572864 Jan 04 17:27 /tmp/REC0_0_2.raw
-rw-rw-r-- 2 root root 107 Jan 04 17:27 /tmp/REC0.metaThe command line template example:
-n REC0 -t Recorder -k max -v 100 -k topic -v /sensor/camera/CAM0/hevc \| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | "htp0" | The processor type, options from [htp0, htp1, cpu, gpu] |
| core_id | false | int | 0 | The processor core ID, options from [0,1,2,3] |
| rsm_priority | false | int | 0 | the RSM request priority, options [0,1,2,3], 0 is the lowest and 3 is highest priority. |
| pillar_size_x | false | float | 0.16 | Pillar size in x direction in meters |
| pillar_size_y | false | float | 0.16 | Pillar size in y direction in meters |
| pillar_size_z | false | float | 4.0 | Pillar size in z direction in meters |
| min_x | false | float | 0.0 | Minimum range value in x direction |
| min_y | false | float | -39.68 | Minimum range value in y direction |
| min_z | false | float | -3.0 | Minimum range value in z direction |
| max_x | false | float | 69.12 | Maximum range value in x direction |
| max_y | false | float | 39.68 | Maximum range value in x direction |
| max_z | false | float | 1 | Maximum range value in x direction |
| max_points | false | int | 300000 | Maximum number of points in input point cloud |
| in_feature_dim | false | int | 4 | Number of features for each point in the input point cloud data |
| max_pillars | false | int | 12000 | Maximum number of point pillars that can be created |
| max_points_per_pillar | false | int | 32 | Maximum number of pMaximum number of points to map to each pillar |
| out_feature_dim | false | int | 10 | Number of features for each point in point pillars |
| input_mode | false | string | "xyzr" | The input pointclouds type used for OpenCL implementation, options from [xyzr, xyzrt] |
| pool_size | false | int | 4 | the image memory pool size |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n PLRPRE0 -t PlrPre -k processor -v htp0 \
-k input_topic -v /sensor/lidar/LIDAR0/raw \
-k output_topic -v /sensor/lidar/LIDAR0/plrpre \| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | "htp0" | The processor type, options from [htp0, htp1, cpu] |
| rsm_priority | false | int | 0 | the RSM request priority, options [0,1,2,3], 0 is the lowest and 3 is highest priority. |
| pillar_size_x | false | float | 0.16 | Pillar size in x direction in meters |
| pillar_size_y | false | float | 0.16 | Pillar size in y direction in meters |
| min_x | false | float | 0.0 | Minimum range value in x direction |
| min_y | false | float | -39.68 | Minimum range value in y direction |
| max_x | false | float | 69.12 | Maximum range value in x direction |
| max_y | false | float | 39.68 | Maximum range value in x direction |
| max_points | false | int | 300000 | Maximum number of points in input point cloud |
| in_feature_dim | false | int | 4 | Number of features for each point in the input point cloud data |
| max_det_out | false | int | 500 | Maximum number of 3D bounding boxes expected in the output |
| stride | false | int | 2 | The downsample ratio |
| thresh_score | false | float | 0.4 | Confidence score threshold |
| thresh_iou | false | float | 0.4 | NMS Overlap threshold |
| offset_x | false | float | 514 | The min_x corresponding pixel position x of the pre-generated lidar image |
| offset_y | false | float | 514 | The min_y corresponding pixel position y of the pre-generated lidar image |
| ratio_w | false | float | 12.903225806451614 | The ration to transfrom the point cloud position x to image pixel position x |
| ratio_h | false | float | 12.903225806451614 | The ration to transfrom the point cloud position y to image pixel position y |
| debug | false | bool | false | print out the detected 3d bounding box |
| output_indexs | false | int list | 3,0,1,4,2 | The index of the pointpillar model outputs "heapmap", "center", "center_z", "dim" and "rot" |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n PLRPOST0 -t PlrPost -k processor -v htp0 -k debug -v false \
-k input_lidar_topic -v /sensor/lidar/LIDAR0/raw \
-k input_topic -v /sensor/lidar/LIDAR0/qnn \
-k output_topic -v /sensor/lidar/LIDAR0/objs| attribute | required | type | default | comments |
|---|---|---|---|---|
| port | false | int | 6666 | The TCP server socket port number |
| pool_size | false | int | 4 | the image memory pool size |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
| model_io_info_topic | false | string | "/data/online/${name}/model/info" | This topic will be used to subscribe the input/output tensor informatin of the QNN model which will consume the online datas from host PC tool. |
| cache | false | bool | true | use cached memory or not for the buffer pool |
| timeout | false | int | 2 | socket send timeout in seconds |
The command line template example:
-n DO0 -t DataOnline -k port -v 6666 \
-k input_topic -v /data/online/DO0/input \
-k output_topic -v /data/online/DO0/output \
-k model_io_info_topic -v /data/online/DO0/model/info \| attribute | required | type | default | comments |
|---|---|---|---|---|
| batch_size | false | int | 1 | The CL2DFlex input batch size |
| input_widthX | false | int | 1920 | The input X image width |
| input_heightX | false | int | 1024 | The input X image height |
| input_formatX | false | string | nv12 | The input X image format, options from [uyvy, nv12, rgb, nv12_ubwc] |
| deviceId | false | int | 0 | The OpenCL device id |
| output_width | false | int | 1920 | The output image width |
| output_height | false | int | 1024 | The output image height |
| output_format | false | string | rgb | The output image format, options from [rgb, nv12] |
| work_modeX | false | string | resize_nearest | The input X work mode, options from [convert, resize_nearest, letterbox_nearest, letterbox_nearest_multiple, resize_nearest_multiple, convert_ubwc] |
| roi_xX | false | int | 0 | The ROI top x for input X |
| roi_yX | false | int | 0 | The ROI top y for input X |
| roi_widthX | false | int | =input_widthX | The ROI width for input X |
| roi_heightX | false | int | =input_heightX | The ROI height for input X |
| roi_number | false | int | 1 | The roi configurations number used for ExecuteWithROI |
| map_table | false | bool | false | enable or disable create map from map table pointers |
| mapX_pathX | false | string | "./data/test/CL2DFlex/mapX.raw" | map table path of width direction for input X |
| mapY_pathX | false | string | "./data/test/CL2DFlex/mapY.raw" | map table path of height direction for input X |
| pool_size | false | int | 4 | the image memory pool size |
| cache | false | bool | true | use cached memory or not for the image memory |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n CL2D -t CL2DFlex \
-k deviceId -v 0 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v nv12 \
-k batch_size -v 1 -k work_mode0 -v letterbox_nearest \
-k roi_x0 -v 960 -k roi_y0 -v 512 -k roi_width0 -v 960 -k roi_height0 -v 512 \
-k output_width -v 960 -k output_height -v 512 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/cl2d \| attribute | required | type | default | comments |
|---|---|---|---|---|
| input_widthX | false | int | 1920 | The input X image width |
| input_heightX | false | int | 1024 | The input X image height |
| input_formatX | false | string | nv12 | The input X image format, options from [nv12, uyvy] |
| output_format | false | string | rgb | The output image format, options from [rgb, nv12] |
| roi_xX | false | int | 0 | The ROI top x for input frame X |
| roi_yX | false | int | 0 | The ROI top y for input frame X |
| roi_widthX | false | int | =output_width | The ROI width for input X |
| roi_heightX | false | int | =output_height | The ROI height for input X |
| pool_size | false | int | 4 | the image memory pool size |
| cache | false | bool | true | use cached memory or not for the image memory |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n GL2D0 -t GL2DFlex -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k roi_x0 -v 100 -k roi_y0 -v 100 -k roi_width0 -v 600 -k roi_height0 -v 600 \
-k output_width -v 1024 -k output_height -v 768 -k output_format -v nv12 \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM1/raw| attribute | required | type | default | comments |
|---|---|---|---|---|
| topic | true | string | - | the topic name |
| type | false | string | pub | valid type: "pub" or "sub". If the type is "pub", get the message from DataBroker and forward it to the Shared Ring, else get the message from the Shared Ring and forward it to DataBroker. |
| queue_depth | false | int | 2 | the subscriber queue depth |
The command line template example:
# for type pub
-n CAM0_P -t SharedRing -k type -v pub \
-k topic -v /sensor/camera/CAM0/raw \
# for type sub
-n CAM0_S0 -t SharedRing -k type -v sub \
-k topic -v /sensor/camera/CAM0/raw \| attribute | required | type | default | comments |
|---|---|---|---|---|
| frame_drop_patten | false | int | 0 | The frame drop bit pattern is defined by FpsAdapter, where a value of 1 keeps the frame and a value of 0 drops the frame. The period is determined by the index of the highest bit set to 1, plus 1. For example, with 0b100, the highest bit set to 1 is at index 2, so the period is 3. This means that only 1 frame is kept out of every 3 frames, reducing the FPS from 30 to 10. |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n FpsAdpter0 -t FpsAdapter \
-k frame_drop_patten -v 0b100 \
-k input_topic -v /sensor/camera/CAM0/raw_30fps \
-k output_topic -v /sensor/camera/CAM0/raw_10fps| attribute | required | type | default | comments |
|---|---|---|---|---|
| width | true | int | - | The frame width |
| height | true | int | - | The frame height |
| input_format | false | string | h265 | The input frame format, options from [h264, h265] |
| output_format | false | string | nv12 | The output image format, options from [nv12, nv12_ubwc, p010] |
| pool_size | false | int | 4 | The image memory pool size |
| fps | false | int | 30 | The frame rate per second |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
| numInputBufferReq | false | int | $pool_size | Number of input buffers |
| numOutputBufferReq | false | int | $pool_size | Number of output buffers |
The command line template example:
-n VDEC1 -t VideoDecoder -k width -v 1920 -k height -v 1024 \
-k input_format -v h265 \
-k output_format -v nv12 \
-k input_topic -v /sensor/camera/CAM0/hevc \
-k output_topic -v /sensor/camera/CAM0_DEC/raw \| attribute | required | type | default | comments |
|---|---|---|---|---|
| eva_mode | false | string | dsp | the eval filter mode, options from [dsp, cpu, disable] |
| direction | false | string | forward | the opticalflow direction, options from [forward, backward] |
| step_size | false | int | 1 | the step size, options from [0, 1, 2] |
| width | true | int | - | The input image width |
| height | true | int | - | The input image height |
| format | false | string | nv12 | The input image format, options from [nv12, nv12_ubwc] |
| pool_size | false | int | 4 | The image memory pool size |
| fps | false | int | 30 | The frame rate per second |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n OFL0 -t OpticalFlow -k eva_mode -v cpu \
-k width -v 1920 -k height -v 1024 -k format -v nv12 \
-k fps -v 30 -k step_size -v 0 \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/mv \The Sample OpticalFlowViz converts the motion vection output from the Sample OpticalFlow to RGB image.
| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | gpu | The processor type, options from [cpu, gpu] |
| width | true | int | - | The input image width |
| height | true | int | - | The input image height |
| pool_size | false | int | 4 | The image memory pool size |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n OFLVIZ0 -t OpticalFlowViz \
-k width -v 960 -k height -v 512 \
-k input_topic -v /sensor/camera/CAM0/mv \
-k output_topic -v /sensor/camera/CAM1/raw \| attribute | required | type | default | comments |
|---|---|---|---|---|
| number | false | int | 1 | The number of input topics |
| mode | false | string | window | The frame sync mode, options from [window] |
| window | false | int | 100 | the window time in ms |
| perms | false | int list | - | A list of integers to permute the output frame order |
| input_topicX | true | string | - | the input topic name for input X |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n FS0 -t FrameSync -k number -v 4 \
-k input_topic0 -v /sensor/camera/CAM0/raw \
-k input_topic1 -v /sensor/camera/CAM1/raw \
-k input_topic2 -v /sensor/camera/CAM2/raw \
-k input_topic3 -v /sensor/camera/CAM3/raw \
-k output_topic -v /sensor/camera/FS0/raw \| attribute | required | type | default | comments |
|---|---|---|---|---|
| direction | false | string | l2r | the search direction, options from [l2r, r2l] |
| width | true | int | - | The input image width |
| height | true | int | - | The input image height |
| format | false | string | nv12 | The input image format, options from [nv12, nv12_ubwc, p010, tp10_ubwc] |
| pool_size | false | int | 4 | The image memory pool size |
| fps | false | int | 30 | The frame rate per second |
| cache | false | bool | true | use cached memory or not for the buffer pool |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n DFS0 -t DepthFromStereo \
-k width -v 1280 -k height -v 416 -k format -v nv12 \
-k fps -v 30 -k direction -v l2r \
-k input_topic -v /sensor/camera/DFS0/raw \
-k output_topic -v /sensor/camera/DFS0/dfs \The Sample DepthFromStereoViz converts the disparity and confidence map output from the Sample DepthFromStereo to RGB image.
| attribute | required | type | default | comments |
|---|---|---|---|---|
| processor | false | string | gpu | The processor type, options from [cpu, gpu] |
| width | true | int | - | The input image width |
| height | true | int | - | The input image height |
| pool_size | false | int | 4 | The image memory pool size |
| disparity_max | false | int | 1008 | The maximum value of the disparity |
| conf_threshold | false | int | 0 | The threshold value of the confidence |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n DFSVIZ0 -t DepthFromStereoViz -k processor -v gpu \
-k width -v 1280 -k height -v 416 \
-k input_topic -v /sensor/camera/DFS0/dfs \
-k output_topic -v /sensor/camera/CAM2/raw \| attribute | required | type | default | comments |
|---|---|---|---|---|
| input_file | true | string | - | The input video file path |
| start_frame_idx | false | int | 0 | The index of beginning frame for demuxer |
| replay_mode | true | bool | false | The option to enable replay mode |
| fps | false | int | 30 | The frame rate per second |
| topic | true | string | - | the topic name |
The command line template example:
-n VDMUX0 -t VideoDemuxer \
-k input_file -v /data/test/test.mp4 \
-k replay_mode -v true \
-k start_time -v 0 \
-k playback_time 2000 \
-k topic -v /sensor/camera/CAM0/hevc| attribute | required | type | default | comments |
|---|---|---|---|---|
| max_input_buffer_size | false | int | 1048576 | Maximum input buffer size in bytes (1MB default, max 100MB) |
| max_output_buffer_size | false | int | 1048576 | Maximum output buffer size in bytes (1MB default, max 100MB) |
| service_name | false | string | "/dev/radar0" | Radar service device path |
| timeout_ms | false | int | 5000 | Processing timeout in milliseconds (max 60 seconds) |
| enable_performance_log | false | bool | false | Enable/disable performance logging |
| pool_size | false | int | 4 | Number of buffers in output buffer pool (max 32) |
| cache | false | bool | true | Enable/disable cached memory allocation |
| input_topic | true | string | - | Input topic name for radar data |
| output_topic | true | string | - | Output topic name for processed results |
The QC Radar Sample demonstrates hardware-accelerated radar data processing using the QC Radar Node component. It provides a complete radar processing pipeline that can read radar data from input topics, process it using hardware acceleration, and publish the results to output topics.
Key Features:
- Hardware-accelerated radar processing via QC Radar Node
- Configurable buffer sizes and processing parameters
- Zero-copy buffer sharing between pipeline components
- Performance monitoring and logging capabilities
- Robust error handling and recovery mechanisms
- Thread-safe operation with dedicated processing thread
The command line template example:
-n RADAR0 -t Radar \
-k max_input_buffer_size -v 2097152 \
-k max_output_buffer_size -v 2097152 \
-k service_name -v "/dev/radar0" \
-k timeout_ms -v 10000 \
-k enable_performance_log -v true \
-k pool_size -v 8 \
-k cache -v true \
-k input_topic -v /sensor/radar/RADAR0/raw \
-k output_topic -v /sensor/radar/RADAR0/processed \Typical Usage Patterns:
- DataReader → Radar → Recorder Pipeline:
./bin/qcrun ./bin/QCNodeSampleApp \
-n RADAR_DATA -t DataReader -k number -v 1 \
-k type0 -v tensor -k tensor_type0 -v uint8 -k dims0 -v "2097152,1" \
-k data_path0 -v /data/radar_input \
-k topic -v /sensor/radar/RADAR0/raw \
-n RADAR0 -t Radar \
-k max_input_buffer_size -v 2097152 \
-k max_output_buffer_size -v 2097152 \
-k service_name -v "/dev/radar0" \
-k timeout_ms -v 10000 \
-k enable_performance_log -v true \
-k input_topic -v /sensor/radar/RADAR0/raw \
-k output_topic -v /sensor/radar/RADAR0/processed \
-n RADAR_REC -t Recorder -k max -v 100 \
-k topic -v /sensor/radar/RADAR0/processedThis pipeline demonstrates:
- DataReader: Reads raw radar data files (0.raw, 1.raw, 2.raw, etc.) from
/data/radar_input/directory asQC_BUFFER_TYPE_TENSORbuffers - Radar: Processes the raw radar data using hardware acceleration via the Radar Node component
- Recorder: Writes the processed results back to disk as individual files (
/tmp/RADAR_REC_0_0.raw,/tmp/RADAR_REC_1_0.raw, etc.) with metadata in/tmp/RADAR_REC.meta
- Radar Processing with Performance Monitoring:
./bin/qcrun ./bin/QCNodeSampleApp \
-n RADAR_DATA -t DataReader -k number -v 1 \
-k type0 -v tensor -k tensor_type0 -v uint8 -k dims0 -v "1048576,1" \
-k data_path0 -v /data/radar_input \
-k fps -v 10 \
-k topic -v /sensor/radar/RADAR0/raw \
-n RADAR0 -t Radar \
-k max_input_buffer_size -v 1048576 \
-k max_output_buffer_size -v 1048576 \
-k service_name -v "/dev/radar0" \
-k timeout_ms -v 5000 \
-k enable_performance_log -v true \
-k pool_size -v 8 \
-k input_topic -v /sensor/radar/RADAR0/raw \
-k output_topic -v /sensor/radar/RADAR0/processedThis pipeline demonstrates radar processing with detailed performance monitoring and logging enabled.
Data Preparation: To use the radar pipeline, prepare your radar data files in the following format:
- Create a directory (e.g.,
/data/radar_input/) - Place raw radar data files named sequentially:
0.raw,1.raw,2.raw, etc. - Each file should contain raw radar data up to the specified buffer size
- The DataReader will read these files sequentially and create
QC_BUFFER_TYPE_TENSORbuffers - The Radar component will process these tensors using hardware acceleration
- The Recorder will save the processed results back to disk with metadata
| attribute | required | type | default | comments |
|---|---|---|---|---|
| topic | true | string | - | the topic name |
| type | false | string | pub | valid type: "pub" or "sub". If the type is "pub", get the message from DataBroker and forward it to the PCIe C2C, else get the message from the PCIe C2C and forward it to DataBroker. |
| queue_depth | false | int | 2 | the subscriber queue depth |
| width | true | int | - | The image width |
| height | true | int | - | The image height |
| format | false | string | nv12 | The image format, options from [nv12, nv12_ubwc, uyvy, p010, rgb, bgr] |
| pool_size | false | int | 4 | The image memory pool size |
| channel | false | int | 0 | The PCIe C2C channel ID, start from 0 |
| buffers_name | true | string | - | The input buffers name, only valid if type is "pub". |
The command line template example:
# for type pub
-n C2C_CAM0 -t C2C -k channel -v 0 -k type -v pub \
-k buffers_name -v CAM0.0 \
-k width -v 1920 -k height -v 1080 -k format -v nv12 \
-k topic -v /sensor/camera/CAM0/raw \
# for type sub
-n C2C_CAM0 -t C2C -k channel -v 0 -k type -v sub \
-k width -v 1920 -k height -v 1080 -k format -v nv12 \
-k topic -v /sensor/camera/CAM0/raw \This is a specially designed sample for temporal-type models such as VAD, which has a temporal input derived from one of the previous model outputs.
graph LR
subgraph Inputs
IPP["Image PreProc"]
SN["Misc"]
end
Temp["Temporary"]
FS["FrameSync"]
QNN["QNN"]
IPP -- image --> FS
SN -- canbus --> FS
SN -- lidar2img --> FS
Temp -- prev_bev --> FS
Temp -- use_prev_flag --> FS
FS --> QNN
QNN -- bev_embed --> Temp
PP["PostProc"]
QNN -- all_cls_scores --> PP
QNN -- all_bbox_preds --> PP
QNN -- all_traj_preds --> PP
QNN -- "..." --> PP
| attribute | required | type | default | comments |
|---|---|---|---|---|
| number | false | int | 1 | The number of temporal tensors |
| temporal_tensor_type | false | string | ufixed_point8 | The default temporal tensor type, options from [float32,ufixed_point8, ufixed_point16] |
| temporal_tensor_dims | true | string | - | The default temporal tensor dimensions, in format "N,H,W,C", "N,S,C", "N,C", or "N" depends on the number of dimensions. |
| temporal_quant_scale | false | float | 1.0f | The default quantization scale of the quantize temporal tensor |
| temporal_quant_offset | false | int | 0 | The default quantization offset of the quantize temporal tensor |
| temporal_index | false | int | 0 | The default temporal tensor index of the outputs of the temporal model. |
| temporal_tensor_typeX | false | string | =temporal_tensor_type | The temporal tensor type for tensor X |
| temporal_tensor_dimsX | false | string | =temporal_tensor_dims | The temporal tensor dimensions for tensor X |
| temporal_quant_scaleX | false | float | =temporal_quant_scale | The quantization scale for tensor X |
| temporal_quant_offsetX | false | int | =temporal_quant_offset | The quantization offset for tensor X |
| temporal_indexX | false | int | =temporal_index | The temporal tensor index for tensor X |
| use_flag_tensor_type | false | string | - | The use flag tensor type, options from [float32,ufixed_point8, ufixed_point16] |
| use_flag_tensor_dims | false | string | "1" | The use flag tensor dimensions, in format "N,H,W,C", "N,S,C", "N,C", or "N" depends on the number of dimensions. |
| use_flag_quant_scale | false | float | 1.0f | The quantization scale of the quantize use flag tensor |
| use_flag_quant_offset | false | int | 0 | The quantization offset of the quantize use flag tensor |
| window | false | int | 200 | The receive window time in ms |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
Note: "X" is value from 0 to number-1.
The command line template example:
-n TEMP0 -t Temporal \
-k temporal_tensor_type -v ufixed_point8 -k temporal_tensor_dims -v "1,100,100,256" \
-k temporal_quant_scale -v 0.0230286 -k temporal_quant_offset -v -131 \
-k temporal_index -v 0 \
-k use_flag_tensor_type -v ufixed_point8 -k use_flag_tensor_dims -v "1" \
-k use_flag_quant_scale -v 0.003921576 -k use_flag_quant_offset -v 0 \
-k input_topic -v /sensor/camera/VAD0/qnn \
-k output_topic -v /sensor/camera/VAD0/temp \The Sample ResMon gets the real-time system loading, including CPU utilization, GPU utilization, NSP0/NSP1 utilization and DDR bandwidth. Users can configure the sampling interval and total sampling duration, and optionally enable loop mode. When loop mode is enabled, the total sampling duration is ignored, and ResMon will continue running indefinitely.
| attribute | required | type | default | comments |
|---|---|---|---|---|
| metrics | true | string list | - | The metric names for ResMon. Options: cpu_util, gpu_util, nsp0_util, nsp1_util, ddr_bw |
| loop_mode | true | bool | true | The option to enable loop mode |
| sample_interval | true | int | 5000 | The ResMon sampling iterval in ms |
| total_time | false | int | 0 | The ResMon total sampling time in ms |
loop mode:
-n RESMON -t ResMon \
-k metrics -v cpu_util,gpu_util,nsp0_util,nsp1_util,ddr_bw \
-k loop_mode -v true \
-k sample_interval -v 1000non-loop mode:
-n RESMON -t ResMon \
-k metrics -v cpu_util,gpu_util,nsp0_util,nsp1_util,ddr_bw \
-k loop_mode -v false \
-k sample_interval -v 1000 \
-k total_time -v 10000| attribute | required | type | default | comments |
|---|---|---|---|---|
| config | true | string | - | The Genie Dialog JSON configuration file. |
| embedding_table | true | string | - | Token-to-Embedding lookup table provided as a file. |
| lut_data_type | true | string | float32 | Token-to-Embedding lookup table data type, options from [float32,ufixed_point8,ufixed_point16,sfixed_point8,sfixed_point16] |
| lut_scale | false | float | 1.0f | The quantization scale of the Token-to-Embedding lookup table |
| lut_offset | false | int | 0 | The quantization offset of the Token-to-Embedding lookup table |
| input_data_type | true | string | float32 | Input data type, options from [float32,ufixed_point8,ufixed_point16,sfixed_point8,sfixed_point16] |
| input_scale | false | float | 1.0f | The quantization scale of the input |
| input_offset | false | int | 0 | The quantization offset of the input |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n GENIE0 -t Genie -k config -v qwen2vl.json \
-k embedding_table -v embedding_weights_152064x3584_ssd.bin \
-k input_topic -v /sensor/genie/embeding/raw \
-k output_topic -v /sensor/genie/decoder/text \The Sample ComputeLidarCoord is used for lidar raw data preprocessing, it computes points cloud coordinates from distance and azimuth angle, also do correction according to firetime matrix and angle correction matrix. The input topic should contain 3 float tensors with following dimensions:
- raw data which contains distance, intensity, azimuth, motor information: [cols, blocks*2+2]
- firetime correction matrix: [cols]
- azimuth correction matrix: [cols]
The command line template example:
| attribute | required | type | default | comments |
|---|---|---|---|---|
| cols | false | int | 1000 | The lidar raw data colums number in vertical direction |
| blocks | false | int | 100 | The lidar raw data blocks number in horizontal direction |
| pool_size | false | int | 4 | The image memory pool size |
| cache | false | bool | true | use cached memory or not for the image memory |
| input_topic | true | string | - | the input topic name |
| output_topic | true | string | - | the output topic name |
The command line template example:
-n LIDAR0 -t DataReader \
-k number -v 3 \
-k type0 -v tensor -k dims0 -v "1000,202" \
-k type1 -v tensor -k dims1 -v "1000" \
-k type2 -v tensor -k dims2 -v "1000" \
-k topic -v /sensor/lidar/LIDAR0/input \
-n LIDARPRE -t ComputeLidarCoord \
-k cols -v 1000 -k blocks -v 100 \
-k input_topic -v /sensor/lidar/LIDAR0/input \
-k output_topic -v /sensor/lidar/LIDAR1/output \export QC_LOG_LEVEL=INFO
./bin/qcrun ./bin/QCNodeSampleApp -n CAM0 -t DataReader -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k format0 -v uyvy -k topic -v /sensor/camera/CAM0/raw \
-n REMAP0 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/remap \
-n CNT0 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM0/remap \
-k output_topic -v /sensor/camera/CAM0/qnn \
-n POSTPROC_CNT0 -t PostProcCenternet \
-k processor -v gpu \
-k width -v 1920 -k height -v 1024 \
-k input_topic -v /sensor/camera/CAM0/qnn \
-k output_topic -v /sensor/camera/CAM0/objs \
-n CAM1 -t DataReader -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k format0 -v uyvy -k topic -v /sensor/camera/CAM1/raw \
-n REMAP1 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM1/raw \
-k output_topic -v /sensor/camera/CAM1/remap \
-n CNT1 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM1/remap \
-k output_topic -v /sensor/camera/CAM1/qnn \
-n POSTPROC_CNT1 -t PostProcCenternet \
-k processor -v gpu \
-k width -v 1920 -k height -v 1024 \
-k input_topic -v /sensor/camera/CAM1/qnn \
-k output_topic -v /sensor/camera/CAM1/objs \
-n CAM2 -t DataReader -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k format0 -v uyvy -k topic -v /sensor/camera/CAM2/raw \
-n REMAP2 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM2/raw \
-k output_topic -v /sensor/camera/CAM2/remap \
-n CNT2 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM2/remap \
-k output_topic -v /sensor/camera/CAM2/qnn \
-n POSTPROC_CNT2 -t PostProcCenternet \
-k processor -v gpu \
-k width -v 1920 -k height -v 1024 \
-k input_topic -v /sensor/camera/CAM2/qnn \
-k output_topic -v /sensor/camera/CAM2/objs \
-n CAM3 -t DataReader -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k format0 -v uyvy -k topic -v /sensor/camera/CAM3/raw \
-n REMAP3 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM3/raw \
-k output_topic -v /sensor/camera/CAM3/remap \
-n CNT3 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM3/remap \
-k output_topic -v /sensor/camera/CAM3/qnn \
-n POSTPROC_CNT3 -t PostProcCenternet \
-k processor -v gpu \
-k width -v 1920 -k height -v 1024 \
-k input_topic -v /sensor/camera/CAM3/qnn \
-k output_topic -v /sensor/camera/CAM3/objs \
-n VIZ -t TinyViz -k cameras -v CAM0,CAM1,CAM2,CAM3export QC_LOG_LEVEL=INFO
./bin/qcrun ./bin/QCNodeSampleApp -n CAM0 -t Camera -k input_id -v 0 \
-k width -v 1928 -k height -v 1208 \
-k topic -v /sensor/camera/CAM0/raw \
-n C2D0 -t C2D -k batch_size -v 1 \
-k input_width0 -v 1928 -k input_height0 -v 1208 -k input_format0 -v nv12 \
-k roi_x0 -v 0 -k roi_y0 -v 0 -k roi_width0 -v 1928 -k roi_height0 -v 1208 \
-k output_width -v 1928 -k output_height -v 1208 -k output_format -v uyvy \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/uyvy \
-n REMAP0 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1928 -k input_height0 -v 1208 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM0/uyvy \
-k output_topic -v /sensor/camera/CAM0/remap \
-n CNT0 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM0/remap \
-k output_topic -v /sensor/camera/CAM0/qnn \
-n POSTPROC_CNT0 -t PostProcCenternet \
-k processor -v gpu \
-k width -v 1928 -k height -v 1208 \
-k input_topic -v /sensor/camera/CAM0/qnn \
-k output_topic -v /sensor/camera/CAM0/objs \
-n CAM1 -t DataReader -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k format0 -v uyvy -k topic -v /sensor/camera/CAM1/raw \
-n REMAP1 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM1/raw \
-k output_topic -v /sensor/camera/CAM1/remap \
-n CNT1 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM1/remap \
-k output_topic -v /sensor/camera/CAM1/qnn \
-n POSTPROC_CNT1 -t PostProcCenternet \
-k processor -v gpu \
-k width -v 1920 -k height -v 1024 \
-k input_topic -v /sensor/camera/CAM1/qnn \
-k output_topic -v /sensor/camera/CAM1/objs \
-n VIZ -t TinyViz -k cameras -v CAM0,CAM1./bin/qcrun ./bin/QCNodeSampleApp \
-n LIDAR0 -t DataReader -k number -v 2 \
-k type0 -v tensor -k tensor_type0 -v float32 -k dims0 -v "300000,4" \
-k data_path0 -v /data/LIDAR0 \
-k type1 -v image -k format1 -v nv12 -k width1 -v 1920 -k height1 -v 1024 \
-k data_path1 -v /data/LIDAR0 \
-k pool_size -v 4 -k fps -v 10 \
-k topic -v /sensor/lidar/LIDAR0/raw \
-n PLRPRE0 -t PlrPre -k processor -v htp0 \
-k input_topic -v /sensor/lidar/LIDAR0/raw \
-k output_topic -v /sensor/lidar/LIDAR0/plrpre \
-n PLR0 -t Qnn -k processor -v htp0 \
-k model_path -v data/pointpillar/program.bin \
-k input_topic -v /sensor/lidar/LIDAR0/plrpre \
-k output_topic -v /sensor/lidar/LIDAR0/qnn \
-n PLRPOST0 -t PlrPost -k processor -v htp0 -k debug -v false \
-k input_lidar_topic -v /sensor/lidar/LIDAR0/raw \
-k input_topic -v /sensor/lidar/LIDAR0/qnn \
-k output_topic -v /sensor/lidar/LIDAR0/objs \
-n VIZ -t TinyViz -k cameras -v LIDAR0 \
-k batch_index0 -v 1 \
-k cam_topic0 -v /sensor/lidar/LIDAR0/raw \
-k obj_topic0 -v /sensor/lidar/LIDAR0/objs -d./bin/qcrun ./bin/QCNodeSampleApp \
-n DO0 -t DataOnline -k port -v 6666 \
-k input_topic -v /data/online/DO0/input \
-k output_topic -v /data/online/DO0/output \
-k model_io_info_topic -v /data/online/DO0/model/info \
-n CNT0 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /data/online/DO0/output \
-k output_topic -v /data/online/DO0/input \
-k model_io_info_topic -v /data/online/DO0/model/info -d./bin/qcrun ./bin/QCNodeSampleApp \
-n CAM0 -t DataReader -k width0 -v 1920 -k height0 -v 1024 \
-k data_path0 -v /data/4K_street_1000_500_1920_1024_uyvy \
-k format0 -v uyvy -k topic -v /sensor/camera/CAM0/raw \
-n CAM0_P -t SharedRing -k type -v pub \
-k topic -v /sensor/camera/CAM0/raw -d &
./bin/qcrun ./bin/QCNodeSampleApp \
-n CAM0_S0 -t SharedRing -k type -v sub \
-k topic -v /sensor/camera/CAM0/raw \
-n REMAP0 -t Remap -k batch_size -v 1 \
-k input_width0 -v 1920 -k input_height0 -v 1024 -k input_format0 -v uyvy \
-k output_width -v 1152 -k output_height -v 800 -k output_format -v rgb \
-k input_topic -v /sensor/camera/CAM0/raw \
-k output_topic -v /sensor/camera/CAM0/remap \
-n REMAP0_P -t SharedRing -k type -v pub \
-k topic -v /sensor/camera/CAM0/remap -d &
./bin/qcrun ./bin/QCNodeSampleApp \
-n REMAP0_S0 -t SharedRing -k type -v sub \
-k topic -v /sensor/camera/CAM0/remap \
-n CNT0 -t Qnn -k processor -v htp0 \
-k model_path -v data/centernet/program.bin \
-k input_topic -v /sensor/camera/CAM0/remap \
-k output_topic -v /sensor/camera/CAM0/qnn \
-n CNT0_P -t SharedRing -k type -v pub \
-k topic -v /sensor/camera/CAM0/qnn -d &
./bin/qcrun ./bin/QCNodeSampleApp \
-n CAM0_S1 -t SharedRing -k type -v sub \
-k topic -v /sensor/camera/CAM0/raw \
-n CNT0_S0 -t SharedRing -k type -v sub \
-k topic -v /sensor/camera/CAM0/qnn \
-n POSTPROC_CNT0 -t PostProcCenternet \
-k width -v 1920 -k height -v 1024 \
-k input_topic -v /sensor/camera/CAM0/qnn \
-k output_topic -v /sensor/camera/CAM0/objs \
-n VIZ -t TinyViz -k cameras -v CAM0 -k winH -v 1050 -d