DeepStream Can Orientation App#
The deepstream-can-orientation-app
sample application is provided at app/sample_apps/deepstream-can-orientation-app for your reference. This example demonstrates can orientation detection for industrial can position and rotation angles. There are several configurations for raw data input, JPEG input and Basler camera emulation input settings. The image below shows the architecture of this reference app.
video template would load custom lib libnvds_vpicanmatch.so
to do CV-based VPI template matching for industrial can orientation detection.
Getting Started#
Prerequisites#
Go to the folder sources/apps/sample_apps/deepstream-can-orientation-app
Prepare all test sample images and reference images. Run the following command to un-compress can test and reference images into folder data, and generate raw sample image data files. Run command
$ ./prepare_sample_data.sh
Note
If there is file permission issues, try with sudo.
Export DISPLAY environment to correct display. e.g. export DISPLAY=:0.0.
For Basler camera emulation test, follow instructions in
deepstream-can-orientation-app/README
to install and build all dependencies. This emulation does not require a physical Basler camera.Users can modify and configure their Basler cameras through Pylon Viewer to create new PFS and then use it in this app.
Run DeepStream Can Orientation Examples#
Run tests for JPEG files with EGL display:
$ deepstream-can-orientation-app -c ds_can_orientation_jpg.yaml
Run tests for GREY raw datafile with EGL display:
$ deepstream-can-orientation-app -c ds_can_orientation_raw.yaml -r data/test_samples_raw.grey
Run tests for performance tests without display. Update
ds_can_orientation_raw.yaml
.sink: egl_display: false sync: false debug: print_result: fasle
Run performance tests:
$ deepstream-can-orientation-app -c ds_can_orientation_raw.yaml -r data/test_samples_raw.grey -l
Run Basler Camera Emulation tests:
$ deepstream-can-orientation-app -c ds_can_orientation_basler_cam.yaml
DeepStream Can Orientation App Configuration Specifications#
deepstream-can-orientation-app settings#
The table below indicates the group settings for ds_can_orientation_jpg.yaml and ds_can_orientation_raw.yaml.
Group |
Property |
Meaning |
Type and Range |
Example |
---|---|---|---|---|
source |
source settings |
YAML node |
||
source |
uri |
decodebin uri |
string |
uri: multifile:///opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-can-orientation-app/data/sample1/test_sample_%2504d.jpg |
source |
framerate |
framerate for multifile source and raw format data source |
string |
framerate: 10/1 |
source |
frame_settings |
Raw frame setting description |
YAML node |
|
source.frame_settings |
format |
color format, choose from [GREY, RGBA] |
String: [GREY, RGBA] |
format: GREY |
source.frame_settings |
width |
width of input raw frame |
Integer: >0 |
width: 870 |
source.frame_settings |
height |
height of input raw frame |
Integer: >0 |
height: 1200 |
source |
camera |
Basler camera settings |
YAML node |
|
source.camera |
device_serial_number |
Basler camera serial number |
String |
device_serial_number: 0815-0000 |
source.camera |
pfs_path |
Basler PFS setting file path |
String |
pfs_path: basler_cam_emulation_0815-0000.pfs |
source.camera |
width |
Basler camera capture image width |
Integer: >0 |
width: 870 |
source.camera |
height |
Basler camera capture image height |
Integer: >0 |
height: 1200 |
video_template |
deepstream video template plugin settings |
YAML node |
||
video_template |
customlib_name |
Indicate custom-lib location for video template to load |
String |
customlib_name: /opt/nvidia/deepstream/deepstream/lib/libnvds_vpicanmatch.so |
video_template |
customlib_props |
Indicate the configuration settings for the custom-lib |
String |
customlib_props: config-file:config_video_template_can_match.yaml |
sink |
sink settings |
YAML node |
|
|
sink |
egl_display |
Indicate whether enable EGL display |
bool |
egl_display: true |
sink |
sync |
Indicate whether do snchronization on timestamp |
bool |
sync: true |
debug |
debug settings |
YAML node |
||
debug |
print_result |
Indicate whether print orientation result |
bool |
print_result: true |
Custom lib libnvds_vpicanmatch.so
Settings for Can Template Matching#
The table below indicates the group settings for config_video_template_can_match.yaml.
Property |
Meaning |
Type and Range |
Example |
---|---|---|---|
radius |
Indicate radius of the can, unit in cm |
Float |
radius: 3.3 |
distance |
Indicate distance from camera to can, unit in cm |
Float |
distance: 12.7 |
center |
Indicate center of the can in input raw image normalized by width |
Float |
center: 0.5 |
can_width |
Indicate width of the can in input raw image normalized by width |
Float |
can_width: 1.0 |
input_width |
Indicate width of input raw image, It should be the input image width |
Uint32 |
input_width: 870 |
input_height |
Indicate height of input raw image, It should be the input image height |
Uint32 |
input_height: 1200 |
crop_width |
Indicate width of dewarped inference image to be used to match with reference image |
Uint32 |
crop_width: 500 |
target_x |
Indicate target center in reference image in pixels |
Uint32 |
target_x: 250 |
ref_image |
Specify reference image paramaters |
YAML node |
|
ref_image.perimeter |
Indicate can circumference in reference image in pixels |
Uint32 |
|
ref_image.image_path |
Indicate refernece image path, must be in color format GREY |
|
|
ref_image.image_format |
Indicate refernece image color format, only GREY supported in this version |
String: fourcc |
|
ref_image.image_width |
Indicate refernece image width |
Uint32 |
|
ref_image.image_height |
Indicate refernece image height |
Uint32 |
|
Build application From Source#
Go to the folder sources/apps/sample_apps/deepstream-can-orientation-app.
Run the following commands:
$ make $ make install