From 8962a1e088c82ce899ec276b5a0801362167a760 Mon Sep 17 00:00:00 2001 From: Filip Jeretina <59307111+zrezke@users.noreply.github.com> Date: Fri, 28 Mar 2025 00:00:38 +0100 Subject: [PATCH 01/32] stress-test: Use intensity leds api (#1105) Co-authored-by: Filip Jeretina --- utilities/stress_test.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/utilities/stress_test.py b/utilities/stress_test.py index 7d7a1e002..88493336c 100644 --- a/utilities/stress_test.py +++ b/utilities/stress_test.py @@ -137,6 +137,9 @@ def create_yolo(pipeline: dai.Pipeline, camera: dai.node.ColorCamera) -> Tuple[s def clamp(num, v0, v1): return max(v0, min(num, v1)) +DOT_STEP = 0.05 +FLOOD_STEP = 0.05 + class PipelineContext: q_name_yolo_passthrough: Optional[str] = None """The name of the queue that the YOLO spatial detection network passthrough is connected to.""" @@ -150,8 +153,8 @@ def stress_test(mxid: str = ""): # May have some unknown args args, _ = parser.parse_known_args() - dot_intensity = 500 - flood_intensity = 500 + dot_intensity = 0.5 + flood_intensity = 0.5 iso = 800 exp_time = 20000 @@ -162,9 +165,9 @@ def stress_test(mxid: str = ""): cam_args.append(device_info) with dai.Device(*cam_args) as device: print("Setting default dot intensity to", dot_intensity) - device.setIrLaserDotProjectorBrightness(dot_intensity) + device.setIrLaserDotProjectorIntensity(dot_intensity) print("Setting default flood intensity to", flood_intensity) - device.setIrFloodLightBrightness(flood_intensity) + device.setIrFloodLightIntensity(flood_intensity) pipeline, outputs, pipeline_context = build_pipeline(device, args) device.startPipeline(pipeline) start_time = time.time() @@ -230,21 +233,21 @@ def stress_test(mxid: str = ""): print("Q Pressed, exiting stress test...") break elif key == ord('a'): - dot_intensity = clamp(dot_intensity - 100, 0, 1200) + dot_intensity = clamp(dot_intensity - DOT_STEP, 0, 1.0) print("Decreasing dot intensity by 100, new value:", dot_intensity) - device.setIrLaserDotProjectorBrightness(dot_intensity) + device.setIrLaserDotProjectorIntensity(dot_intensity) elif key == ord('d'): - dot_intensity = clamp(dot_intensity + 100, 0, 1200) + dot_intensity = clamp(dot_intensity + DOT_STEP, 0, 1.0) print("Increasing dot intensity by 100, new value:", dot_intensity) - device.setIrLaserDotProjectorBrightness(dot_intensity) + device.setIrLaserDotProjectorIntensity(dot_intensity) elif key == ord('w'): - flood_intensity = clamp(flood_intensity + 100, 0, 1500) + flood_intensity = clamp(flood_intensity + FLOOD_STEP, 0, 1.0) print("Increasing flood intensity by 100, new value:", flood_intensity) - device.setIrFloodLightBrightness(flood_intensity) + device.setIrFloodLightIntensity(flood_intensity) elif key == ord('s'): - flood_intensity = clamp(flood_intensity - 100, 0, 1500) + flood_intensity = clamp(flood_intensity - FLOOD_STEP, 0, 1.0) print("Decreasing flood intensity by 100, new value:", flood_intensity) - device.setIrFloodLightBrightness(flood_intensity) + device.setIrFloodLightIntensity(flood_intensity) elif key == ord('k'): iso = clamp(iso - 50, 0, 1600) print("Decreasing iso by 50, new value:", iso) From a3f153c858f7c143f507102eab90bf5c0d792a52 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Sun, 30 Mar 2025 17:24:48 +0300 Subject: [PATCH 02/32] Update FW: Fix decimation filter + RGB depth alignment with default stereo config --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index e0f6b52d0..2b4d78030 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit e0f6b52d048ef7ceac2ecd44deb2e161dbb97699 +Subproject commit 2b4d780302f7ea7f6861c4d3b95ac912737b8158 From 79225af66e79107295509c5163648b27d26c195d Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 29 Apr 2025 19:45:45 +0300 Subject: [PATCH 03/32] ObjectTracker: Add new config fields --- depthai-core | 2 +- src/pipeline/node/ObjectTrackerBindings.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 2b4d78030..91c8b590f 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 2b4d780302f7ea7f6861c4d3b95ac912737b8158 +Subproject commit 91c8b590f48c17c49bea3e1a23b01680469d0e49 diff --git a/src/pipeline/node/ObjectTrackerBindings.cpp b/src/pipeline/node/ObjectTrackerBindings.cpp index b2b2b76a3..b00eaf73a 100644 --- a/src/pipeline/node/ObjectTrackerBindings.cpp +++ b/src/pipeline/node/ObjectTrackerBindings.cpp @@ -48,6 +48,9 @@ void bind_objecttracker(pybind11::module& m, void* pCallstack){ .def_readwrite("detectionLabelsToTrack", &ObjectTrackerProperties::detectionLabelsToTrack, DOC(dai, ObjectTrackerProperties, detectionLabelsToTrack)) .def_readwrite("trackerType", &ObjectTrackerProperties::trackerType, DOC(dai, ObjectTrackerProperties, trackerType)) .def_readwrite("trackerIdAssignmentPolicy", &ObjectTrackerProperties::trackerIdAssignmentPolicy, DOC(dai, ObjectTrackerProperties, trackerIdAssignmentPolicy)) + .def_readwrite("trackingPerClass", &ObjectTrackerProperties::trackingPerClass, DOC(dai, ObjectTrackerProperties, trackingPerClass)) + .def_readwrite("occlusionRatioThreshold", &ObjectTrackerProperties::occlusionRatioThreshold, DOC(dai, ObjectTrackerProperties, occlusionRatioThreshold)) + .def_readwrite("trackingPerClass", &ObjectTrackerProperties::trackingPerClass, DOC(dai, ObjectTrackerProperties, trackingPerClass)) ; // Node @@ -66,6 +69,9 @@ void bind_objecttracker(pybind11::module& m, void* pCallstack){ .def("setTrackerType", &ObjectTracker::setTrackerType, py::arg("type"), DOC(dai, node, ObjectTracker, setTrackerType)) .def("setTrackerIdAssignmentPolicy", &ObjectTracker::setTrackerIdAssignmentPolicy, py::arg("type"), DOC(dai, node, ObjectTracker, setTrackerIdAssignmentPolicy)) .def("setTrackingPerClass", &ObjectTracker::setTrackingPerClass, py::arg("trackingPerClass"), DOC(dai, node, ObjectTracker, setTrackingPerClass)) + .def("setOcclusionRatioThreshold", &ObjectTracker::setOcclusionRatioThreshold, py::arg("occlusionRatioThreshold"), DOC(dai, node, ObjectTracker, setOcclusionRatioThreshold)) + .def("setTrackletMaxLifespan", &ObjectTracker::setTrackletMaxLifespan, py::arg("lifespan"), DOC(dai, node, ObjectTracker, setTrackletMaxLifespan)) + .def("setTrackletBirthThreshold", &ObjectTracker::setTrackletBirthThreshold, py::arg("threshold"), DOC(dai, node, ObjectTracker, setTrackletBirthThreshold)) ; daiNodeModule.attr("ObjectTracker").attr("Properties") = objectTrackerProperties; From 822709f499edf1310874ab2ec9632b13eb07ec6b Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 6 May 2025 10:38:57 +0300 Subject: [PATCH 04/32] Add ObjectTrackerConfig message --- CMakeLists.txt | 1 + depthai-core | 2 +- src/DatatypeBindings.cpp | 2 + .../datatype/ObjectTrackerConfigBindings.cpp | 54 +++++++++++++++++++ src/pipeline/node/ObjectTrackerBindings.cpp | 1 + 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/pipeline/datatype/ObjectTrackerConfigBindings.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9448ceaae..aacd56dd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,6 +159,7 @@ pybind11_add_module(${TARGET_NAME} src/pipeline/datatype/PointCloudConfigBindings.cpp src/pipeline/datatype/PointCloudDataBindings.cpp src/pipeline/datatype/ImageAlignConfigBindings.cpp + src/pipeline/datatype/ObjectTrackerConfigBindings.cpp ) if(WIN32) diff --git a/depthai-core b/depthai-core index 91c8b590f..d759a4f02 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 91c8b590f48c17c49bea3e1a23b01680469d0e49 +Subproject commit d759a4f02e9c04dfea170287f93aca0b93e5b788 diff --git a/src/DatatypeBindings.cpp b/src/DatatypeBindings.cpp index 68d3dec47..aae56fbf3 100644 --- a/src/DatatypeBindings.cpp +++ b/src/DatatypeBindings.cpp @@ -28,6 +28,7 @@ void bind_tracklets(pybind11::module& m, void* pCallstack); void bind_pointcloudconfig(pybind11::module& m, void* pCallstack); void bind_pointclouddata(pybind11::module& m, void* pCallstack); void bind_imagealignconfig(pybind11::module& m, void* pCallstack); +void bind_objecttrackerconfig(pybind11::module& m, void* pCallstack); void DatatypeBindings::addToCallstack(std::deque& callstack) { // Bind common datatypebindings @@ -59,6 +60,7 @@ void DatatypeBindings::addToCallstack(std::deque& callstack) { callstack.push_front(bind_pointcloudconfig); callstack.push_front(bind_pointclouddata); callstack.push_front(bind_imagealignconfig); + callstack.push_front(bind_objecttrackerconfig); } void DatatypeBindings::bind(pybind11::module& m, void* pCallstack){ diff --git a/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp b/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp new file mode 100644 index 000000000..ff3ecf619 --- /dev/null +++ b/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp @@ -0,0 +1,54 @@ +#include "DatatypeBindings.hpp" +#include "pipeline/CommonBindings.hpp" +#include +#include + +// depthai +#include "depthai/pipeline/datatype/ObjectTrackerConfig.hpp" + +//pybind +#include +#include + +// #include "spdlog/spdlog.h" + +void bind_objecttrackerconfig(pybind11::module& m, void* pCallstack){ + + using namespace dai; + + py::class_> rawConfig(m, "RawObjectTrackerConfig", DOC(dai, RawObjectTrackerConfig)); + py::class_> config(m, "ObjectTrackerConfig", DOC(dai, ObjectTrackerConfig)); + + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + // Call the rest of the type defines, then perform the actual bindings + Callstack* callstack = (Callstack*) pCallstack; + auto cb = callstack->top(); + callstack->pop(); + cb(m, pCallstack); + // Actual bindings + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + + // Metadata / raw + rawConfig + .def(py::init<>()) + .def_readwrite("trackletIdsToRemove", &RawObjectTrackerConfig::trackletIdsToRemove, DOC(dai, RawObjectTrackerConfig, trackletIdsToRemove)) + ; + + // Message + config + .def(py::init<>()) + .def(py::init>()) + + .def("set", &ObjectTrackerConfig::set, py::arg("config"), DOC(dai, ObjectTrackerConfig, set)) + .def("get", &ObjectTrackerConfig::get, DOC(dai, ObjectTrackerConfig, get)) + .def("forceRemoveID", &ObjectTrackerConfig::forceRemoveID, DOC(dai, ObjectTrackerConfig, forceRemoveID)) + .def("forceRemoveIDs", &ObjectTrackerConfig::forceRemoveIDs, DOC(dai, ObjectTrackerConfig, forceRemoveIDs)) + ; + + // add aliases + +} diff --git a/src/pipeline/node/ObjectTrackerBindings.cpp b/src/pipeline/node/ObjectTrackerBindings.cpp index b00eaf73a..fac05bab1 100644 --- a/src/pipeline/node/ObjectTrackerBindings.cpp +++ b/src/pipeline/node/ObjectTrackerBindings.cpp @@ -58,6 +58,7 @@ void bind_objecttracker(pybind11::module& m, void* pCallstack){ .def_readonly("inputTrackerFrame", &ObjectTracker::inputTrackerFrame, DOC(dai, node, ObjectTracker, inputTrackerFrame)) .def_readonly("inputDetectionFrame", &ObjectTracker::inputDetectionFrame, DOC(dai, node, ObjectTracker, inputDetectionFrame)) .def_readonly("inputDetections", &ObjectTracker::inputDetections, DOC(dai, node, ObjectTracker, inputDetections)) + .def_readonly("inputConfig", &ObjectTracker::inputConfig, DOC(dai, node, ObjectTracker, inputConfig)) .def_readonly("out", &ObjectTracker::out, DOC(dai, node, ObjectTracker, out)) .def_readonly("passthroughTrackerFrame", &ObjectTracker::passthroughTrackerFrame, DOC(dai, node, ObjectTracker, passthroughTrackerFrame)) .def_readonly("passthroughDetectionFrame", &ObjectTracker::passthroughDetectionFrame, DOC(dai, node, ObjectTracker, passthroughDetectionFrame)) From a3fd96e7560538a70e407b498e92db35a20dd1eb Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 6 May 2025 21:55:20 +0300 Subject: [PATCH 05/32] ObjectTracker: add force remove functionality; update object_tracker.py --- depthai-core | 2 +- examples/ObjectTracker/object_tracker.py | 30 +++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/depthai-core b/depthai-core index d759a4f02..603bd2261 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit d759a4f02e9c04dfea170287f93aca0b93e5b788 +Subproject commit 603bd2261dbea34c61e0be7f482d93bc0b29a7d5 diff --git a/examples/ObjectTracker/object_tracker.py b/examples/ObjectTracker/object_tracker.py index 37e6f16a6..03a142a14 100755 --- a/examples/ObjectTracker/object_tracker.py +++ b/examples/ObjectTracker/object_tracker.py @@ -29,9 +29,11 @@ xlinkOut = pipeline.create(dai.node.XLinkOut) trackerOut = pipeline.create(dai.node.XLinkOut) +xinTrackerConfig = pipeline.create(dai.node.XLinkIn) xlinkOut.setStreamName("preview") trackerOut.setStreamName("tracklets") +xinTrackerConfig.setStreamName("trackerConfig") # Properties camRgb.setPreviewSize(300, 300) @@ -64,11 +66,19 @@ detectionNetwork.out.link(objectTracker.inputDetections) objectTracker.out.link(trackerOut.input) +# set tracking parameters +objectTracker.setOcclusionRatioThreshold(0.4) +objectTracker.setTrackletMaxLifespan(120) +objectTracker.setTrackletBirthThreshold(3) + +xinTrackerConfig.out.link(objectTracker.inputConfig) + # Connect to device and start pipeline with dai.Device(pipeline) as device: preview = device.getOutputQueue("preview", 4, False) tracklets = device.getOutputQueue("tracklets", 4, False) + trackerConfigQueue = device.getInputQueue("trackerConfig") startTime = time.monotonic() counter = 0 @@ -76,6 +86,7 @@ frame = None while(True): + latestTrackedIds = [] imgFrame = preview.get() track = tracklets.get() @@ -106,9 +117,26 @@ cv2.putText(frame, t.status.name, (x1 + 10, y1 + 50), cv2.FONT_HERSHEY_TRIPLEX, 0.5, 255) cv2.rectangle(frame, (x1, y1), (x2, y2), color, cv2.FONT_HERSHEY_SIMPLEX) + if t.status == dai.Tracklet.TrackingStatus.TRACKED: + latestTrackedIds.append(t.id) + cv2.putText(frame, "NN fps: {:.2f}".format(fps), (2, frame.shape[0] - 4), cv2.FONT_HERSHEY_TRIPLEX, 0.4, color) cv2.imshow("tracker", frame) - if cv2.waitKey(1) == ord('q'): + key = cv2.waitKey(1) + if key == ord('q'): break + elif key == ord('g'): + # send tracker config to device + config = dai.ObjectTrackerConfig() + + # take a random ID from the latest tracked IDs + if len(latestTrackedIds) > 0: + idToRemove = (np.random.choice(latestTrackedIds)) + print(f"Force removing ID: {idToRemove}") + config.forceRemoveID(idToRemove) + trackerConfigQueue.send(config) + else: + print("No tracked IDs available to force remove") + From 7e227fc7f3329c566e72e0fd65248203b72ac95b Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 6 May 2025 22:01:47 +0300 Subject: [PATCH 06/32] Add missing ObjectTracker bindings --- src/pipeline/node/ObjectTrackerBindings.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pipeline/node/ObjectTrackerBindings.cpp b/src/pipeline/node/ObjectTrackerBindings.cpp index fac05bab1..a06c6499f 100644 --- a/src/pipeline/node/ObjectTrackerBindings.cpp +++ b/src/pipeline/node/ObjectTrackerBindings.cpp @@ -50,7 +50,8 @@ void bind_objecttracker(pybind11::module& m, void* pCallstack){ .def_readwrite("trackerIdAssignmentPolicy", &ObjectTrackerProperties::trackerIdAssignmentPolicy, DOC(dai, ObjectTrackerProperties, trackerIdAssignmentPolicy)) .def_readwrite("trackingPerClass", &ObjectTrackerProperties::trackingPerClass, DOC(dai, ObjectTrackerProperties, trackingPerClass)) .def_readwrite("occlusionRatioThreshold", &ObjectTrackerProperties::occlusionRatioThreshold, DOC(dai, ObjectTrackerProperties, occlusionRatioThreshold)) - .def_readwrite("trackingPerClass", &ObjectTrackerProperties::trackingPerClass, DOC(dai, ObjectTrackerProperties, trackingPerClass)) + .def_readwrite("trackletMaxLifespan", &ObjectTrackerProperties::trackletMaxLifespan, DOC(dai, ObjectTrackerProperties, trackletMaxLifespan)) + .def_readwrite("trackletBirthThreshold", &ObjectTrackerProperties::trackletBirthThreshold, DOC(dai, ObjectTrackerProperties, trackletBirthThreshold)) ; // Node From 0c90bc652afc761dadacb184a76861b3af89583a Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 7 May 2025 16:01:30 +0200 Subject: [PATCH 07/32] Remove whitespace from bindings --- src/pipeline/datatype/ObjectTrackerConfigBindings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp b/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp index ff3ecf619..bc656c024 100644 --- a/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp +++ b/src/pipeline/datatype/ObjectTrackerConfigBindings.cpp @@ -42,7 +42,7 @@ void bind_objecttrackerconfig(pybind11::module& m, void* pCallstack){ config .def(py::init<>()) .def(py::init>()) - + .def("set", &ObjectTrackerConfig::set, py::arg("config"), DOC(dai, ObjectTrackerConfig, set)) .def("get", &ObjectTrackerConfig::get, DOC(dai, ObjectTrackerConfig, get)) .def("forceRemoveID", &ObjectTrackerConfig::forceRemoveID, DOC(dai, ObjectTrackerConfig, forceRemoveID)) From ff0a37940909b01653b745999f3ae82cb98d2976 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Fri, 9 May 2025 13:55:33 +0300 Subject: [PATCH 08/32] Update core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 603bd2261..cefd69ff2 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 603bd2261dbea34c61e0be7f482d93bc0b29a7d5 +Subproject commit cefd69ff27495a710d961c354d97172445ec8a3d From 5b12f129ee691598afcee9928210f826b4aee53f Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Tue, 13 May 2025 10:50:21 +0200 Subject: [PATCH 09/32] Update CI to run on github hoster runners and pin down manylinux containers --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b045659f8..569f04087 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -301,7 +301,7 @@ jobs: needs: build-docstrings runs-on: ubuntu-latest container: - image: quay.io/pypa/manylinux_2_28_x86_64:latest + image: quay.io/pypa/manylinux_2_28_x86_64:2024.12.05-1 env: PLAT: manylinux_2_28_x86_64 steps: @@ -363,9 +363,9 @@ jobs: # This job builds wheels for ARM64 arch build-linux-arm64: needs: build-docstrings - runs-on: [self-hosted, linux, ARM64] + runs-on: ubuntu-24.04-arm container: - image: quay.io/pypa/manylinux_2_28_aarch64:latest + image: quay.io/pypa/manylinux_2_28_aarch64:2024.12.05-1 env: PLAT: manylinux_2_28_aarch64 # Mount local hunter cache directory, instead of transfering to Github and back From c854e1b063792c05a9c212bd8aebbeedf24265b6 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Thu, 29 May 2025 21:07:55 +0300 Subject: [PATCH 10/32] Update RVC2 FW: handle ToF phase unwrapping underflow --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index cefd69ff2..c0b03d632 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit cefd69ff27495a710d961c354d97172445ec8a3d +Subproject commit c0b03d6325c3bb96582caee586a6e8adc1dc2269 From cf42968e3ccc3edafdeb5cbf504bb3f8ef160801 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 10 Jun 2025 23:17:14 +0300 Subject: [PATCH 11/32] Update FW w/ TOF fixes --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index c0b03d632..7bee8be9a 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit c0b03d6325c3bb96582caee586a6e8adc1dc2269 +Subproject commit 7bee8be9ad6381b9b63efe0c36231dfc22f93ccd From 7e3536cbce342ab27a5253482043b4bef9648bda Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 4 Jul 2025 23:29:19 +0300 Subject: [PATCH 12/32] cam_test: fix raw handling (metadata, offset) for IMX462 --- depthai-core | 2 +- utilities/cam_test.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/depthai-core b/depthai-core index 7bee8be9a..4bffeca54 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 7bee8be9ad6381b9b63efe0c36231dfc22f93ccd +Subproject commit 4bffeca5496fe1dde6418973d7df893508cf719a diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 482e9ac4d..2cf27c140 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -639,8 +639,19 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: capture_list.remove(c) print() if c.startswith('raw_') or c.startswith('tof_amplitude_') or c.startswith('tof_intensity_'): + # Custom handling for IMX462 that has extra metadata and offset in RAW frame + bits = 10 + order = cv2.COLOR_BayerGB2BGR + if pkt.getData().size == 1920*2*(1080+15): + full_raw = pkt.getData() + extra_offset = 384*2 + actual_frame = full_raw[(1920*2*15+extra_offset):] + missing_data = np.full(extra_offset, 0xAA, dtype=np.uint8) # FIXME + frame = np.append(actual_frame, missing_data).view(np.uint16).reshape((1080, 1920)) + bits = 12 + order = cv2.COLOR_BayerGR2BGR if capture: - filename = capture_file_info + '_10bit.bw' + filename = capture_file_info + f'_{bits}bit.bw' print('Saving:', filename) frame.tofile(filename) # Full range for display, use bits [15:6] of the 16-bit pixels @@ -649,14 +660,14 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: if type == dai.ImgFrame.Type.RAW10: multiplier = (1 << (16-10)) if type == dai.ImgFrame.Type.RAW12: - multiplier = (1 << (16-4)) + multiplier = (1 << (16-12)) frame = frame * multiplier # Debayer as color for preview/png if cam_type_color[cam_skt]: # See this for the ordering, at the end of page: # https://docs.opencv.org/4.5.1/de/d25/imgproc_color_conversions.html # TODO add bayer order to ImgFrame getType() - frame = cv2.cvtColor(frame, cv2.COLOR_BayerGB2BGR) + frame = cv2.cvtColor(frame, order) else: # Save YUV too, but only when RAW is also enabled (for tuning purposes) if capture and args.enable_raw: From bca3ff1203061701963abb45aeaccdcf5b4a1f19 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Tue, 8 Jul 2025 19:06:25 +0300 Subject: [PATCH 13/32] IMX462: max 114fps, exposure down to 8us (AE and manual) --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 4bffeca54..9f73b8b91 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 4bffeca5496fe1dde6418973d7df893508cf719a +Subproject commit 9f73b8b918debd929209abe1c0dd72152126f182 From 15056a9d7e4d80d3a30661674c69cf1bc9da66ff Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Tue, 7 Oct 2025 14:19:04 +0300 Subject: [PATCH 14/32] RVC2 FW: - FW internal ddrinit header: don't reset watchdog if configured (support for XLink#99) - IMX678 image quality improvements, + fixes for Camera node - OAK-D-SR-PoE with IMX378 support - OAK-T R8 support - BNO IMU: fix timestamp jump - fix some cases of device becoming offline in pipelines with IMU XLink: https://github.com/luxonis/XLink/pull/95 - [RVC2] Attempt to fix device bad state (USB/UNBOOTED) https://github.com/luxonis/XLink/pull/99 - usb_boot: enable watchdog prior to booting --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 9f73b8b91..3c96aedf6 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 9f73b8b918debd929209abe1c0dd72152126f182 +Subproject commit 3c96aedf6fff437b972fe0afae0de706d4162358 From f23558c17dc953872859f8ae1c528cb6309add7d Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Mon, 13 Oct 2025 15:21:14 +0200 Subject: [PATCH 15/32] Use macos-14 in actions --- .github/workflows/main.yml | 6 +++--- depthai-core | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 569f04087..52480e4ea 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,13 +67,13 @@ jobs: needs: build-docstrings strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + os: [ubuntu-latest, windows-latest, macos-14] runs-on: ${{ matrix.os }} steps: - name: Print home directory run: echo Home directory inside container $HOME - name: Setup cmake - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-14' uses: jwlawson/actions-setup-cmake@v1.13 with: cmake-version: '3.29.x' @@ -113,7 +113,7 @@ jobs: sudo apt install libusb-1.0-0-dev - name: Install dependencies (MacOS) - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-14' run: | python -m pip install --upgrade pip brew install libusb diff --git a/depthai-core b/depthai-core index 3c96aedf6..98dbc956e 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 3c96aedf6fff437b972fe0afae0de706d4162358 +Subproject commit 98dbc956e8b24dfca19d77ec4c10bf3ed6095aea From 452f4d4ae41067c5fa674164713469b81170f65d Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Mon, 13 Oct 2025 15:27:37 +0200 Subject: [PATCH 16/32] Fix Windows wheels building --- .github/workflows/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 52480e4ea..0842dace3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -207,6 +207,11 @@ jobs: - name: Select Windows SDK run: echo "CMAKE_ARGS=-DCMAKE_SYSTEM_VERSION=${{ env.CMAKE_WINDOWS_SDK_VERSION }}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + - name: Set UTF-8 encoding + run: | + echo "PYTHONIOENCODING=utf-8" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "PYTHONUTF8=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + - name: Install dependencies run: choco install strawberryperl - name: Set up Python ${{ matrix.python-version }} From 25bfe36f592188b8470cd0c26044b89a61d80071 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 15 Oct 2025 18:30:25 +0200 Subject: [PATCH 17/32] [RVC2 FW] Remove shutdown regression on RVC2 --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 98dbc956e..d9ec3b967 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 98dbc956e8b24dfca19d77ec4c10bf3ed6095aea +Subproject commit d9ec3b9671480d8e95b96bd67f20b0ccd10d2118 From 75f982725dd0f658c5d653952be201e87b5357cf Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 24 Oct 2025 10:23:04 +0300 Subject: [PATCH 18/32] cam_test: add `B` key to toggle HDR exposure base, RVC2 FW CameraControl: setMisc add "hdr-exposure-base": "long" (default), "middle" option. Operation: - from the BASE exposure (AE or user), with the default "long": -- long = BASE -- middle = BASE / hdr-exposure-ratio -- short = BASE / hdr-exposure-ratio / hdr-exposure-ratio - with the option "middle": -- long = BASE * hdr-exposure-ratio -- middle = BASE -- short = BASE / hdr-exposure-ratio Allow "hdr-exposure-ratio" = 1, at runtime only (not initialControl), to disable HDR and compare the effect. Fix a bug in handling "hdr-local-tone-weight" control. --- depthai-core | 2 +- utilities/cam_test.py | 31 +++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/depthai-core b/depthai-core index d9ec3b967..1c139606d 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit d9ec3b9671480d8e95b96bd67f20b0ccd10d2118 +Subproject commit 1c139606dd0233987a6be08cec972998b3ccbec2 diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 2cf27c140..1e8de04ff 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -276,6 +276,17 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: cam_type_thermal[socket] = is_thermal print(socket.rjust(7), ':', 'tof' if is_tof else 'color' if is_color else 'thermal' if is_thermal else 'mono') + print('misc controls:', args.misc_controls) + args_misc_dict = dict(args.misc_controls) + + hdr_exp_ratio = int(math.log2(float(args_misc_dict.get('hdr-exposure-ratio', 1)))) + hdr_exp_base = args_misc_dict.get('hdr-exposure-base', 'long') + hdr_local_tone_weight = int(32 * float(args_misc_dict.get('hdr-local-tone-weight', 0.75))) + hdr_on = (hdr_exp_ratio > 0) + if hdr_on and args.fps > 10: + print('WARNING: HDR enabled for IMX582/IMX586, limiting FPS to 10') + args.fps = 10 + # Start defining a pipeline pipeline = dai.Pipeline() # Uncomment to get better throughput @@ -370,7 +381,8 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: # cam[c].initialControl.setMisc("binning-mode", "sum") # default: "avg" # cam[c].initialControl.setMisc("manual-exposure-handling", "fast") # default: "default" # cam[c].initialControl.setMisc("hdr-exposure-ratio", 4) # enables HDR when set `> 1`, current options: 2, 4, 8 - # cam[c].initialControl.setMisc("hdr-local-tone-weight", 75) # default 75, range 0..100 + # cam[c].initialControl.setMisc("hdr-exposure-base", "middle") # default "long" + # cam[c].initialControl.setMisc("hdr-local-tone-weight", 0.75) # default 0.75, range 0..1 # cam[c].initialControl.setMisc("high-conversion-gain", 0) # 1 to enable (default on supported sensors) for kvPair in args.misc_controls: cam[c].initialControl.setMisc(*kvPair) @@ -549,12 +561,6 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: control = 'none' show = args.show_meta high_conversion_gain = 1 - print(args.misc_controls) - args_misc_dict = dict(args.misc_controls) - - hdr_exp_ratio = int(math.log2(float(args_misc_dict.get('hdr-exposure-ratio', 1)))) - hdr_local_tone_weight = int(32 * float(args_misc_dict.get('hdr-local-tone-weight', 0.75))) - hdr_on = (hdr_exp_ratio > 0) jet_custom = cv2.applyColorMap( np.arange(256, dtype=np.uint8), cv2.COLORMAP_JET) @@ -756,6 +762,15 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: ctrl = dai.CameraControl() ctrl.setAutoExposureLock(ae_lock) controlQueue.send(ctrl) + elif key == ord('b'): + if hdr_on: + hdr_exp_base = 'middle' if hdr_exp_base == 'long' else 'long' + print(f"HDR exposure base: {hdr_exp_base}") + ctrl = dai.CameraControl() + ctrl.setMisc("hdr-exposure-base", hdr_exp_base) + controlQueue.send(ctrl) + else: + print("HDR was not enabled, start with `-misc hdr-exposure-ratio=2` or higher to enable") elif key == ord('a'): dotIntensity = dotIntensity - DOT_STEP if dotIntensity < 0: @@ -879,7 +894,7 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: elif control == 'hdr_exp_ratio': hdr_exp_ratio = clamp(hdr_exp_ratio + change, 0, 3) value = pow(2, hdr_exp_ratio) - print("HDR exposure ratio:", value) + print("HDR exposure ratio:", value, '(HDR disabled)' if value == 1 else '') ctrl.setMisc("hdr-exposure-ratio", value) elif control == 'hdr_local_tone_weight': hdr_local_tone_weight = clamp(hdr_local_tone_weight + change, 0, 32) From 8f54bbcf2147ab84d55e0f2dd870baa6cd7670de Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 24 Oct 2025 12:50:07 +0300 Subject: [PATCH 19/32] cam_test: add tmp workaround for HDR initial local tone weight --- utilities/cam_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 1e8de04ff..41a61db73 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -517,6 +517,12 @@ def socket_to_socket_opt(socket: dai.CameraBoardSocket) -> str: controlQueue = device.getInputQueue('control') tofCfgQueue = device.getInputQueue('tofConfig') + # TMP workaround, send again HDR local tone weight which doesn't seem to take effect from initialControl + if hdr_on: + ctrl = dai.CameraControl() + ctrl.setMisc("hdr-local-tone-weight", hdr_local_tone_weight / 32) + controlQueue.send(ctrl) + # Manual exposure/focus set step EXP_STEP = 500 # us ISO_STEP = 50 From aee44bc7fe0c76bea9555bbe6123a443c8478f65 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Tue, 28 Oct 2025 09:30:07 +0100 Subject: [PATCH 20/32] Update core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 1c139606d..85aa5f1d6 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 1c139606dd0233987a6be08cec972998b3ccbec2 +Subproject commit 85aa5f1d63be1ce9559639fd22a2be29b86610b4 From 5873af7e6c1a55ee3d506e3a74ac4e1c0117e88b Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Mon, 17 Nov 2025 16:55:54 +0200 Subject: [PATCH 21/32] RVC2 FW: fix IMU-related system hang at reboot, IMX577 tuning --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 85aa5f1d6..ae13d404d 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 85aa5f1d63be1ce9559639fd22a2be29b86610b4 +Subproject commit ae13d404dce4ad0e2cd1fba4e88abaacd95d8810 From 04da7f5bda98bf715bf7570787b8a84fe787ce13 Mon Sep 17 00:00:00 2001 From: moratom <47612463+moratom@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:27:52 +0100 Subject: [PATCH 22/32] Update Docker Hub workflow for ARM architecture --- .github/workflows/docker-hub.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 3f4423ebf..7300376f7 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -13,13 +13,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, [Linux, ARM], [Linux, ARM64]] + os: [ubuntu-latest, [Linux, ARM], ubuntu-24.04-arm] include: - os: ubuntu-latest arch: amd64 - os: [Linux, ARM] arch: armv7 - - os: [Linux, ARM64] + - os: ubuntu-24.04-arm arch: armv8 steps: - name: Clean the workspace From e31b6af4e12d47676e6355ccdab73c28437a731c Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 19 Nov 2025 20:17:59 +0100 Subject: [PATCH 23/32] Add support for Python 3.14 and drop 3.7, 3.8 --- .github/workflows/main.yml | 8 ++++---- cmake/Hunter/config.cmake | 4 ++-- setup.py | 5 ++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0842dace3..03f5f2940 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -184,7 +184,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, '3.10', '3.11', '3.12', '3.13'] + python-version: [3.9, '3.10', '3.11', '3.12', '3.13', '3.14'] python-architecture: [x64, x86] fail-fast: false steps: @@ -245,7 +245,7 @@ jobs: needs: build-docstrings strategy: matrix: - python-version: [3.8, 3.9, '3.10', '3.11', '3.12', '3.13'] + python-version: [3.9, '3.10', '3.11', '3.12', '3.13', '3.14'] os: [macos-13, macos-14] # macos-13 is x64, macos-14 is arm64 runs-on: ${{ matrix.os }} steps: @@ -349,7 +349,7 @@ jobs: /opt/python/cp38-cp38/bin/python3.8 setup.py sdist --formats=gztar mv dist/* wheelhouse/audited/ - name: Build wheels - run: for PYBIN in /opt/python/cp3{7..13}*/bin; do "${PYBIN}/pip" wheel . -w ./wheelhouse/ --verbose; done + run: for PYBIN in /opt/python/cp3{9..14}*/bin; do "${PYBIN}/pip" wheel . -w ./wheelhouse/ --verbose; done - name: Audit wheels run: for whl in wheelhouse/*.whl; do auditwheel repair "$whl" --plat $PLAT -w wheelhouse/audited/; done - name: Archive wheel artifacts @@ -406,7 +406,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') != true run: echo "BUILD_COMMIT_HASH=${{github.sha}}" >> $GITHUB_ENV - name: Building wheels - run: for PYBIN in /opt/python/cp3{7..13}*/bin; do "${PYBIN}/pip" wheel . -w ./wheelhouse/ --verbose; done + run: for PYBIN in /opt/python/cp3{9..14}*/bin; do "${PYBIN}/pip" wheel . -w ./wheelhouse/ --verbose; done - name: Auditing wheels run: for whl in wheelhouse/*.whl; do auditwheel repair "$whl" --plat $PLAT -w wheelhouse/audited/; done - name: Archive wheel artifacts diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake index 22fb2d494..dbd675e28 100644 --- a/cmake/Hunter/config.cmake +++ b/cmake/Hunter/config.cmake @@ -2,6 +2,6 @@ hunter_config( pybind11 VERSION "2.12.0" - URL "https://github.com/pybind/pybind11/archive/refs/tags/v2.12.0.tar.gz" - SHA1 "e70610cba7b6b7d7a57827d5357c016ad2155c0f" + URL "https://github.com/pybind/pybind11/archive/refs/tags/v3.0.1.tar.gz" + SHA1 "b20ddcd79e2b03b7e2777a2a0b06b646f2f23ce0" ) diff --git a/setup.py b/setup.py index 596c31c39..7dfab219f 100644 --- a/setup.py +++ b/setup.py @@ -238,19 +238,18 @@ def build_extension(self, ext): "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: C++", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering", "Topic :: Software Development", ], - python_requires='>=3.7', + python_requires='>=3.9', entry_points={ "console_scripts": [ f'depthai={DEPTHAI_CLI_MODULE_NAME}.depthai_cli:cli' From 5969d0ff610ff55670d549d44fffeb9c77480287 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 19 Nov 2025 20:48:35 +0100 Subject: [PATCH 24/32] Bump manylinux containers --- .github/workflows/main.yml | 4 ++-- depthai-core | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 03f5f2940..b4aff7a0b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -306,7 +306,7 @@ jobs: needs: build-docstrings runs-on: ubuntu-latest container: - image: quay.io/pypa/manylinux_2_28_x86_64:2024.12.05-1 + image: quay.io/pypa/manylinux_2_28_x86_64:2025.11.10-2 env: PLAT: manylinux_2_28_x86_64 steps: @@ -370,7 +370,7 @@ jobs: needs: build-docstrings runs-on: ubuntu-24.04-arm container: - image: quay.io/pypa/manylinux_2_28_aarch64:2024.12.05-1 + image: quay.io/pypa/manylinux_2_28_aarch64:2025.11.10-2 env: PLAT: manylinux_2_28_aarch64 # Mount local hunter cache directory, instead of transfering to Github and back diff --git a/depthai-core b/depthai-core index ae13d404d..6515ae56c 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit ae13d404dce4ad0e2cd1fba4e88abaacd95d8810 +Subproject commit 6515ae56c76428bdfea4f34227ccd8602cb048ab From 904a5ec3030b4defe23754a1d1ccc6b26322e667 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 19 Nov 2025 21:06:24 +0100 Subject: [PATCH 25/32] Set CMake version --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b4aff7a0b..3f5e1a5f0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -322,7 +322,7 @@ jobs: run: yum install -y --disableplugin=fastestmirror libusb1-devel perl-core - name: Installing cmake dependency run: | - /opt/python/cp38-cp38/bin/python3.8 -m pip install cmake + /opt/python/cp38-cp38/bin/python3.8 -m pip install cmake==3.29 ln -s /opt/python/cp38-cp38/bin/cmake /bin/ - name: Create folder structure run: mkdir -p wheelhouse/audited/ @@ -384,7 +384,7 @@ jobs: run: yum install -y --disableplugin=fastestmirror libusb1-devel perl-core - name: Installing cmake dependency run: | - /opt/python/cp38-cp38/bin/python3.8 -m pip install cmake + /opt/python/cp38-cp38/bin/python3.8 -m pip install cmake==3.29 ln -s /opt/python/cp38-cp38/bin/cmake /bin/ - name: Create folder structure run: mkdir -p wheelhouse/audited/ From 44b5895425873b6aa2c5c3af6970f9d449c4d353 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 19 Nov 2025 21:16:30 +0100 Subject: [PATCH 26/32] Loosen CMake requirement --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3f5e1a5f0..9f81dbd1c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -322,7 +322,7 @@ jobs: run: yum install -y --disableplugin=fastestmirror libusb1-devel perl-core - name: Installing cmake dependency run: | - /opt/python/cp38-cp38/bin/python3.8 -m pip install cmake==3.29 + /opt/python/cp38-cp38/bin/python3.8 -m pip install "cmake<4.0" ln -s /opt/python/cp38-cp38/bin/cmake /bin/ - name: Create folder structure run: mkdir -p wheelhouse/audited/ @@ -384,7 +384,7 @@ jobs: run: yum install -y --disableplugin=fastestmirror libusb1-devel perl-core - name: Installing cmake dependency run: | - /opt/python/cp38-cp38/bin/python3.8 -m pip install cmake==3.29 + /opt/python/cp38-cp38/bin/python3.8 -m pip install "cmake<4" ln -s /opt/python/cp38-cp38/bin/cmake /bin/ - name: Create folder structure run: mkdir -p wheelhouse/audited/ From 68cd2ac70a8e6cfe29ffe3536d09db42df4a025a Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 19 Nov 2025 21:25:18 +0100 Subject: [PATCH 27/32] Explicitly use cmake from pypi --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9f81dbd1c..2ce4289dc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -336,8 +336,8 @@ jobs: - name: Build and install depthai-core run: | - cmake -S depthai-core/ -B build_core -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$PWD/cmake/toolchain/pic.cmake - cmake --build build_core --target install --parallel 4 + /opt/python/cp38-cp38/bin/cmake -S depthai-core/ -B build_core -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$PWD/cmake/toolchain/pic.cmake + /opt/python/cp38-cp38/bin/cmake --build build_core --target install --parallel 4 echo "DEPTHAI_INSTALLATION_DIR=$PWD/build_core/install/" >> $GITHUB_ENV - name: Append build hash if not a tagged commit @@ -398,8 +398,8 @@ jobs: - name: Build and install depthai-core run: | - cmake -S depthai-core/ -B build_core -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$PWD/cmake/toolchain/pic.cmake - cmake --build build_core --target install --parallel 4 + /opt/python/cp38-cp38/bin/cmake -S depthai-core/ -B build_core -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$PWD/cmake/toolchain/pic.cmake + /opt/python/cp38-cp38/bin/cmake --build build_core --target install --parallel 4 echo "DEPTHAI_INSTALLATION_DIR=$PWD/build_core/install/" >> $GITHUB_ENV - name: Append build hash if not a tagged commit From 9c3018e20fa83b4c70ec2872cc9551dd2664e028 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 19 Nov 2025 21:44:40 +0100 Subject: [PATCH 28/32] Fix source distribution --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2ce4289dc..2389e0a67 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -346,6 +346,7 @@ jobs: - name: Building source distribution run: | + /opt/python/cp38-cp38/bin/python3.8 -m pip install --upgrade setuptools wheel /opt/python/cp38-cp38/bin/python3.8 setup.py sdist --formats=gztar mv dist/* wheelhouse/audited/ - name: Build wheels From 5bbac8d007a6c743497c52de4e4c6eb03f2c3e98 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Tue, 25 Nov 2025 16:53:43 +0100 Subject: [PATCH 29/32] Bump core to v2_develop --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 6515ae56c..c23f38eca 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 6515ae56c76428bdfea4f34227ccd8602cb048ab +Subproject commit c23f38eca3801ad305128ed0a78c1db542002554 From 21bd2347ea58873ebd02992b13a6848c2bdd7a24 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Tue, 25 Nov 2025 17:08:30 +0100 Subject: [PATCH 30/32] Bump core to the release branch --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index c23f38eca..26781050b 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit c23f38eca3801ad305128ed0a78c1db542002554 +Subproject commit 26781050bf4d0765a8995239bd18754e568fcc32 From 58ea82cd026a82dee6406f0579f1bcccf7de8443 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 26 Nov 2025 13:01:28 +0100 Subject: [PATCH 31/32] Fix thermal support --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 26781050b..6ae2f61f3 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 26781050bf4d0765a8995239bd18754e568fcc32 +Subproject commit 6ae2f61f3303f6b238318703829b9a35ec0d4617 From 7a3e683b8db222498b96ae14a47f23417d1d4e70 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Wed, 26 Nov 2025 13:06:30 +0100 Subject: [PATCH 32/32] Bump core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 6ae2f61f3..a99f24151 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 6ae2f61f3303f6b238318703829b9a35ec0d4617 +Subproject commit a99f2415120b7900d7ee34f949fa651f0c2d4f88