This document will help you port your applications from DriveWorks SDK 1.5 to DriveWorks SDK 2.0.
The module dwCalibratedCamera has been separated from dwRig renamed to dwCameraModel. It resides in the folder dw/calibration/cameramodel. It provides functions to handle calibrated intrinsic camera models.
Camera.h to CameraModel.h.dwCameraModelHandle_t and dwConstCameraModelHandle_t, respectively.CameraModel.h have been updated from dwCalibratedCamera to dwCameraModel.dwCameraModel_applyImageTransform() has been updated and now it takes the additional parameter bool updateMasks.dwCameraModel_initialize has been moved here from dwRig.For more information see Rig Configuration.
This release adds support for generating and using DLA (Deep-Learning-Accelerator) models. This change requires selection of the processor type at the time of initialization; therefore, the following functions' signatures have been updated accordingly:
dwDNN_initializeTensorRTFromFile() has been renamed to dwDNN_initializeTensorRTFromFileNew() and requires an additional argument of type dwProcessorType indicating on which processor the model shall run on. Note that the model must be generated on the corresponding processor.dwDNN_initializeTensorRTFromMemory() has been renamed to dwDNN_initializeTensorRTFromMemoryNew() and requires an additional argument of type dwProcessorType indicating on which processor the model shall run on. Note that the model must be generated on the corresponding processor.New suffix for the new APIs will be removed in the next major release.For more information see DNN.
dwEgoMotionParameters has been renamed to dwEgomotionParameters.dwEgoMotionSensorCharacteristics has been renamed to dwEgomotionSensorCharacteristics.dwEgomotionParameters.enableLocationFilter has been renamed to dwEgomotionParameters.disableLocationFilter.dw/radarmotion has been moved to dw/egomotion/radar.For more information see Egomotion.
ICP has been completelly moved to point cloud processing module.
For more information see Point Cloud ICP.
dwPyramidHandle_t to dwPyramidImage| Old name | New name |
|---|---|
| dwPyramid_initialize() | dwPyramid_create() |
| dwPyramid_release() | dwPyramid_destroy() |
| dwPyramid_build() | dwImageFilter_computePyramid() |
| dwPyramid_getLevelCount() | dwPyramidImage::levelCount |
dwPyramidImage::levelImages[level] provides an dwImageHandle_t for the (level)-th image, dwImage_getProperties() acquires the image size, and dwImage_getCUDA() acquires dwImageCUDA data.
Example: Old code for creating, building and destroying a pyramid:
New code for creating, building and destroying a pyramid:
dwFeatureListHandle_t and dwFeatureListPointers to dwFeatureHistoryArraydwFeatureStatus has been renamed to dwFeature2DStatus.DW_FEATURE_STATUS_XXX has been renamed to DW_FEATURE2D_STATUS_XXX.The new dwFeatureHistoryArray struct provides pointers such as: *statuses, *ages, *ids, *locationHistory and *featureCount like the old dwFeatureListPointers struct did. It is also created and destroyed like the old handle dwFeatureListHandle_t. dwFeatureHistoryArray can be created on page-able/pinned CPU or CUDA memory.
| Old name | New name |
|---|---|
| dwFeatureListPointers::statuses | dwFeatureHistoryArray::statuses |
| dwFeatureListPointers::ages | dwFeatureHistoryArray::ages |
| — | dwFeatureHistoryArray::ids |
| dwFeatureListPointers::locationHistory | dwFeatureHistoryArray::locationHistory |
| dwFeatureListPointers::featureCount | dwFeatureHistoryArray::featureCount |
| dwFeatureList_initialize() | dwFeatureHistoryArray_create() |
| dwFeatureList_release() | dwFeatureHistoryArray_destroy() |
| dwFeatureList_reset() | dwFeatureHistoryArray_reset() |
| dwFeatureList_getDataBasePointer() | dwFeatureHistoryArray::data, dwFeatureHistoryArray::bytes |
| dwFeatureList_getCurrentTimeIdx() | dwFeatureHistoryArray::currentTimeIdx |
| dwFeatureList_setCurrentTimeIdx() | dwFeatureHistoryArray::currentTimeIdx |
| dwFeatureList_getFeatureListSize() | dwFeatureHistoryArray::maxFeatures, dwFeatureHistoryArray::maxHistory |
For new dw_imageprocessing APIs, there's no need to call selectValid(), compact() and proximityFilter() explicitly. They are automatically called within the DriveWorks module.
Example:
In the old dw_feature APIs, the application needed to create a dwFeatureListHandle_t object and call dwFeatureList_getDataPointers() to get the interpretable dwFeatureListPointers.
If the application needed a CPU copy of the featureList handle, it first had to allocate CPU memory and call dwFeatureList_getDataPointers() to interpret it into dwFeatureListPointers.
It also needed the raw data pointer to copy data between the CPU and GPU.
In the new dw_imageprocessing APIs, the application only needs to create the dwFeatureHistoryArray object on the CPU and GPU. It provides both raw pointers and interpretable pointers. It also provides the dwFeatureHistoryArray_copyAsync() API to easily copy data between two feature history arrays.
The application can also create dwFeatureHistoryArray on pinned memory, it only needs to change DW_MEMORY_TYPE_CPU to DW_MEMORY_TYPE_PINNED during creation.
Like dwFeatureListHandle_t, there are also reset() and destroy() APIs. dwFeatureHistoryArray must be destroyed before the application exits.
timeIdx slice from dwFeatureHistoryArraySimilar to dwFeatureListPointers::locationHistory, dwFeatureHistoryArray::locationHistory stores historyCapacity time period of maxFeatureCount features. To get a particular feature[i] for timeIdx, it used to be:
The new dw_imageprocessing modules provides a dwFeatureArray struct that contains features for a single time slice, so there's no need to compute histIdx any more.
It can also get the most recent (top-most) time slice, or the slice that is 1 frame earlier than the top-most.
dwFeatureArray acquired by dwFeatureHistoryArray_getXXX APIs don't need to be destroyed as they are only shallow copies. Resources are automatically freed when the corresponding dwFeatureHistoryArray is destroyed. However, dwFeatureArray also provides creation APIs, where the usage is very similar to dwFeatureHistoryArray:
dwFeatureArray created by dwFeatureArray_create() APIs must be destroyed by dwFeatureArray_destroy() before the application exits. Similarly, there is the dwFeatureArray_copyAsync() API to copy data between two feature array objects.
dwFeatureTrackerHandle_t to dwFeature2DDetectorHandle_t and dwFeature2DTrackerHandle_tdwFeature2DDetectorHandle_tNew imageprocessing module splits the Harris corner detector from dwFeatureTrackerHandle_t. The new Harris detector handle is dwFeature2DDetectorHandle_t.
| Old name | New name |
|---|---|
| dwFeatureTracker_initialize() | dwFeature2DDetector_initialize() |
| dwFeatureTracker_initDefaultParams() | dwFeature2DDetector_initDefaultParams() |
| dwFeatureTracker_reset() | dwFeature2DDetector_reset() |
| dwFeatureTracker_release() | dwFeature2DDetector_release() |
| dwFeatureTracker_setMask() | dwFeature2DDetector_setMask() |
| dwFeatureTracker_detectNewFeatures() | dwFeature2DDetector_detectFromPyramid() |
| — | dwFeature2DDetector_detectFromImage() |
The new dwFeature2DDetectorConfig parameter not only covers all settings from the old dwFeatureTrackerConfig parameter, it also provides more flexible settings.
| Old dwFeatureTrackerConfig | New dwFeature2DDetectorConfig |
|---|---|
| — | type |
| dwFeatureTrackerConfig::imageWidth | dwFeature2DDetectorConfig::imageWidth |
| dwFeatureTrackerConfig::imageHeight | dwFeature2DDetectorConfig::imageHeight |
| dwFeatureTrackerConfig::maxFeatureCount | dwFeature2DDetectorConfig::maxFeatureCount |
| — | dwFeature2DDetectorConfig::harrisK |
| dwFeatureTrackerConfig::cellSize | dwFeature2DDetectorConfig::cellSize |
| dwFeatureTrackerConfig::detectorScoreThreshold | dwFeature2DDetectorConfig::scoreThreshold |
| dwFeatureTrackerConfig::detectorDetailThreshold | dwFeature2DDetectorConfig::detailThreshold |
| dwFeatureTrackerConfig::numEvenDistributionPerCell | dwFeature2DDetectorConfig::numEvenDistributionPerCell |
| — | dwFeature2DDetectorConfig::detectionLevel |
| — | dwFeature2DDetectorConfig::harrisRadius |
| — | dwFeature2DDetectorConfig::NMSRadius |
| — | dwFeature2DDetectorConfig::maskType |
| — | dwFeature2DDetectorConfig::isMaskAdjustmentEnabled |
Example of initializing a detector with the old code:
Example of initializing a detector with the new code:
dwFeature2DTrackerHandle_tThe new imageprocessing module splits LK tracker from dwFeatureTrackerHandle_t. The new LK tracker handle is dwFeature2DTrackerHandle_t.
| Old name | New name |
|---|---|
| dwFeatureTracker_initialize() | dwFeature2DTracker_initialize() |
| dwFeatureTracker_initDefaultParams() | dwFeature2DTracker_initDefaultParams() |
| dwFeatureTracker_reset() | dwFeature2DTracker_reset() |
| dwFeatureTracker_release() | dwFeature2DTracker_release() |
| dwFeatureTracker_trackFeatures() | dwFeature2DTracker_trackFeatures() |
| — | dwFeature2DTracker_getNewToOldMap() |
The new dwFeature2DTrackerConfig parameter not only covers all settings from the the old dwFeatureTrackerConfig parameter, it also provides more flexible settings.
| Old dwFeatureTrackerConfig | New dwFeature2DTrackerConfig |
|---|---|
| — | dwFeature2DTrackerConfig::algorithm |
| — | dwFeature2DTrackerConfig::detectorType |
| — | dwFeature2DTrackerConfig::isOutputCompact |
| dwFeatureTrackerConfig::imageWidth | dwFeature2DTrackerConfig::imageWidth |
| dwFeatureTrackerConfig::imageHeight | dwFeature2DTrackerConfig::imageHeight |
| dwFeatureTrackerConfig::maxFeatureCount | dwFeature2DTrackerConfig::maxFeatureCount |
| — | dwFeature2DTrackerConfig::historyCapacity |
| dwFeatureTrackerConfig::windowSizeLK | dwFeature2DTrackerConfig::windowSizeLK |
| dwFeatureTrackerConfig::iterationsLK | dwFeature2DTrackerConfig::numIterTranslationOnly |
| — | dwFeature2DTrackerConfig::numIterScaling |
| — | dwFeature2DTrackerConfig::numLevelTranslationOnly |
| — | dwFeature2DTrackerConfig::maxScaleChange |
| — | dwFeature2DTrackerConfig::nccKillThreshold |
| — | dwFeature2DTrackerConfig::nccUpdateThreshold |
Example of initializing a tracker with the old code:
Example of initializing a tracker with the new code:
imageprocessing module to detect and track Harris cornersHere's a complete example showing the pipeline with the old dw_feature APIs and new dw_imageprocessing APIs.
The new dwFeature2DDetectorHandle_t and dwFeature2DTrackerHandle_t provides advanced detecting/tracking options. To enable advanced mode, the application needs to set the detector type as DW_FEATURE2D_DETECTOR_TYPE_EX and the tracker algorithm as DW_FEATURE2D_TRACKER_ALGORITHM_EX:
Please refer to documentation for more details regarding available configuration.
Advanced mode also requires an additional device buffer nccScore. It can be left as nullptr, but a valid nccScore buffer is recommended for better tracking/detecting quality.
The nccScore buffer is recommended only when both the detector and tracker are in advanced mode. It's valid to connect the DW_FEATURE2D_DETECTOR_TYPE_STD normal detector with the DW_FEATURE2D_TRACKER_ALGORITHM_EX advanced tracker, or to connect the DW_FEATURE2D_DETECTOR_TYPE_EX advanced detector with the DW_FEATURE2D_TRACKER_ALGORITHM_STD advanced tracker. The application only needs to set dwFeature2DTrackerConfig::detectorType with the correct value of its corresponding detector.
Below are the recommended steps for using imageprocessing APIs in SFM:
dwFeature2DTrackerConfig:.algorithm = DW_FEATURE2D_TRACKER_ALGORITHM_SFM to allow sparse tracking results output.dwFeature2DTracker_compact() explicitly after SFM reconstruction is done. Fill the d_newToOldMap device array by dwFeature2DTracker_getNewToOldMap().dwReconstructor_compact* by d_newToOldMap received in step 3.compact is done.Pseudo code for a typical workflow:
For the full implementation refer to Structure from Motion (SFM) Sample.
dwScalingFeatureListHandle_t and dwScalingFeatureListPointers to dwTemplateArraySimilar to dwFeatureHistoryArray, template tracker provides a dwTemplateArray to replace the old dwScalingFeatureListHandle_t and dwScalingFeatureListPointers.
The new dwTemplateArray struct provides pointers such as: *bboxes, *statuses, *ids, *ages, *scaleFactors and *templateCount like the old dwScalingFeatureListPointers did. It is also created and destroyed like old handle dwScalingFeatureListHandle_t. dwTemplateArray can be created on page-able/pinned CPU or CUDA memory.
| Old name | New name |
|---|---|
| dwScalingFeatureListPointers::locations | dwTemplateArray::bboxes |
| dwScalingFeatureListPointers::sizes | dwTemplateArray::bboxes |
| dwScalingFeatureListPointers::statuses | dwTemplateArray::statuses |
| dwScalingFeatureListPointers::ids | dwTemplateArray::ids |
| dwScalingFeatureListPointers::ages | dwTemplateArray::ages |
| dwScalingFeatureListPointers::scaleFactors | dwTemplateArray::scaleFactors |
| dwScalingFeatureListPointers::bNewTemplate | — |
| dwScalingFeatureListPointers::featureCount | dwTemplateArray::templateCount |
| dwScalingFeatureList_initialize() | dwTemplateArray_create() |
| dwScalingFeatureList_release() | dwTemplateArray_destroy() |
| dwScalingFeatureList_reset() | dwTemplateArray_reset() |
| dwScalingFeatureList_getDataBasePointer() | dwTemplateArray::data, dwTemplateArray::bytes |
For new dw_imageprocessing APIs, there's no need to call addEmptyFeature, selectValid(), compact() and applySizeFilter() explicitly. They are automatically called within the DriveWorks module.
Example:
In the old dw_feature APIs, the application needed to create a dwScalingFeatureListHandle_t object and call dwScalingFeatureList_getDataPointers() to get the interpretable dwScalingFeatureListPointers.
If the application needed a CPU copy of the templateList handle, it first had to allocate CPU memory and call dwScalingFeatureList_getDataPointers() to interpret it into dwScalingFeatureListPointers.
It also needed the raw data pointer to copy data between the CPU and GPU.
In the new dw_imageprocessing APIs, the application only needs to create the dwTemplateArray object on the CPU and GPU. It provides both raw pointers and interpretable pointers. It also provides the dwTemplateArray_copyAsync() API to easily copy data between two template arrays.
The application can also create dwTemplateArray on pinned memory, it only needs to change DW_MEMORY_TYPE_CPU to DW_MEMORY_TYPE_PINNED during creation.
Like dwScalingFeatureListHandle_t, there are also reset() and destroy() APIs. dwTemplateArray must be destroyed before the application exits.
dwScalingFeatureTrackerHandle_t to dwTemplateTrackerHandle_t| Old name | New name |
|---|---|
| dwScalingFeatureTracker_initialize() | dwTemplateTracker_initialize() |
| dwScalingFeatureTracker_initDefaultParams() | dwTemplateTracker_initDefaultParams() |
| dwScalingFeatureTracker_reset() | dwTemplateTracker_reset() |
| dwScalingFeatureTracker_release() | dwTemplateTracker_release() |
| dwScalingFeatureTracker_trackAsync() | dwTemplateTracker_trackImage() |
| — | dwTemplateTracker_trackPyramid() |
| — | dwFeature2DTracker_getNewToOldMap() |
For new dw_imageprocessing APIs, there's no need to call dwScalingFeatureTracker_updateTemplateAsync() explicitly. It is automatically called within the DriveWorks module.
The new dwTemplateTrackerParameters parameter covers all settings from the old dwScalingFeatureTrackerConfig and dwScalingFeatureListParameters parameters.
| Old dwScalingFeatureXXX settings | New dwTemplateTrackerParameters |
|---|---|
| — | dwTemplateTrackerParameters::type |
| dwScalingFeatureListParameters::maxFeatureCount | dwTemplateTrackerParameters::maxTemplateCount |
| dwScalingFeatureListParameters::imageWidth | dwTemplateTrackerParameters::imageWidth |
| dwScalingFeatureListParameters::imageHeight | dwTemplateTrackerParameters::imageHeight |
| dwScalingFeatureListParameters::pyramidLevelCount | dwTemplateTrackerParameters::maxPyramidLevel |
| dwScalingFeatureTrackerConfig::numIterCoarse | dwTemplateTrackerParameters::numIterationsCoarse |
| dwScalingFeatureTrackerConfig::numIterFine | dwTemplateTrackerParameters::numIterations |
| dwScalingFeatureTrackerConfig::thresholdUpdate | dwTemplateTrackerParameters::thresholdUpdate |
| dwScalingFeatureTrackerConfig::thresholdKill | dwTemplateTrackerParameters::thresholdKill |
| dwScalingFeatureTrackerConfig::thresholdStop | dwTemplateTrackerParameters::thresholdStop |
| dwScalingFeatureTrackerConfig::maxScaleChange | dwTemplateTrackerParameters::maxScaleChange |
| — | dwTemplateTrackerParameters::validWidth |
| — | dwTemplateTrackerParameters::validHeight |
Here's a complete example showing the template tracker pipeline with the old dw_feature APIs and new dw_imageprocessing APIs.
The APIs previously contained in dw/world/LaneGraphProducer.h are no longer available, while the data structures are now part of LaneGraph.h.
The following API has been removed:
dwLidarAccumulator_addPacket() will return DW_SUCCESS if the full sweep is ready.
For more information see Lidar Accumulator (replaced with dwPointCloudAccumulator).
The following APIs have been renamed:
| Old name | New name |
|---|---|
| dwMaps_transformLaneDividersToLocalLinesPerLocalLayout() | dwMaps_transformLaneDividersToLocalLines() |
| dwMaps_transformRoadFeaturesToLocalLinesPerLocalLayout() | dwMaps_transformRoadFeaturesToLocalLines() |
| dwMaps_computeBearing() | dwMaps_computeBearingFromGeoPoints() |
| dwMaps_computeBearingFromRotMatrix() | dwMaps_computeBearingFromRotation() |
| dwMaps_computeLocalToENUMatrix() | dwMaps_computeRotationFromBearing() |
| dwMapTracker_updateCurrentPose() | dwMapTracker_updateWithGlobalPose() |
The following API has been removed:
dwMaps_transformLaneDividersToLocalLines() should be used instead.
The dwObjectDetector API has been simplified. The functions
dwObjectDetector_inferDeviceAsync()dwObjectDetector_interpretHost()dwObjectDetector_getClusteredObjects()dwObjectDetector_getRawDetections()dwObjectDetector_bindInput()dwObjectDetector_bindOutput()dwObjectDetector_processDeviceAsync()dwObjectDetector_processHost()have been removed in favor of dwObjectDetector_detectObjects().
The following data structures have been renamed:
| Old name | New name |
|---|---|
| dwObjectData | dwObjectGeneric |
| dwObjectDataCamera | dwObjectCamera |
| dwObjectDataRadar | dwObjectRadar |
| dwObjectDataLidar | dwObjectLidar |
| dwObjectDataFused | dwObjectFused |
dwObjectHandle_t has been removed and replaced with plain structs. In place of dwObjectHandleList, use dwObjectArray. Becase object handles are no longer part of the code base, the following APIs have been removed:
| Removed APIs |
|---|
| dwStatus dwObject_createCamera(dwObjectHandle_t* handle, const dwObjectData* data, const dwObjectDataCamera* otherData) |
| dwStatus dwObject_createRadar(dwObjectHandle_t* handle, const dwObjectData* data, const dwObjectDataRadar* otherData) |
| dwStatus dwObject_createLidar(dwObjectHandle_t* handle, const dwObjectData* data, const dwObjectDataLidar* otherData) |
| dwStatus dwObject_createFused(dwObjectHandle_t* handle, const dwObjectData* data, const dwObjectDataFused* otherData) |
| dwStatus dwObject_destroy(dwObjectHandle_t handle) |
| dwStatus dwObject_reset(dwObjectHandle_t handle) |
| dwStatus dwObject_getData(dwObjectData* info, uint32_t index, dwConstObjectHandle_t handle) |
| dwStatus dwObject_getDataCamera(dwObjectDataCamera* info, uint32_t index, dwConstObjectHandle_t handle) |
| dwStatus dwObject_getDataRadar(dwObjectDataRadar* info, uint32_t index, dwConstObjectHandle_t handle) |
| dwStatus dwObject_getDataLidar(dwObjectDataLidar* info, uint32_t index, dwConstObjectHandle_t handle) |
| dwStatus dwObject_getDataFused(dwObjectDataFused* info, uint32_t index, dwConstObjectHandle_t handle) |
| dwStatus dwObject_setData(const dwObjectData* info, uint32_t index, dwObjectHandle_t handle) |
| dwStatus dwObject_setDataCamera(const dwObjectDataCamera* info, uint32_t index, dwObjectHandle_t handle) |
| dwStatus dwObject_setDataRadar(const dwObjectDataRadar* info, uint32_t index, dwObjectHandle_t handle) |
| dwStatus dwObject_setDataLidar(const dwObjectDataLidar* info, uint32_t index, dwObjectHandle_t handle) |
| dwStatus dwObject_setDataFused(const dwObjectDataFused* info, uint32_t index, dwObjectHandle_t handle) |
| dwStatus dwObject_addDataCamera(const dwObjectData* info, const dwObjectDataCamera* otherInfo, dwObjectHandle_t handle) |
| dwStatus dwObject_addDataRadar(const dwObjectData* info, const dwObjectDataRadar* otherInfo, dwObjectHandle_t handle) |
| dwStatus dwObject_addDataLidar(const dwObjectData* info, const dwObjectDataLidar* otherInfo, dwObjectHandle_t handle) |
| dwStatus dwObject_addDataFused(const dwObjectData* info, const dwObjectDataFused* otherInfo, dwObjectHandle_t handle) |
Because dwObjectHandle_t is no longer part of the code base, calling create to create an object is no longer necessary. For example, the old way of creating an object required calling:
The new way to do this is written as:
Object history is no longer stored as part of the object, but is now a separate history array: dwObjectHistoryArray. The old way to get a historical object from an object handle was:
The new way to do this is written as:
In order to add data to the history, you no longer call an API but use the indices into the objects array to insert into the history table.
Object arrays have also been introduced as dwObjectArray. These work very similarly to dwObjectHistoryArray except that it is a 1D contiguous array of objects.
dwPointCloudMemoryType has been replaced by the following data structure:
dwPointCloudRangeImage structure has been removed. Range image creator now accepts dwImageHandle_t instead.
For more information see Point Cloud Processing.
The module dwRigConfiguration has been renamed dwRig.
RigConfiguration.h to Rig.h.dwRigHandle_t and dwConstRigHandle_t, respectively.Rig.h have been updated from dwRigConfiguration to dwRig.dwRig_initializeCalibratedCamera is now dwCameraModel_initialize in calibration/cameramodel/CameraModel.h.dwFeatureStatus to dwFeature2DStatus.dwReconstructor_compactWorldPoints and dwReconstructor_compactFeatureHistory has changed. The input has changed from const uint32_t* d_validIndexCount, const uint32_t* d_validIndexes, const uint32_t* d_invalidIndexCount, const uint32_t* d_invalidIndexes to const uint32_t* d_validIndexCount, const uint32_t* d_newToOldMap, while d_newToOldMap is obtained with dwFeature2DTracker_getNewToOldMap.dw_imageprocessing APIs.For more information see Structure from Motion (SFM) and Features.
This release adds support for multiple simultanous VehicleIO backends, and the following changes are required:
dwVehicleIO_addCANSensor() has to be called before send/consume operations.dwVehicleIO_sendVehicleCommand() can be just be replaced with dwVehicleIO_sendCommand().dwVehicleIO_consume() needs be replaced with dwVehicleIO_consumeCANFrame() with sensorId equal to the sensor added with dwVehicleIO_addCANSensor().For more information see VehicleIO.
The previous API header file waitcondition/Classifier.h has been split into waitcondition/camera/TrafficLightSignClassifier.h and waitcondition/camera/TrafficLightSignClassifier_processPipeline.h.
dwObjectClassifierHandle_t has been renamed to dwTrafficLightSignClassifierHandle_t.The following APIs have been renamed:
| Old name | New name |
|---|---|
| dwObjectClassifier_initializeFromLightNet(dwObjectClassifierHandle_t* obj, dwLightNetHandle_t dnn, dwContextHandle_t ctx) | dwTrafficLightSignClassifier_initializeFromLightNet(dwTrafficLightSignClassifierHandle_t* obj, dwLightNetHandle_t dnn, dwContextHandle_t ctx) |
| dwObjectClassifier_initializeFromSignNet(dwObjectClassifierHandle_t* obj, dwSignNetHandle_t dnn, dwContextHandle_t ctx) | dwTrafficLightSignClassifier_initializeFromSignNet(dwTrafficLightSignClassifierHandle_t* obj, dwSignNetHandle_t dnn, dwContextHandle_t ctx) |
| dwObjectClassifier_reset(dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_reset(dwTrafficLightSignClassifierHandle_t obj) |
| dwObjectClassifier_release(dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_release(dwTrafficLightSignClassifierHandle_t obj) |
| dwObjectClassifier_setCUDAStream(cudaStream_t stream, dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_setCUDAStream(cudaStream_t stream, dwTrafficLightSignClassifierHandle_t obj) |
| dwObjectClassifier_getCUDAStream(cudaStream_t* stream, dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_getCUDAStream(cudaStream_t* stream, dwTrafficLightSignClassifierHandle_t obj) |
| dwObjectClassifier_interpretHost(uint32_t numObjects, dwObjectClass type, dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_interpretHost(uint32_t numObjects, dwObjectClass type, dwTrafficLightSignClassifierHandle_t obj) |
| dwObjectClassifier_inferDeviceAsync(const dwImageCUDA* const* imageArray, dwObject* objectList, uint32_t numObjects, dwObjectClass type, dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_inferDeviceAsync(const dwImageCUDA* const* imageArray, dwObjectCamera* objectList, uint32_t numObjects, dwObjectClass type, dwTrafficLightSignClassifierHandle_t obj) |
| dwObjectClassifier_getClassifiedObjects(dwObject* objectList, uint32_t numObjects, dwObjectClassifierHandle_t obj) | dwTrafficLightSignClassifier_getClassifiedObjects(dwObjectCamera* objectList, uint32_t numObjects, dwTrafficLightSignClassifierHandle_t obj) |