Skip to content

Commit 79f2f1b

Browse files
authored
Merge pull request #1502 from luxonis/dev_update_detection_parser
Update DetectionParser to use new ImgDetections message and parse all YOLO families
2 parents 52a6724 + 1c06500 commit 79f2f1b

33 files changed

+2808
-62
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ set(TARGET_CORE_SOURCES
331331
src/pipeline/datatype/ImageAlignConfig.cpp
332332
src/pipeline/datatype/CameraControl.cpp
333333
src/pipeline/datatype/NNData.cpp
334+
src/pipeline/datatype/ImgDetectionsT.cpp
334335
src/pipeline/datatype/ImgDetections.cpp
335336
src/pipeline/datatype/SpatialImgDetections.cpp
336337
src/pipeline/datatype/SystemInformation.cpp

bindings/python/src/pipeline/CommonBindings.cpp

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "CommonBindings.hpp"
22

3+
#include <pybind11/pybind11.h>
4+
35
// Libraries
46
#include "hedley/hedley.h"
57

@@ -19,6 +21,7 @@
1921
#include "depthai/common/EepromData.hpp"
2022
#include "depthai/common/FrameEvent.hpp"
2123
#include "depthai/common/Interpolation.hpp"
24+
#include "depthai/common/Keypoint.hpp"
2225
#include "depthai/common/MemoryInfo.hpp"
2326
#include "depthai/common/Point2f.hpp"
2427
#include "depthai/common/Point3d.hpp"
@@ -32,6 +35,7 @@
3235
#include "depthai/common/StereoPair.hpp"
3336
#include "depthai/common/Timestamp.hpp"
3437
#include "depthai/common/UsbSpeed.hpp"
38+
#include "depthai/common/YoloDecodingFamily.hpp"
3539

3640
// depthai
3741
#include "depthai/common/CameraExposureOffset.hpp"
@@ -67,6 +71,7 @@ void CommonBindings::bind(pybind11::module& m, void* pCallstack) {
6771
py::enum_<UsbSpeed> usbSpeed(m, "UsbSpeed", DOC(dai, UsbSpeed));
6872
py::enum_<ProcessorType> processorType(m, "ProcessorType");
6973
py::enum_<DetectionNetworkType> detectionNetworkType(m, "DetectionNetworkType");
74+
py::enum_<YoloDecodingFamily> yoloDecodingFamily(m, "YoloDecodingFamily");
7075
py::enum_<SerializationType> serializationType(m, "SerializationType");
7176
py::class_<DetectionParserOptions> detectionParserOptions(m, "DetectionParserOptions", DOC(dai, DetectionParserOptions));
7277
py::class_<RotatedRect> rotatedRect(m, "RotatedRect", DOC(dai, RotatedRect));
@@ -78,6 +83,8 @@ void CommonBindings::bind(pybind11::module& m, void* pCallstack) {
7883
py::enum_<FrameEvent> frameEvent(m, "FrameEvent", DOC(dai, FrameEvent));
7984
py::class_<ProfilingData> profilingData(m, "ProfilingData", DOC(dai, ProfilingData));
8085
py::enum_<Interpolation> interpolation(m, "Interpolation", DOC(dai, Interpolation));
86+
py::class_<Keypoint> keypoint(m, "Keypoint", DOC(dai, Keypoint));
87+
py::class_<KeypointsList> keypointsList(m, "KeypointsList", DOC(dai, KeypointsList));
8188

8289
///////////////////////////////////////////////////////////////////////
8390
///////////////////////////////////////////////////////////////////////
@@ -92,6 +99,51 @@ void CommonBindings::bind(pybind11::module& m, void* pCallstack) {
9299
///////////////////////////////////////////////////////////////////////
93100
///////////////////////////////////////////////////////////////////////
94101

102+
keypoint.def(py::init<>())
103+
.def(py::init<Point3f, float, uint32_t>(), py::arg("coordinates"), py::arg("confidence") = 0.f, py::arg("label") = 0, DOC(dai, Keypoint, Keypoint))
104+
.def(py::init<Point2f, float, uint32_t>(), py::arg("coordinates"), py::arg("confidence") = 0.f, py::arg("label") = 0, DOC(dai, Keypoint, Keypoint))
105+
.def(py::init<float, float, float, float, uint32_t>(),
106+
py::arg("x"),
107+
py::arg("y"),
108+
py::arg("z"),
109+
py::arg("confidence") = 0.f,
110+
py::arg("label") = 0,
111+
DOC(dai, Keypoint, Keypoint))
112+
.def_readwrite("imageCoordinates", &Keypoint::imageCoordinates, DOC(dai, Keypoint, imageCoordinates))
113+
.def_readwrite("confidence", &Keypoint::confidence, DOC(dai, Keypoint, confidence))
114+
.def_readwrite("label", &Keypoint::label, DOC(dai, Keypoint, label));
115+
116+
keypointsList.def(py::init<>())
117+
.def(py::init<std::vector<Keypoint>, std::vector<Edge>>(), py::arg("keypoints"), py::arg("edges"), DOC(dai, KeypointsListT, KeypointsListT))
118+
.def(py::init<std::vector<Keypoint>>(), py::arg("keypoints"), DOC(dai, KeypointsListT, KeypointsListT))
119+
.def(
120+
"setKeypoints",
121+
[](KeypointsList& self, const std::vector<Keypoint>& kps) { self.Base::setKeypoints(kps); },
122+
py::arg("keypoints"),
123+
DOC(dai, KeypointsListT, setKeypoints))
124+
.def("setKeypoints",
125+
py::overload_cast<const std::vector<Point3f>>(&KeypointsList::setKeypoints),
126+
py::arg("keypoints"),
127+
DOC(dai, KeypointsListT, setKeypoints))
128+
.def("setKeypoints",
129+
py::overload_cast<const std::vector<Point2f>>(&KeypointsList::setKeypoints),
130+
py::arg("keypoints"),
131+
DOC(dai, KeypointsListT, setKeypoints))
132+
.def(
133+
"setKeypoints",
134+
[](KeypointsList& self, std::vector<Keypoint> keypoints, std::vector<Edge> edges) {
135+
self.Base::setKeypoints(std::move(keypoints), std::move(edges));
136+
},
137+
py::arg("keypoints"),
138+
py::arg("edges"),
139+
DOC(dai, KeypointsListT, setKeypoints))
140+
.def(
141+
"setEdges", [](KeypointsList& self, const std::vector<Edge>& edges) { self.Base::setEdges(edges); }, py::arg("edges"))
142+
.def("getKeypoints", &KeypointsList::getKeypoints, DOC(dai, KeypointsListT, getKeypoints))
143+
.def("getEdges", &KeypointsList::getEdges, DOC(dai, KeypointsListT, getEdges))
144+
.def("getPoints3f", &KeypointsList::getPoints3f, DOC(dai, KeypointsListT, getPoints3f))
145+
.def("getPoints2f", &KeypointsList::getPoints2f, DOC(dai, KeypointsListT, getPoints2f));
146+
95147
rotatedRect.def(py::init<>())
96148
.def(py::init<Point2f, Size2f, float>())
97149
.def(py::init<Rect, float>())
@@ -102,7 +154,9 @@ void CommonBindings::bind(pybind11::module& m, void* pCallstack) {
102154
.def("normalize", &RotatedRect::normalize, py::arg("width"), py::arg("height"), DOC(dai, RotatedRect, normalize))
103155
.def("denormalize", &RotatedRect::denormalize, py::arg("width"), py::arg("height"), py::arg("force") = false, DOC(dai, RotatedRect, denormalize))
104156
.def("getPoints", &RotatedRect::getPoints, DOC(dai, RotatedRect, getPoints))
105-
.def("getOuterRect", &RotatedRect::getOuterRect, DOC(dai, RotatedRect, getOuterRect));
157+
.def("getOuterRect", &RotatedRect::getOuterRect, DOC(dai, RotatedRect, getOuterRect))
158+
.def("getOuterXYWH", &RotatedRect::getOuterXYWH, DOC(dai, RotatedRect, getOuterXYWH))
159+
.def("getOuterCXCYWH", &RotatedRect::getOuterCXCYWH, DOC(dai, RotatedRect, getOuterCXCYWH));
106160

107161
rect.def(py::init<>())
108162
.def(py::init<float, float, float, float>())
@@ -360,6 +414,11 @@ void CommonBindings::bind(pybind11::module& m, void* pCallstack) {
360414

361415
detectionNetworkType.value("YOLO", DetectionNetworkType::YOLO).value("MOBILENET", DetectionNetworkType::MOBILENET);
362416

417+
yoloDecodingFamily.value("TLBR", YoloDecodingFamily::TLBR)
418+
.value("v5AB", YoloDecodingFamily::v5AB)
419+
.value("v3AB", YoloDecodingFamily::v3AB)
420+
.value("R1AF", YoloDecodingFamily::R1AF);
421+
363422
serializationType.value("LIBNOP", SerializationType::LIBNOP).value("JSON", SerializationType::JSON).value("JSON_MSGPACK", SerializationType::JSON_MSGPACK);
364423

365424
detectionParserOptions.def_readwrite("nnFamily", &DetectionParserOptions::nnFamily)
@@ -368,7 +427,13 @@ void CommonBindings::bind(pybind11::module& m, void* pCallstack) {
368427
.def_readwrite("coordinates", &DetectionParserOptions::coordinates)
369428
.def_readwrite("anchors", &DetectionParserOptions::anchors)
370429
.def_readwrite("anchorMasks", &DetectionParserOptions::anchorMasks)
371-
.def_readwrite("iouThreshold", &DetectionParserOptions::iouThreshold);
430+
.def_readwrite("iouThreshold", &DetectionParserOptions::iouThreshold)
431+
.def_readwrite("decodingFamily", &DetectionParserOptions::decodingFamily)
432+
.def_readwrite("keypointEdges", &DetectionParserOptions::keypointEdges)
433+
.def_readwrite("anchorsV2", &DetectionParserOptions::anchorsV2)
434+
.def_readwrite("decodeKeypoints", &DetectionParserOptions::decodeKeypoints)
435+
.def_readwrite("numKeypoints", &DetectionParserOptions::nKeypoints)
436+
.def_readwrite("outputNames", &DetectionParserOptions::outputNamesToUse);
372437

373438
cameraExposureOffset.value("START", CameraExposureOffset::START).value("MIDDLE", CameraExposureOffset::MIDDLE).value("END", CameraExposureOffset::END);
374439

bindings/python/src/pipeline/datatype/ImgDetectionsBindings.cpp

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
#include "pipeline/CommonBindings.hpp"
66

77
// depthai
8+
#include "depthai/pipeline/datatype/Buffer.hpp"
89
#include "depthai/pipeline/datatype/ImgDetections.hpp"
9-
10+
#include "depthai/pipeline/datatype/ImgDetectionsT.hpp"
11+
#include "ndarray_converter.h"
1012
// pybind
1113
#include <pybind11/chrono.h>
1214
#include <pybind11/numpy.h>
15+
#include <pybind11/pytypes.h>
1316

1417
// #include "spdlog/spdlog.h"
1518

@@ -35,13 +38,50 @@ void bind_imgdetections(pybind11::module& m, void* pCallstack) {
3538

3639
// Metadata / raw
3740
imgDetection.def(py::init<>())
41+
.def(py::init<const RotatedRect&, float, std::uint32_t>(), py::arg("boundingBox"), py::arg("confidence"), py::arg("label"))
42+
.def(py::init<const RotatedRect&, std::string, float, std::uint32_t>(),
43+
py::arg("boundingBox"),
44+
py::arg("labelName"),
45+
py::arg("confidence"),
46+
py::arg("label"))
47+
.def(py::init<const RotatedRect&, const KeypointsList&, float, std::uint32_t>(),
48+
py::arg("boundingBox"),
49+
py::arg("keypoints"),
50+
py::arg("confidence"),
51+
py::arg("label"))
52+
.def(py::init<const RotatedRect&, const KeypointsList&, std::string, float, std::uint32_t>(),
53+
py::arg("boundingBox"),
54+
py::arg("keypoints"),
55+
py::arg("labelName"),
56+
py::arg("confidence"),
57+
py::arg("label"))
58+
.def("__repr__", &ImgDetection::str)
3859
.def_readwrite("label", &ImgDetection::label)
3960
.def_readwrite("labelName", &ImgDetection::labelName)
4061
.def_readwrite("confidence", &ImgDetection::confidence)
4162
.def_readwrite("xmin", &ImgDetection::xmin)
4263
.def_readwrite("ymin", &ImgDetection::ymin)
4364
.def_readwrite("xmax", &ImgDetection::xmax)
44-
.def_readwrite("ymax", &ImgDetection::ymax);
65+
.def_readwrite("ymax", &ImgDetection::ymax)
66+
.def("setBoundingBox", &ImgDetection::setBoundingBox, py::arg("boundingBox"))
67+
.def("getBoundingBox", &ImgDetection::getBoundingBox)
68+
.def("setOuterBoundingBox", &ImgDetection::setOuterBoundingBox, py::arg("xmin"), py::arg("ymin"), py::arg("xmax"), py::arg("ymax"))
69+
.def("setKeypoints", py::overload_cast<const KeypointsList>(&ImgDetection::setKeypoints), py::arg("keypoints"))
70+
.def("setKeypoints", py::overload_cast<const std::vector<Keypoint>>(&ImgDetection::setKeypoints), py::arg("keypoints"))
71+
.def("setKeypoints",
72+
py::overload_cast<const std::vector<Keypoint>, const std::vector<Edge>>(&ImgDetection::setKeypoints),
73+
py::arg("keypoints"),
74+
py::arg("edges"))
75+
.def("setKeypoints", py::overload_cast<const std::vector<Point3f>>(&ImgDetection::setKeypoints), py::arg("keypoints"))
76+
.def("setKeypoints", py::overload_cast<const std::vector<Point2f>>(&ImgDetection::setKeypoints), py::arg("keypoints"))
77+
.def("getKeypoints", &ImgDetection::getKeypoints, DOC(dai, ImgDetection, getKeypoints))
78+
.def("setEdges", &ImgDetection::setEdges, py::arg("edges"))
79+
.def("getEdges", &ImgDetection::getEdges, DOC(dai, ImgDetection, getEdges))
80+
.def("getCenterX", &dai::ImgDetection::getCenterX)
81+
.def("getCenterY", &dai::ImgDetection::getCenterY)
82+
.def("getWidth", &dai::ImgDetection::getWidth)
83+
.def("getHeight", &dai::ImgDetection::getHeight)
84+
.def("getAngle", &dai::ImgDetection::getAngle);
4585

4686
// rawImgDetections
4787
// .def(py::init<>())
@@ -70,20 +110,55 @@ void bind_imgdetections(pybind11::module& m, void* pCallstack) {
70110
// ;
71111

72112
// Message
73-
imgDetections.def(py::init<>(), DOC(dai, ImgDetections, ImgDetections))
113+
imgDetections.def(py::init<>(), DOC(dai, ImgDetectionsT, ImgDetectionsT))
74114
.def("__repr__", &ImgDetections::str)
75115
.def_property(
76116
"detections",
77117
[](ImgDetections& det) { return &det.detections; },
78118
[](ImgDetections& det, std::vector<ImgDetection> val) { det.detections = val; },
79-
DOC(dai, ImgDetections, detections))
80-
.def("getTimestamp", &ImgDetections::Buffer::getTimestamp, DOC(dai, Buffer, getTimestamp))
81-
.def("getTimestampDevice", &ImgDetections::Buffer::getTimestampDevice, DOC(dai, Buffer, getTimestampDevice))
82-
.def("getSequenceNum", &ImgDetections::Buffer::getSequenceNum, DOC(dai, Buffer, getSequenceNum))
119+
DOC(dai, ImgDetectionsT, detections),
120+
py::return_value_policy::reference_internal)
121+
.def_property(
122+
"segmentationMaskWidth",
123+
[](ImgDetections& det) { return &det.segmentationMaskWidth; },
124+
[](ImgDetections& det, size_t val) { det.segmentationMaskWidth = val; },
125+
DOC(dai, ImgDetectionsT, segmentationMaskWidth),
126+
py::return_value_policy::reference_internal)
127+
.def_property(
128+
"segmentationMaskHeight",
129+
[](ImgDetections& det) { return &det.segmentationMaskHeight; },
130+
[](ImgDetections& det, size_t val) { det.segmentationMaskHeight = val; },
131+
DOC(dai, ImgDetectionsT, segmentationMaskHeight),
132+
py::return_value_policy::reference_internal)
133+
.def("getTimestamp", &dai::ImgDetectionsT<dai::ImgDetection>::Buffer::getTimestamp, DOC(dai, Buffer, getTimestamp))
134+
.def("getTimestampDevice", &dai::ImgDetectionsT<dai::ImgDetection>::Buffer::getTimestampDevice, DOC(dai, Buffer, getTimestampDevice))
135+
.def("getSequenceNum", &dai::ImgDetectionsT<dai::ImgDetection>::Buffer::getSequenceNum, DOC(dai, Buffer, getSequenceNum))
83136
.def("getTransformation", [](ImgDetections& msg) { return msg.transformation; })
84137
.def("setTransformation", [](ImgDetections& msg, const std::optional<ImgTransformation>& transformation) { msg.transformation = transformation; })
85-
// .def("setTimestamp", &ImgDetections::setTimestamp, DOC(dai, Buffer, setTimestamp))
86-
// .def("setTimestampDevice", &ImgDetections::setTimestampDevice, DOC(dai, Buffer, setTimestampDevice))
87-
// .def("setSequenceNum", &ImgDetections::setSequenceNum, DOC(dai, ImgDetections, setSequenceNum))
88-
;
138+
.def("getSegmentationMaskWidth", &ImgDetections::getSegmentationMaskWidth, DOC(dai, ImgDetectionsT, getSegmentationMaskWidth))
139+
.def("getSegmentationMaskHeight", &ImgDetections::getSegmentationMaskHeight, DOC(dai, ImgDetectionsT, getSegmentationMaskHeight))
140+
.def("setSegmentationMask",
141+
py::overload_cast<dai::ImgFrame&>(&ImgDetections::setSegmentationMask),
142+
py::arg("frame"),
143+
DOC(dai, ImgDetectionsT, setSegmentationMask),
144+
py::return_value_policy::reference_internal)
145+
.def("getMaskData", &ImgDetections::getMaskData, DOC(dai, ImgDetectionsT, getMaskData))
146+
.def("getSegmentationMask", &ImgDetections::getSegmentationMask, DOC(dai, ImgDetectionsT, getSegmentationMask))
147+
#ifdef DEPTHAI_HAVE_OPENCV_SUPPORT
148+
.def("setCvSegmentationMask", &ImgDetections::setCvSegmentationMask, py::arg("mask"), DOC(dai, ImgDetectionsT, setCvSegmentationMask))
149+
.def(
150+
"getCvSegmentationMask",
151+
[](ImgDetections& self) { return self.getCvSegmentationMask(&g_numpyAllocator); },
152+
DOC(dai, ImgDetectionsT, getCvSegmentationMask))
153+
.def(
154+
"getCvSegmentationMaskByIndex",
155+
[](ImgDetections& self, uint8_t index) { return self.getCvSegmentationMaskByIndex(index, &g_numpyAllocator); },
156+
py::arg("index"),
157+
DOC(dai, ImgDetectionsT, getCvSegmentationMaskByIndex))
158+
.def(
159+
"getCvSegmentationMaskByClass",
160+
[](ImgDetections& self, uint8_t semanticClass) { return self.getCvSegmentationMaskByClass(semanticClass, &g_numpyAllocator); },
161+
py::arg("semantic_class"),
162+
DOC(dai, ImgDetectionsT, getCvSegmentationMaskByClass));
163+
#endif
89164
}

bindings/python/src/pipeline/node/DetectionParserBindings.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,24 @@ void bind_detectionparser(pybind11::module& m, void* pCallstack) {
6565
DOC(dai, node, DetectionParser, setAnchors, 2))
6666
.def("setAnchorMasks", &DetectionParser::setAnchorMasks, py::arg("anchorMasks"), DOC(dai, node, DetectionParser, setAnchorMasks))
6767
.def("setIouThreshold", &DetectionParser::setIouThreshold, py::arg("thresh"), DOC(dai, node, DetectionParser, setIouThreshold))
68+
.def("setSubtype", &DetectionParser::setSubtype, py::arg("subtype"), DOC(dai, node, DetectionParser, setSubtype))
69+
.def("setDecodeKeypoints", &DetectionParser::setDecodeKeypoints, py::arg("decode"), DOC(dai, node, DetectionParser, setDecodeKeypoints))
70+
.def("setDecodeSegmentation", &DetectionParser::setDecodeSegmentation, py::arg("decode"), DOC(dai, node, DetectionParser, setDecodeSegmentation))
71+
.def("setNumKeypoints", &DetectionParser::setNumKeypoints, py::arg("numKeypoints"), DOC(dai, node, DetectionParser, setNumKeypoints))
72+
.def("setClasses", &DetectionParser::setClasses, py::arg("classes"), DOC(dai, node, DetectionParser, setClasses))
73+
.def("setStrides", &DetectionParser::setStrides, py::arg("strides"), DOC(dai, node, DetectionParser, setStrides))
74+
.def("setKeypointEdges", &DetectionParser::setKeypointEdges, py::arg("edges"), DOC(dai, node, DetectionParser, setKeypointEdges))
6875
.def("getNumClasses", &DetectionParser::getNumClasses, DOC(dai, node, DetectionParser, getNumClasses))
76+
.def("getClasses", &DetectionParser::getClasses, DOC(dai, node, DetectionParser, getClasses))
6977
.def("getCoordinateSize", &DetectionParser::getCoordinateSize, DOC(dai, node, DetectionParser, getCoordinateSize))
7078
.def("getAnchors", &DetectionParser::getAnchors, DOC(dai, node, DetectionParser, getAnchors))
7179
.def("getAnchorMasks", &DetectionParser::getAnchorMasks, DOC(dai, node, DetectionParser, getAnchorMasks))
7280
.def("getIouThreshold", &DetectionParser::getIouThreshold, DOC(dai, node, DetectionParser, getIouThreshold))
81+
.def("getSubtype", &DetectionParser::getSubtype, DOC(dai, node, DetectionParser, getSubtype))
82+
.def("getNkeypoints", &DetectionParser::getNKeypoints, DOC(dai, node, DetectionParser, getNKeypoints))
83+
.def("getDecodeKeypoints", &DetectionParser::getDecodeKeypoints, DOC(dai, node, DetectionParser, getDecodeKeypoints))
84+
.def("getDecodeSegmentation", &DetectionParser::getDecodeSegmentation, DOC(dai, node, DetectionParser, getDecodeSegmentation))
85+
.def("getStrides", &DetectionParser::getStrides, DOC(dai, node, DetectionParser, getStrides))
7386
.def("build", &DetectionParser::build, DOC(dai, node, DetectionParser, build));
7487
daiNodeModule.attr("DetectionParser").attr("Properties") = detectionParserProperties;
7588
}

cmake/Depthai/DepthaiDeviceRVC4Config.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
44

55
# "version if applicable"
6-
set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+ae328e69accbf27ad21bafff806a7a549ae2f22d")
6+
set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+8bd2c200c25e51ebf1b8f291f1baa1f62eca8344")

cmake/Depthai/DepthaiDeviceSideConfig.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
33

44
# "full commit hash of device side binary"
5-
set(DEPTHAI_DEVICE_SIDE_COMMIT "7a638aee617e9932652076ba4a7a1862ed63f186")
5+
set(DEPTHAI_DEVICE_SIDE_COMMIT "6046548aea636182aa0b028aff7bf3ec4bdf6988")
66

77
# "version if applicable"
88
set(DEPTHAI_DEVICE_SIDE_VERSION "")

examples/cpp/DetectionNetwork/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,10 @@ dai_add_example(detection_network detection_network.cpp ON OFF)
2121
dai_set_example_test_labels(detection_network ondevice rvc2_all rvc4 rvc4rgb ci)
2222

2323
dai_add_example(detection_network_remap detection_network_remap.cpp ON OFF)
24-
dai_set_example_test_labels(detection_network_remap ondevice rvc2_all rvc4 ci)
24+
dai_set_example_test_labels(detection_network_remap ondevice rvc2_all rvc4 ci)
25+
26+
dai_add_example(detection_and_segmentation RVC4/detection_and_segmentation.cpp ON OFF)
27+
dai_set_example_test_labels(detection_and_segmentation rvc4)
28+
29+
dai_add_example(detection_and_keypoints RVC4/detection_and_keypoints.cpp ON OFF)
30+
dai_set_example_test_labels(detection_and_keypoints rvc4)

0 commit comments

Comments
 (0)