From 381bc4588fc61f85dc6b364813f35557483c2f35 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 5 May 2023 05:28:47 +0300 Subject: [PATCH 01/47] Add bindings for CameraControl setMisc --- depthai-core | 2 +- src/pipeline/datatype/CameraControlBindings.cpp | 5 +++++ utilities/cam_test.py | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index bdbbf828d..41feacdc2 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit bdbbf828da5c392c8e028a83715257b30c91b18f +Subproject commit 41feacdc29f069fe77a41fda45b641bf12c28925 diff --git a/src/pipeline/datatype/CameraControlBindings.cpp b/src/pipeline/datatype/CameraControlBindings.cpp index 06ebb4ab4..f6337bb6b 100644 --- a/src/pipeline/datatype/CameraControlBindings.cpp +++ b/src/pipeline/datatype/CameraControlBindings.cpp @@ -214,8 +214,13 @@ std::vector camCtrlAttr; .def("setChromaDenoise", &CameraControl::setChromaDenoise, py::arg("value"), DOC(dai, CameraControl, setChromaDenoise)) .def("setSceneMode", &CameraControl::setSceneMode, py::arg("mode"), DOC(dai, CameraControl, setSceneMode)) .def("setEffectMode", &CameraControl::setEffectMode, py::arg("mode"), DOC(dai, CameraControl, setEffectMode)) + .def("setMisc", py::overload_cast(&CameraControl::setMisc), py::arg("control"), py::arg("value"), DOC(dai, CameraControl, setMisc)) + .def("setMisc", py::overload_cast(&CameraControl::setMisc), py::arg("control"), py::arg("value"), DOC(dai, CameraControl, setMisc, 2)) + .def("setMisc", py::overload_cast(&CameraControl::setMisc), py::arg("control"), py::arg("value"), DOC(dai, CameraControl, setMisc, 3)) + .def("clearMiscControls", &CameraControl::clearMiscControls, DOC(dai, CameraControl, clearMiscControls)) .def("set", &CameraControl::set, py::arg("config"), DOC(dai, CameraControl, set)) // getters + .def("getMiscControls", &CameraControl::getMiscControls, DOC(dai, CameraControl, getMiscControls)) .def("getCaptureStill", &CameraControl::getCaptureStill, DOC(dai, CameraControl, getCaptureStill)) .def("getExposureTime", &CameraControl::getExposureTime, DOC(dai, CameraControl, getExposureTime)) .def("getSensitivity", &CameraControl::getSensitivity, DOC(dai, CameraControl, getSensitivity)) diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 491ae52cf..1800ee386 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -200,6 +200,7 @@ def get(self): # cam[c].initialControl.setManualExposure(15000, 400) # exposure [us], iso # When set, takes effect after the first 2 frames # cam[c].initialControl.setManualWhiteBalance(4000) # light temperature in K, 1000..12000 + # cam[c].initialControl.setMisc("some-test", 1) control.out.link(cam[c].inputControl) if rotate[c]: cam[c].setImageOrientation(dai.CameraImageOrientation.ROTATE_180_DEG) From 89217b865e962351c42cc3a8b1145ea47bf94ffe Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 12 May 2023 04:41:43 +0300 Subject: [PATCH 02/47] FW: IMX378/IMX582 manual ISO up to 3200, handle miscellaneous controls: .initialControl.setMisc("downsampling-mode", "binning") # default: "scaling" .initialControl.setMisc("binning-mode", "sum") # default: "avg" Max FPS for IMX378 1080p back to 118 (from 60) with binning enabled --- depthai-core | 2 +- utilities/cam_test.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/depthai-core b/depthai-core index 41feacdc2..3a202c711 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 41feacdc29f069fe77a41fda45b641bf12c28925 +Subproject commit 3a202c711c836344dc2e623d781660cc5ea08788 diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 1800ee386..391f1783c 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -200,7 +200,8 @@ def get(self): # cam[c].initialControl.setManualExposure(15000, 400) # exposure [us], iso # When set, takes effect after the first 2 frames # cam[c].initialControl.setManualWhiteBalance(4000) # light temperature in K, 1000..12000 - # cam[c].initialControl.setMisc("some-test", 1) + # cam[c].initialControl.setMisc("downsampling-mode", "binning") # default: "scaling" + # cam[c].initialControl.setMisc("binning-mode", "sum") # default: "avg" control.out.link(cam[c].inputControl) if rotate[c]: cam[c].setImageOrientation(dai.CameraImageOrientation.ROTATE_180_DEG) From 7856f1071943f673bd2d865efced983baee6e0a5 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 12 May 2023 05:20:20 +0300 Subject: [PATCH 03/47] FW: IMX378/IMX582 manual ISO up to 35000, higher than 3200 only with misc control: .initialControl.setMisc("manual-exposure-handling", "fast") --- depthai-core | 2 +- utilities/cam_test.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 3a202c711..7dfa8ea2c 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 3a202c711c836344dc2e623d781660cc5ea08788 +Subproject commit 7dfa8ea2c52994ee32b3867ea4210efc09991450 diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 391f1783c..885ab104d 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -202,6 +202,7 @@ def get(self): # cam[c].initialControl.setManualWhiteBalance(4000) # light temperature in K, 1000..12000 # cam[c].initialControl.setMisc("downsampling-mode", "binning") # default: "scaling" # cam[c].initialControl.setMisc("binning-mode", "sum") # default: "avg" + # cam[c].initialControl.setMisc("manual-exposure-handling", "fast") # default: "default" control.out.link(cam[c].inputControl) if rotate[c]: cam[c].setImageOrientation(dai.CameraImageOrientation.ROTATE_180_DEG) From a9d69ae66e8491c9d177be99da6980883e8251a5 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Sat, 27 May 2023 17:00:21 +0300 Subject: [PATCH 04/47] cam_test.py: `-misc`/`--misc-controls` option. FW: IMX586 on-sensor HDR, with: .initialControl.setMisc("hdr-exposure-ratio", 4) # enables HDR when set `> 1`, current options: 2, 4, 8 .initialControl.setMisc("hdr-local-tone-weight", 75) # default 75, range 0..100 --- depthai-core | 2 +- utilities/cam_test.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 7dfa8ea2c..f02126fd6 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 7dfa8ea2c52994ee32b3867ea4210efc09991450 +Subproject commit f02126fd6075cd8210fe009081f1034532cfa7ab diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 885ab104d..db203b0af 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -55,6 +55,8 @@ def socket_type_pair(arg): is_color = True if type in ['c', 'color'] else False return [socket, is_color] +def string_pair(arg): + return arg.split('=') parser = argparse.ArgumentParser() parser.add_argument('-cams', '--cameras', type=socket_type_pair, nargs='+', @@ -78,6 +80,10 @@ def socket_type_pair(arg): help="Make OpenCV windows resizable. Note: may introduce some artifacts") parser.add_argument('-tun', '--camera-tuning', type=Path, help="Path to custom camera tuning database") +parser.add_argument('-misc', '--misc-controls', type=string_pair, nargs='+', + default=[], + help="List of miscellaneous camera controls to set initially, " + "as pairs: key1=value1 key2=value2 ...") parser.add_argument('-d', '--device', default="", type=str, help="Optional MX ID of the device to connect to.") @@ -203,6 +209,10 @@ def get(self): # cam[c].initialControl.setMisc("downsampling-mode", "binning") # default: "scaling" # 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 + for kvPair in args.misc_controls: + cam[c].initialControl.setMisc(*kvPair) control.out.link(cam[c].inputControl) if rotate[c]: cam[c].setImageOrientation(dai.CameraImageOrientation.ROTATE_180_DEG) From 2c3c86e1a8b127f7fa7adb27e6a6aec81f780de1 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 2 Feb 2024 15:39:17 +0200 Subject: [PATCH 05/47] FW: initial IMX678 support (4K). TMP IMX462 enable HCG (high conversion gain) --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 3e08b71c0..378a690d4 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 3e08b71c0498428888e4324d7412e39fdafcf1fc +Subproject commit 378a690d430f98210ddcc6eb2c4f4f110c4ec850 From faa4bd8a140cd7daecf87081f32e6cbe3ecc11fe Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Wed, 7 Feb 2024 05:07:32 +0200 Subject: [PATCH 06/47] Fix build, develop got broken --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 669f06777..13d7ae5b8 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 669f0677738f507f16ae9140a0d7c6e75f6e349f +Subproject commit 13d7ae5b8303b3e7b2c644edffe402282376a25d From 05827b4dfa26bd7df075e119cc3f0b9f3addee3b Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Wed, 7 Feb 2024 09:35:14 +0200 Subject: [PATCH 07/47] FW: "high-conversion-gain" camera misc control for IMX462 and IMX678, enabled by default. Values: 0, 1, can also change during streaming, `H` key with cam_test.py --- depthai-core | 2 +- utilities/cam_test.py | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/depthai-core b/depthai-core index 13d7ae5b8..2595d5690 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 13d7ae5b8303b3e7b2c644edffe402282376a25d +Subproject commit 2595d569055f514153aa38deea3e09b2b47d951c diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 4873c84d7..40c59e56f 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -297,6 +297,7 @@ def prev(self): # 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("high-conversion-gain", 0) # 1 to enable (default on supported sensors) for kvPair in args.misc_controls: cam[c].initialControl.setMisc(*kvPair) control.out.link(cam[c].inputControl) @@ -407,6 +408,7 @@ def exit_cleanly(signum, frame): chroma_denoise = 0 control = 'none' show = args.show_meta + high_conversion_gain = 1 jet_custom = cv2.applyColorMap(np.arange(256, dtype=np.uint8), cv2.COLORMAP_JET) jet_custom[0] = [0, 0, 0] @@ -508,10 +510,17 @@ def exit_cleanly(signum, frame): print("ToF toggling f_mod value to:", f_mod) tofConfig.depthParams.freqModUsed = f_mod tofCfgQueue.send(tofConfig) - elif key == ord('h') and tof: - tofConfig.depthParams.avgPhaseShuffle = not tofConfig.depthParams.avgPhaseShuffle - print("ToF toggling avgPhaseShuffle value to:", tofConfig.depthParams.avgPhaseShuffle) - tofCfgQueue.send(tofConfig) + elif key == ord('h'): + if tof: + tofConfig.depthParams.avgPhaseShuffle = not tofConfig.depthParams.avgPhaseShuffle + print("ToF toggling avgPhaseShuffle value to:", tofConfig.depthParams.avgPhaseShuffle) + tofCfgQueue.send(tofConfig) + else: + high_conversion_gain = 1 - high_conversion_gain + print("High conversion gain:", high_conversion_gain) + ctrl = dai.CameraControl() + ctrl.setMisc("high-conversion-gain", high_conversion_gain) + controlQueue.send(ctrl) elif key == ord('t'): print("Autofocus trigger (and disable continuous)") ctrl = dai.CameraControl() From 2d8fabc4caeff23d71ad941a02821ddb646a78a5 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Thu, 8 Feb 2024 13:10:01 +0200 Subject: [PATCH 08/47] FW: initial support for IMX715, 4lane, 4K, max FPS 9.7 for now --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 2595d5690..198c6bc26 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 2595d569055f514153aa38deea3e09b2b47d951c +Subproject commit 198c6bc26c8e77acb247065646cb7ba370f41733 From 74f0144831d643da9b103a3717ab0479f3dfabc9 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Fri, 9 Feb 2024 20:46:35 +0200 Subject: [PATCH 09/47] FW: IMX678 binning option (1080p, 60fps), IMX582 HDR: - better config for 10fps HDR - runtime configurable hdr-exposure-ratio (1,2,4,8), hdr-local-tone-weight (0..1, float normalized) cam_test.py `R` and `G` keys to select HDR controls, then change with `-_` `+=` --- depthai-core | 2 +- utilities/cam_test.py | 44 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/depthai-core b/depthai-core index 198c6bc26..ffd129f6e 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 198c6bc26c8e77acb247065646cb7ba370f41733 +Subproject commit ffd129f6ea889ca3408d47489fa4aa78619ccc6a diff --git a/utilities/cam_test.py b/utilities/cam_test.py index 40c59e56f..c2d14253d 100755 --- a/utilities/cam_test.py +++ b/utilities/cam_test.py @@ -49,7 +49,7 @@ from pathlib import Path import sys import signal - +import math def socket_type_pair(arg): socket, type = arg.split(',') @@ -409,6 +409,12 @@ def exit_cleanly(signum, frame): 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) jet_custom[0] = [0, 0, 0] @@ -505,11 +511,18 @@ def exit_cleanly(signum, frame): elif key == ord('c'): capture_list = streams.copy() capture_time = time.strftime('%Y%m%d_%H%M%S') - elif key == ord('g') and tof: - f_mod = dai.RawToFConfig.DepthParams.TypeFMod.MAX if tofConfig.depthParams.freqModUsed == dai.RawToFConfig.DepthParams.TypeFMod.MIN else dai.RawToFConfig.DepthParams.TypeFMod.MIN - print("ToF toggling f_mod value to:", f_mod) - tofConfig.depthParams.freqModUsed = f_mod - tofCfgQueue.send(tofConfig) + elif key == ord('g'): + if tof: + f_mod = dai.RawToFConfig.DepthParams.TypeFMod.MAX if tofConfig.depthParams.freqModUsed == dai.RawToFConfig.DepthParams.TypeFMod.MIN else dai.RawToFConfig.DepthParams.TypeFMod.MIN + print("ToF toggling f_mod value to:", f_mod) + tofConfig.depthParams.freqModUsed = f_mod + tofCfgQueue.send(tofConfig) + else: + if hdr_on: + control = 'hdr_local_tone_weight' + print("Selected control:", control) + else: + print("HDR was not enabled, start with `-misc hdr-exposure-ratio=2` or higher to enable") elif key == ord('h'): if tof: tofConfig.depthParams.avgPhaseShuffle = not tofConfig.depthParams.avgPhaseShuffle @@ -599,7 +612,7 @@ def exit_cleanly(signum, frame): floodIntensity = 0 device.setIrFloodLightIntensity(floodIntensity) print(f'IR Flood intensity:', floodIntensity) - elif key >= 0 and chr(key) in '34567890[]p\\;\'': + elif key >= 0 and chr(key) in '34567890[]p\\;\'r': if key == ord('3'): control = 'awb_mode' elif key == ord('4'): @@ -628,6 +641,11 @@ def exit_cleanly(signum, frame): control = 'chroma_denoise' elif key == ord('p'): control = 'tof_amplitude_min' + elif key == ord('r'): + if hdr_on: + control = 'hdr_exp_ratio' + else: + print("HDR was not enabled, start with `-misc hdr-exposure-ratio=2` or higher to enable") print("Selected control:", control) elif key in [ord('-'), ord('_'), ord('+'), ord('=')]: change = 0 @@ -637,7 +655,7 @@ def exit_cleanly(signum, frame): change = 1 ctrl = dai.CameraControl() if control == 'none': - print("Please select a control first using keys 3..9 0 [ ] \\ ; \'") + print("Please select a control first using keys 3..9 0 [ ] \\ ; \' r g p") elif control == 'ae_comp': ae_comp = clamp(ae_comp + change, -9, 9) print("Auto exposure compensation:", ae_comp) @@ -690,6 +708,16 @@ def exit_cleanly(signum, frame): chroma_denoise = clamp(chroma_denoise + change, 0, 4) print("Chroma denoise:", chroma_denoise) ctrl.setChromaDenoise(chroma_denoise) + 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) + ctrl.setMisc("hdr-exposure-ratio", value) + elif control == 'hdr_local_tone_weight': + hdr_local_tone_weight = clamp(hdr_local_tone_weight + change, 0, 32) + value = hdr_local_tone_weight / 32 + print(f"HDR local tone weight (normalized): {value:.2f}") + ctrl.setMisc("hdr-local-tone-weight", value) elif control == 'tof_amplitude_min' and tof: amp_min = clamp(tofConfig.depthParams.minimumAmplitude + change, 0, 50) print("Setting min amplitude(confidence) to:", amp_min) From 596d3b1587998d82f0b2417b4036c80324d905c5 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Fri, 10 May 2024 19:53:34 +0300 Subject: [PATCH 10/47] Add runtime stereo calib reconfig --- depthai-core | 2 +- src/DeviceBindings.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 0bcd3094c..cbbe8661a 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 0bcd3094cd2c222fd94b725ba130178becebafdf +Subproject commit cbbe8661a9df2941946192f56a1bbcb03c984239 diff --git a/src/DeviceBindings.cpp b/src/DeviceBindings.cpp index b92831cf3..d41a55948 100644 --- a/src/DeviceBindings.cpp +++ b/src/DeviceBindings.cpp @@ -636,6 +636,7 @@ void DeviceBindings::bind(pybind11::module& m, void* pCallstack){ .def("getProfilingData", [](DeviceBase& d) { py::gil_scoped_release release; return d.getProfilingData(); }, DOC(dai, DeviceBase, getProfilingData)) .def("readCalibration", [](DeviceBase& d) { py::gil_scoped_release release; return d.readCalibration(); }, DOC(dai, DeviceBase, readCalibration)) .def("flashCalibration", [](DeviceBase& d, CalibrationHandler calibrationDataHandler) { py::gil_scoped_release release; return d.flashCalibration(calibrationDataHandler); }, py::arg("calibrationDataHandler"), DOC(dai, DeviceBase, flashCalibration)) + .def("setCalibration", [](DeviceBase& d, CalibrationHandler calibrationDataHandler) { py::gil_scoped_release release; return d.setCalibration(calibrationDataHandler); }, py::arg("calibrationDataHandler"), DOC(dai, DeviceBase, setCalibration)) .def("setXLinkChunkSize", [](DeviceBase& d, int s) { py::gil_scoped_release release; d.setXLinkChunkSize(s); }, py::arg("sizeBytes"), DOC(dai, DeviceBase, setXLinkChunkSize)) .def("getXLinkChunkSize", [](DeviceBase& d) { py::gil_scoped_release release; return d.getXLinkChunkSize(); }, DOC(dai, DeviceBase, getXLinkChunkSize)) .def("setIrLaserDotProjectorBrightness", [](DeviceBase& d, float mA, int mask) { From ee22f223aec6358aee278755486899558921c57d Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 4 Jun 2024 12:22:10 +0300 Subject: [PATCH 11/47] Add getCalibration bindings --- depthai-core | 2 +- src/DeviceBindings.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index cbbe8661a..900aeb32a 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit cbbe8661a9df2941946192f56a1bbcb03c984239 +Subproject commit 900aeb32a2273a4624a62535c4713ec0ad335f59 diff --git a/src/DeviceBindings.cpp b/src/DeviceBindings.cpp index d41a55948..bc8545132 100644 --- a/src/DeviceBindings.cpp +++ b/src/DeviceBindings.cpp @@ -637,6 +637,7 @@ void DeviceBindings::bind(pybind11::module& m, void* pCallstack){ .def("readCalibration", [](DeviceBase& d) { py::gil_scoped_release release; return d.readCalibration(); }, DOC(dai, DeviceBase, readCalibration)) .def("flashCalibration", [](DeviceBase& d, CalibrationHandler calibrationDataHandler) { py::gil_scoped_release release; return d.flashCalibration(calibrationDataHandler); }, py::arg("calibrationDataHandler"), DOC(dai, DeviceBase, flashCalibration)) .def("setCalibration", [](DeviceBase& d, CalibrationHandler calibrationDataHandler) { py::gil_scoped_release release; return d.setCalibration(calibrationDataHandler); }, py::arg("calibrationDataHandler"), DOC(dai, DeviceBase, setCalibration)) + .def("getCalibration", [](DeviceBase& d) { py::gil_scoped_release release; return d.getCalibration(); }, DOC(dai, DeviceBase, getCalibration)) .def("setXLinkChunkSize", [](DeviceBase& d, int s) { py::gil_scoped_release release; d.setXLinkChunkSize(s); }, py::arg("sizeBytes"), DOC(dai, DeviceBase, setXLinkChunkSize)) .def("getXLinkChunkSize", [](DeviceBase& d) { py::gil_scoped_release release; return d.getXLinkChunkSize(); }, DOC(dai, DeviceBase, getXLinkChunkSize)) .def("setIrLaserDotProjectorBrightness", [](DeviceBase& d, float mA, int mask) { From 31b0fab6ba46f40681128a02ce61705512a6fc5c Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 4 Jun 2024 12:50:42 +0300 Subject: [PATCH 12/47] Add runtime calib update example for stereo --- depthai-core | 2 +- .../stereo_runtime_calibration_update.py | 81 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100755 examples/StereoDepth/stereo_runtime_calibration_update.py diff --git a/depthai-core b/depthai-core index 900aeb32a..79ec49be4 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 900aeb32a2273a4624a62535c4713ec0ad335f59 +Subproject commit 79ec49be42ab2580f8ab3a16f35c3cad3303e4f2 diff --git a/examples/StereoDepth/stereo_runtime_calibration_update.py b/examples/StereoDepth/stereo_runtime_calibration_update.py new file mode 100755 index 000000000..0c2ace0e3 --- /dev/null +++ b/examples/StereoDepth/stereo_runtime_calibration_update.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +import cv2 +import depthai as dai +import numpy as np + +# Create pipeline +pipeline = dai.Pipeline() + +# Define sources and outputs +monoLeft = pipeline.create(dai.node.MonoCamera) +monoRight = pipeline.create(dai.node.MonoCamera) +stereo = pipeline.create(dai.node.StereoDepth) +xout = pipeline.create(dai.node.XLinkOut) +xoutLeft = pipeline.create(dai.node.XLinkOut) + +xout.setStreamName("disparity") +xoutLeft.setStreamName("left") + +# Properties +monoLeft.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P) +monoLeft.setCamera("left") +monoRight.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P) +monoRight.setCamera("right") + +stereo.enableDistortionCorrection(True) + +# Linking +monoLeft.out.link(stereo.left) +monoRight.out.link(stereo.right) +stereo.disparity.link(xout.input) +stereo.rectifiedLeft.link(xoutLeft.input) + +cvColorMap = cv2.applyColorMap(np.arange(256, dtype=np.uint8), cv2.COLORMAP_JET) +cvColorMap[0] = [0, 0, 0] + +# Connect to device and start pipeline +with dai.Device(pipeline) as device: + + try: + calibration = device.readCalibration() + except: + print("Device is not calibrated!") + exit() + + # Output queue will be used to get the disparity frames from the outputs defined above + q = device.getOutputQueue(name="disparity", maxSize=4, blocking=False) + qLeft = device.getOutputQueue(name="left", maxSize=4, blocking=False) + + while True: + inDisparity = q.get() # blocking call, will wait until a new data has arrived + frame = inDisparity.getFrame() + # Normalization for better visualization + frame = (frame * (255 / stereo.initialConfig.getMaxDisparity())).astype(np.uint8) + + cv2.imshow("disparity", frame) + + frame = cv2.applyColorMap(frame, cvColorMap) + cv2.imshow("disparity_color", frame) + + inLeft = qLeft.get() + frame = inLeft.getCvFrame() + cv2.imshow("rectified left", frame) + + key = cv2.waitKey(1) + if key == ord('q'): + break + elif key == ord('u'): + randomDistortionCoeffs = np.random.rand(14) + calibration.setDistortionCoefficients(dai.CameraBoardSocket.LEFT, randomDistortionCoeffs) + try: + device.setCalibration(calibration) + except: + print("Failed to update calibration!") + try: + updatedCalib = device.getCalibration() + distortionCoeffs = updatedCalib.getDistortionCoefficients(dai.CameraBoardSocket.LEFT) + print("Updated distortion coefficients: ", distortionCoeffs) + except: + pass + From 60f7c575b6a3d37610a66270f6e3faf556e63615 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Tue, 20 Aug 2024 02:02:01 +0300 Subject: [PATCH 13/47] FW: AR0234 tuning increase max exposure: 33 -> 890 ms --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 12158a516..dc03563e1 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 12158a5166e0162ee94ae7a86aaac48eafd2a15f +Subproject commit dc03563e1d3de072390bdf30a127a99be99f3f6f From 76294530fd0bf91b09469490a1d14871c374630a Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Thu, 22 Aug 2024 04:05:11 +0300 Subject: [PATCH 14/47] FW: fix ToF EEPROM reading for certain FFC camera permutations --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index dc03563e1..c17a80e31 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit dc03563e1d3de072390bdf30a127a99be99f3f6f +Subproject commit c17a80e3102aae7896d58e3a47aec7a38eef15ab From bff906dec182ce16ec61cc83972640b46de85d07 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Mon, 26 Aug 2024 14:57:06 +0300 Subject: [PATCH 15/47] FW: update after merge, add "3a-follow" misc control: ``` cam["cama"].initialControl.setMisc("3a-follow", dai.CameraBoardSocket.CAM_A) cam["camb"].initialControl.setMisc("3a-follow", dai.CameraBoardSocket.CAM_B) ``` generic fast manual exposure (for all sensors) --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 694710ee1..73a77d44a 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 694710ee104680ffa662c3d17221dc4f49ae45ae +Subproject commit 73a77d44abe99e67585408e29d79a241d2dd213b From 21bea7e99077e61d76b0dfd50aadd9e5f7b1f9d5 Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Mon, 23 Sep 2024 15:56:59 +0300 Subject: [PATCH 16/47] FW: update after merge. Also fix colors for IMX378 THE_1352X1012 with rotation --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 73a77d44a..9b2725fe1 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 73a77d44abe99e67585408e29d79a241d2dd213b +Subproject commit 9b2725fe18c41ef6e32fa69f5a6cd32dc5bfec71 From 65f306b2eedc727c7b46fedc1a25940e80f22ae9 Mon Sep 17 00:00:00 2001 From: jakaskerl <53253318+jakaskerl@users.noreply.github.com> Date: Mon, 23 Sep 2024 18:06:22 +0200 Subject: [PATCH 17/47] Remove Ubuntu:18.04 from OS tests Ubuntu 18.04 EOL - https://ubuntu.com/about/release-cycle --- .github/workflows/test-install-dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-install-dependencies.yml b/.github/workflows/test-install-dependencies.yml index fd8f6d84b..aa036a898 100644 --- a/.github/workflows/test-install-dependencies.yml +++ b/.github/workflows/test-install-dependencies.yml @@ -16,7 +16,7 @@ runs-on: ubuntu-latest strategy: matrix: - container_image: ["fedora:34", "fedora:35", "fedora:36", "ubuntu:18.04", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:rolling"] + container_image: ["fedora:34", "fedora:35", "fedora:36", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:rolling"] container: image: ${{ matrix.container_image }} steps: From 6de68e6b31975de9ca01cbe581c8d03a5d3dc9e5 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Wed, 25 Sep 2024 15:23:50 +0300 Subject: [PATCH 18/47] CrashDump: disable on shutdown --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 9b2725fe1..727981605 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 9b2725fe18c41ef6e32fa69f5a6cd32dc5bfec71 +Subproject commit 727981605e92bdb62f5780259c98475ba333d36c From 572492e8bbbbdfe67a0e935bcae75d9d03f43cba Mon Sep 17 00:00:00 2001 From: alex-luxonis Date: Thu, 26 Sep 2024 01:09:02 +0300 Subject: [PATCH 19/47] FW: misc controls for multi-ToF staggering: frame-sync-id, frame-sync-delay-us --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 727981605..2e824de00 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 727981605e92bdb62f5780259c98475ba333d36c +Subproject commit 2e824de00f76478034f797877ef4bf344f8809e9 From 6a3b60b7dcdbf17e032c44466c626c5df5a7aec1 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Thu, 26 Sep 2024 14:53:00 +0300 Subject: [PATCH 20/47] Update examples with python shebang and executable permission --- examples/Camera/camera_undistort.py | 2 ++ examples/Camera/thermal_cam.py | 2 ++ examples/Cast/cast_blur.py | 2 ++ examples/Cast/cast_concat.py | 2 ++ examples/Cast/cast_diff.py | 2 ++ examples/ColorCamera/rgb_scene.py | 2 ++ examples/ColorCamera/rgb_undistort.py | 2 ++ examples/CrashReport/capture_diagnostic.py | 2 ++ examples/FeatureTracker/feature_motion_estimation.py | 2 ++ examples/ImageAlign/depth_align.py | 2 ++ examples/ImageAlign/image_align.py | 2 ++ examples/ImageAlign/thermal_align.py | 2 ++ examples/ImageAlign/tof_align.py | 2 ++ examples/NeuralNetwork/thermal_nnet.py | 2 ++ examples/PointCloud/pointcloud_control.py | 2 ++ examples/PointCloud/visualize_pointcloud.py | 2 ++ examples/Script/script_emmc_access.py | 2 ++ examples/Script/script_read_calibration.py | 0 examples/Script/script_uart.py | 0 examples/StereoDepth/stereo_depth_custom_mesh.py | 0 examples/StereoDepth/stereo_runtime_calibration_update.py | 2 ++ examples/Sync/demux_message_group.py | 0 examples/Sync/depth_video_synced.py | 0 examples/Sync/imu_video_synced.py | 0 examples/Sync/sync_scripts.py | 0 examples/ToF/tof_depth.py | 0 examples/UVC/uvc_disparity.py | 0 examples/UVC/uvc_mono.py | 0 examples/device/device_all_boot_bootloader.py | 2 ++ examples/device/device_boot_non_exclusive.py | 2 ++ examples/mixed/collision_avoidance.py | 2 ++ 31 files changed, 42 insertions(+) mode change 100644 => 100755 examples/Camera/camera_undistort.py mode change 100644 => 100755 examples/Camera/thermal_cam.py mode change 100644 => 100755 examples/Cast/cast_blur.py mode change 100644 => 100755 examples/Cast/cast_concat.py mode change 100644 => 100755 examples/Cast/cast_diff.py mode change 100644 => 100755 examples/CrashReport/capture_diagnostic.py mode change 100644 => 100755 examples/FeatureTracker/feature_motion_estimation.py mode change 100644 => 100755 examples/ImageAlign/depth_align.py mode change 100644 => 100755 examples/ImageAlign/image_align.py mode change 100644 => 100755 examples/ImageAlign/thermal_align.py mode change 100644 => 100755 examples/ImageAlign/tof_align.py mode change 100644 => 100755 examples/NeuralNetwork/thermal_nnet.py mode change 100644 => 100755 examples/PointCloud/pointcloud_control.py mode change 100644 => 100755 examples/PointCloud/visualize_pointcloud.py mode change 100644 => 100755 examples/Script/script_emmc_access.py mode change 100644 => 100755 examples/Script/script_read_calibration.py mode change 100644 => 100755 examples/Script/script_uart.py mode change 100644 => 100755 examples/StereoDepth/stereo_depth_custom_mesh.py mode change 100644 => 100755 examples/Sync/demux_message_group.py mode change 100644 => 100755 examples/Sync/depth_video_synced.py mode change 100644 => 100755 examples/Sync/imu_video_synced.py mode change 100644 => 100755 examples/Sync/sync_scripts.py mode change 100644 => 100755 examples/ToF/tof_depth.py mode change 100644 => 100755 examples/UVC/uvc_disparity.py mode change 100644 => 100755 examples/UVC/uvc_mono.py mode change 100644 => 100755 examples/mixed/collision_avoidance.py diff --git a/examples/Camera/camera_undistort.py b/examples/Camera/camera_undistort.py old mode 100644 new mode 100755 index 0d78f1d9e..965d3cef0 --- a/examples/Camera/camera_undistort.py +++ b/examples/Camera/camera_undistort.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import cv2 diff --git a/examples/Camera/thermal_cam.py b/examples/Camera/thermal_cam.py old mode 100644 new mode 100755 index 51a6d62ef..d6f7384ce --- a/examples/Camera/thermal_cam.py +++ b/examples/Camera/thermal_cam.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import cv2 import numpy as np diff --git a/examples/Cast/cast_blur.py b/examples/Cast/cast_blur.py old mode 100644 new mode 100755 index 733a491dd..68c988e46 --- a/examples/Cast/cast_blur.py +++ b/examples/Cast/cast_blur.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import cv2 from pathlib import Path diff --git a/examples/Cast/cast_concat.py b/examples/Cast/cast_concat.py old mode 100644 new mode 100755 index e4e3bcbb8..decbb5b08 --- a/examples/Cast/cast_concat.py +++ b/examples/Cast/cast_concat.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import numpy as np import cv2 import depthai as dai diff --git a/examples/Cast/cast_diff.py b/examples/Cast/cast_diff.py old mode 100644 new mode 100755 index aaaaf750d..471f05fea --- a/examples/Cast/cast_diff.py +++ b/examples/Cast/cast_diff.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import cv2 import depthai as dai from pathlib import Path diff --git a/examples/ColorCamera/rgb_scene.py b/examples/ColorCamera/rgb_scene.py index 7bd550b1d..1815b7db7 100755 --- a/examples/ColorCamera/rgb_scene.py +++ b/examples/ColorCamera/rgb_scene.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import cv2 import depthai as dai from itertools import cycle diff --git a/examples/ColorCamera/rgb_undistort.py b/examples/ColorCamera/rgb_undistort.py index 97e71b184..f617f180f 100755 --- a/examples/ColorCamera/rgb_undistort.py +++ b/examples/ColorCamera/rgb_undistort.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import cv2 import depthai as dai import numpy as np diff --git a/examples/CrashReport/capture_diagnostic.py b/examples/CrashReport/capture_diagnostic.py old mode 100644 new mode 100755 index 5962406f0..363d40e4c --- a/examples/CrashReport/capture_diagnostic.py +++ b/examples/CrashReport/capture_diagnostic.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import zipfile from json import dump, JSONEncoder diff --git a/examples/FeatureTracker/feature_motion_estimation.py b/examples/FeatureTracker/feature_motion_estimation.py old mode 100644 new mode 100755 index ae0162f9c..efbdfc24f --- a/examples/FeatureTracker/feature_motion_estimation.py +++ b/examples/FeatureTracker/feature_motion_estimation.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import numpy as np import cv2 from collections import deque diff --git a/examples/ImageAlign/depth_align.py b/examples/ImageAlign/depth_align.py old mode 100644 new mode 100755 index 9e13fcf58..dddfab913 --- a/examples/ImageAlign/depth_align.py +++ b/examples/ImageAlign/depth_align.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import numpy as np import cv2 import depthai as dai diff --git a/examples/ImageAlign/image_align.py b/examples/ImageAlign/image_align.py old mode 100644 new mode 100755 index 2d257e61b..c3c08ad0f --- a/examples/ImageAlign/image_align.py +++ b/examples/ImageAlign/image_align.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import cv2 import depthai as dai from datetime import timedelta diff --git a/examples/ImageAlign/thermal_align.py b/examples/ImageAlign/thermal_align.py old mode 100644 new mode 100755 index c353f2e9a..f4523e424 --- a/examples/ImageAlign/thermal_align.py +++ b/examples/ImageAlign/thermal_align.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import cv2 import depthai as dai import numpy as np diff --git a/examples/ImageAlign/tof_align.py b/examples/ImageAlign/tof_align.py old mode 100644 new mode 100755 index e4d0664be..d9ec664ac --- a/examples/ImageAlign/tof_align.py +++ b/examples/ImageAlign/tof_align.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import numpy as np import cv2 import depthai as dai diff --git a/examples/NeuralNetwork/thermal_nnet.py b/examples/NeuralNetwork/thermal_nnet.py old mode 100644 new mode 100755 index bdca65c5d..5293f37d5 --- a/examples/NeuralNetwork/thermal_nnet.py +++ b/examples/NeuralNetwork/thermal_nnet.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import cv2 from pathlib import Path diff --git a/examples/PointCloud/pointcloud_control.py b/examples/PointCloud/pointcloud_control.py old mode 100644 new mode 100755 index 6ebe5b9a5..c03154223 --- a/examples/PointCloud/pointcloud_control.py +++ b/examples/PointCloud/pointcloud_control.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import numpy as np import cv2 diff --git a/examples/PointCloud/visualize_pointcloud.py b/examples/PointCloud/visualize_pointcloud.py old mode 100644 new mode 100755 index 564329e4f..c2655eff9 --- a/examples/PointCloud/visualize_pointcloud.py +++ b/examples/PointCloud/visualize_pointcloud.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai from time import sleep import numpy as np diff --git a/examples/Script/script_emmc_access.py b/examples/Script/script_emmc_access.py old mode 100644 new mode 100755 index a93485976..37d85dd1b --- a/examples/Script/script_emmc_access.py +++ b/examples/Script/script_emmc_access.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import cv2 diff --git a/examples/Script/script_read_calibration.py b/examples/Script/script_read_calibration.py old mode 100644 new mode 100755 diff --git a/examples/Script/script_uart.py b/examples/Script/script_uart.py old mode 100644 new mode 100755 diff --git a/examples/StereoDepth/stereo_depth_custom_mesh.py b/examples/StereoDepth/stereo_depth_custom_mesh.py old mode 100644 new mode 100755 diff --git a/examples/StereoDepth/stereo_runtime_calibration_update.py b/examples/StereoDepth/stereo_runtime_calibration_update.py index 0c2ace0e3..4053336f2 100755 --- a/examples/StereoDepth/stereo_runtime_calibration_update.py +++ b/examples/StereoDepth/stereo_runtime_calibration_update.py @@ -43,6 +43,8 @@ print("Device is not calibrated!") exit() + print("Press 'u' to update distortion coefficients with random values") + # Output queue will be used to get the disparity frames from the outputs defined above q = device.getOutputQueue(name="disparity", maxSize=4, blocking=False) qLeft = device.getOutputQueue(name="left", maxSize=4, blocking=False) diff --git a/examples/Sync/demux_message_group.py b/examples/Sync/demux_message_group.py old mode 100644 new mode 100755 diff --git a/examples/Sync/depth_video_synced.py b/examples/Sync/depth_video_synced.py old mode 100644 new mode 100755 diff --git a/examples/Sync/imu_video_synced.py b/examples/Sync/imu_video_synced.py old mode 100644 new mode 100755 diff --git a/examples/Sync/sync_scripts.py b/examples/Sync/sync_scripts.py old mode 100644 new mode 100755 diff --git a/examples/ToF/tof_depth.py b/examples/ToF/tof_depth.py old mode 100644 new mode 100755 diff --git a/examples/UVC/uvc_disparity.py b/examples/UVC/uvc_disparity.py old mode 100644 new mode 100755 diff --git a/examples/UVC/uvc_mono.py b/examples/UVC/uvc_mono.py old mode 100644 new mode 100755 diff --git a/examples/device/device_all_boot_bootloader.py b/examples/device/device_all_boot_bootloader.py index 4c2e9a56b..4ac04cb4e 100755 --- a/examples/device/device_all_boot_bootloader.py +++ b/examples/device/device_all_boot_bootloader.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai devices = dai.Device.getAllConnectedDevices() diff --git a/examples/device/device_boot_non_exclusive.py b/examples/device/device_boot_non_exclusive.py index 898b292f6..3a89acea7 100755 --- a/examples/device/device_boot_non_exclusive.py +++ b/examples/device/device_boot_non_exclusive.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import time diff --git a/examples/mixed/collision_avoidance.py b/examples/mixed/collision_avoidance.py old mode 100644 new mode 100755 index c5683cb8a..d0df84ba3 --- a/examples/mixed/collision_avoidance.py +++ b/examples/mixed/collision_avoidance.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import depthai as dai import cv2 import numpy as np From f17cfb4eede622be081db8cdf1ecd44b0ea9ea6a Mon Sep 17 00:00:00 2001 From: jakaskerl <53253318+jakaskerl@users.noreply.github.com> Date: Thu, 26 Sep 2024 14:20:58 +0200 Subject: [PATCH 21/47] Add ubuntu24.04 --- .github/workflows/test-install-dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-install-dependencies.yml b/.github/workflows/test-install-dependencies.yml index aa036a898..427b6883b 100644 --- a/.github/workflows/test-install-dependencies.yml +++ b/.github/workflows/test-install-dependencies.yml @@ -16,7 +16,7 @@ runs-on: ubuntu-latest strategy: matrix: - container_image: ["fedora:34", "fedora:35", "fedora:36", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:rolling"] + container_image: ["fedora:34", "fedora:35", "fedora:36", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04", "ubuntu:rolling"] container: image: ${{ matrix.container_image }} steps: From d3b92a92782894b33015d97d435451ff35532d06 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Mon, 30 Sep 2024 12:30:12 +0200 Subject: [PATCH 22/47] Format --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 587821c6f..89e9ee840 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 587821c6f49504ac9de1c220268492b754da2127 +Subproject commit 89e9ee840537f0e041fcd5ce49b6a78dd29002d6 From 118cf0cb9d4d6280aa6bce6e258c47f976fda963 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Thu, 3 Oct 2024 18:30:11 +0300 Subject: [PATCH 23/47] SpeckleFilter: Add differenceThreshold config --- depthai-core | 2 +- src/pipeline/datatype/StereoDepthConfigBindings.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 89e9ee840..15d6a7911 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 89e9ee840537f0e041fcd5ce49b6a78dd29002d6 +Subproject commit 15d6a7911989dbfdf5165c4c0497c55bbfaa2ece diff --git a/src/pipeline/datatype/StereoDepthConfigBindings.cpp b/src/pipeline/datatype/StereoDepthConfigBindings.cpp index 3e202908a..557f55d24 100644 --- a/src/pipeline/datatype/StereoDepthConfigBindings.cpp +++ b/src/pipeline/datatype/StereoDepthConfigBindings.cpp @@ -137,6 +137,7 @@ void bind_stereodepthconfig(pybind11::module& m, void* pCallstack){ .def(py::init<>()) .def_readwrite("enable", &RawStereoDepthConfig::PostProcessing::SpeckleFilter::enable, DOC(dai, RawStereoDepthConfig, PostProcessing, SpeckleFilter, enable)) .def_readwrite("speckleRange", &RawStereoDepthConfig::PostProcessing::SpeckleFilter::speckleRange, DOC(dai, RawStereoDepthConfig, PostProcessing, SpeckleFilter, speckleRange)) + .def_readwrite("differenceThreshold", &RawStereoDepthConfig::PostProcessing::SpeckleFilter::differenceThreshold, DOC(dai, RawStereoDepthConfig, PostProcessing, SpeckleFilter, differenceThreshold)) ; decimationMode From c3af129731ac6175dcf5fd6fcf0b5bdde0ec2139 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Fri, 4 Oct 2024 19:38:54 +0300 Subject: [PATCH 24/47] Implement configurable filtering order --- depthai-core | 2 +- src/pipeline/datatype/StereoDepthConfigBindings.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/depthai-core b/depthai-core index 15d6a7911..76e5cbd15 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 15d6a7911989dbfdf5165c4c0497c55bbfaa2ece +Subproject commit 76e5cbd15309fbdb259267120e38a93c72a65cb2 diff --git a/src/pipeline/datatype/StereoDepthConfigBindings.cpp b/src/pipeline/datatype/StereoDepthConfigBindings.cpp index 557f55d24..2c07e0bf5 100644 --- a/src/pipeline/datatype/StereoDepthConfigBindings.cpp +++ b/src/pipeline/datatype/StereoDepthConfigBindings.cpp @@ -22,6 +22,7 @@ void bind_stereodepthconfig(pybind11::module& m, void* pCallstack){ py::enum_ depthAlign(algorithmControl, "DepthAlign", DOC(dai, RawStereoDepthConfig, AlgorithmControl, DepthAlign)); py::enum_ depthUnit(algorithmControl, "DepthUnit", DOC(dai, RawStereoDepthConfig, AlgorithmControl, DepthUnit)); py::class_ postProcessing(rawStereoDepthConfig, "PostProcessing", DOC(dai, RawStereoDepthConfig, PostProcessing)); + py::enum_ filter(postProcessing, "Filter", DOC(dai, RawStereoDepthConfig, PostProcessing, Filter)); py::class_ spatialFilter(postProcessing, "SpatialFilter", DOC(dai, RawStereoDepthConfig, PostProcessing, SpatialFilter)); py::class_ temporalFilter(postProcessing, "TemporalFilter", DOC(dai, RawStereoDepthConfig, PostProcessing, TemporalFilter)); py::enum_ persistencyMode(temporalFilter, "PersistencyMode", DOC(dai, RawStereoDepthConfig, PostProcessing, TemporalFilter, PersistencyMode)); @@ -51,7 +52,15 @@ void bind_stereodepthconfig(pybind11::module& m, void* pCallstack){ /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// - // Metadata / raw + filter + .value("DECIMATION", RawStereoDepthConfig::PostProcessing::Filter::DECIMATION, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, DECIMATION)) + .value("SPECKLE", RawStereoDepthConfig::PostProcessing::Filter::SPECKLE, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, SPECKLE)) + .value("MEDIAN", RawStereoDepthConfig::PostProcessing::Filter::MEDIAN, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, MEDIAN)) + .value("TEMPORAL", RawStereoDepthConfig::PostProcessing::Filter::TEMPORAL, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, TEMPORAL)) + .value("SPATIAL", RawStereoDepthConfig::PostProcessing::Filter::SPATIAL, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, SPATIAL)) + .value("FILTER_COUNT", RawStereoDepthConfig::PostProcessing::Filter::FILTER_COUNT, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, FILTER_COUNT)) + ; + medianFilter .value("MEDIAN_OFF", MedianFilter::MEDIAN_OFF) .value("KERNEL_3x3", MedianFilter::KERNEL_3x3) @@ -154,6 +163,7 @@ void bind_stereodepthconfig(pybind11::module& m, void* pCallstack){ postProcessing .def(py::init<>()) + .def_readwrite("filteringOrder", &RawStereoDepthConfig::PostProcessing::filteringOrder, DOC(dai, RawStereoDepthConfig, PostProcessing, filteringOrder)) .def_readwrite("median", &RawStereoDepthConfig::PostProcessing::median, DOC(dai, RawStereoDepthConfig, PostProcessing, median)) .def_readwrite("bilateralSigmaValue", &RawStereoDepthConfig::PostProcessing::bilateralSigmaValue, DOC(dai, RawStereoDepthConfig, PostProcessing, bilateralSigmaValue)) .def_readwrite("spatialFilter", &RawStereoDepthConfig::PostProcessing::spatialFilter, DOC(dai, RawStereoDepthConfig, PostProcessing, spatialFilter)) From 9d437e1837147c0bdb366dd5e0fc87e645362972 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Wed, 9 Oct 2024 18:00:43 +0300 Subject: [PATCH 25/47] Stereo: Scale disparity to 13 bit range prior to filtering --- depthai-core | 2 +- src/pipeline/datatype/StereoDepthConfigBindings.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/depthai-core b/depthai-core index 76e5cbd15..7e11d0603 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 76e5cbd15309fbdb259267120e38a93c72a65cb2 +Subproject commit 7e11d0603c7a716d79426051f5d4740fca579069 diff --git a/src/pipeline/datatype/StereoDepthConfigBindings.cpp b/src/pipeline/datatype/StereoDepthConfigBindings.cpp index 2c07e0bf5..3dd024b40 100644 --- a/src/pipeline/datatype/StereoDepthConfigBindings.cpp +++ b/src/pipeline/datatype/StereoDepthConfigBindings.cpp @@ -55,7 +55,6 @@ void bind_stereodepthconfig(pybind11::module& m, void* pCallstack){ filter .value("DECIMATION", RawStereoDepthConfig::PostProcessing::Filter::DECIMATION, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, DECIMATION)) .value("SPECKLE", RawStereoDepthConfig::PostProcessing::Filter::SPECKLE, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, SPECKLE)) - .value("MEDIAN", RawStereoDepthConfig::PostProcessing::Filter::MEDIAN, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, MEDIAN)) .value("TEMPORAL", RawStereoDepthConfig::PostProcessing::Filter::TEMPORAL, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, TEMPORAL)) .value("SPATIAL", RawStereoDepthConfig::PostProcessing::Filter::SPATIAL, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, SPATIAL)) .value("FILTER_COUNT", RawStereoDepthConfig::PostProcessing::Filter::FILTER_COUNT, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, FILTER_COUNT)) From ef571f1412688562f6b9d10d646be222bf77cff2 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Fri, 11 Oct 2024 13:37:05 +0300 Subject: [PATCH 26/47] StereoDepth: postprocessing: handle edge case when post-processing filter is enabled, disparity output disabled, median enabled --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 7e11d0603..bc7c7cc20 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 7e11d0603c7a716d79426051f5d4740fca579069 +Subproject commit bc7c7cc202e16fb8f1b5f89c45679e657929feb0 From 1f1a1e4e7be59ecbe39d73f4c7dbfc2ba0318510 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Thu, 17 Oct 2024 15:21:55 +0300 Subject: [PATCH 27/47] StereoDepth: Add back MedianFilter to filtering order --- depthai-core | 2 +- src/pipeline/datatype/StereoDepthConfigBindings.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index bc7c7cc20..69f7669b4 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit bc7c7cc202e16fb8f1b5f89c45679e657929feb0 +Subproject commit 69f7669b43b1a45777f5e02f203e3ab8e2146d01 diff --git a/src/pipeline/datatype/StereoDepthConfigBindings.cpp b/src/pipeline/datatype/StereoDepthConfigBindings.cpp index 3dd024b40..2c07e0bf5 100644 --- a/src/pipeline/datatype/StereoDepthConfigBindings.cpp +++ b/src/pipeline/datatype/StereoDepthConfigBindings.cpp @@ -55,6 +55,7 @@ void bind_stereodepthconfig(pybind11::module& m, void* pCallstack){ filter .value("DECIMATION", RawStereoDepthConfig::PostProcessing::Filter::DECIMATION, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, DECIMATION)) .value("SPECKLE", RawStereoDepthConfig::PostProcessing::Filter::SPECKLE, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, SPECKLE)) + .value("MEDIAN", RawStereoDepthConfig::PostProcessing::Filter::MEDIAN, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, MEDIAN)) .value("TEMPORAL", RawStereoDepthConfig::PostProcessing::Filter::TEMPORAL, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, TEMPORAL)) .value("SPATIAL", RawStereoDepthConfig::PostProcessing::Filter::SPATIAL, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, SPATIAL)) .value("FILTER_COUNT", RawStereoDepthConfig::PostProcessing::Filter::FILTER_COUNT, DOC(dai, RawStereoDepthConfig, PostProcessing, Filter, FILTER_COUNT)) From 53887f7ef959b2b21d132e70c070c7b618a12089 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Mon, 21 Oct 2024 15:50:41 +0300 Subject: [PATCH 28/47] StereoDepth: add arbitrary filtering order support with scaling --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 69f7669b4..60d84e720 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 69f7669b43b1a45777f5e02f203e3ab8e2146d01 +Subproject commit 60d84e7206e765477d09e0bb8d0b0f7d003581dd From 1740463360b70c60e40dc30f475eac4d1132a842 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 29 Oct 2024 16:55:45 +0200 Subject: [PATCH 29/47] FW: Stereo: issue debug prints once on calibration update event --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 89e9ee840..acafbabf0 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 89e9ee840537f0e041fcd5ce49b6a78dd29002d6 +Subproject commit acafbabf0142de616050e3ecd93e483f942e3ca0 From fe29bdef6acd41b19548533a733e278987a8bfc5 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Thu, 7 Nov 2024 11:47:25 +0200 Subject: [PATCH 30/47] Stereo: Core: add new stereo presets --- depthai-core | 2 +- src/pipeline/node/StereoDepthBindings.cpp | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/depthai-core b/depthai-core index 60d84e720..02f004daa 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 60d84e7206e765477d09e0bb8d0b0f7d003581dd +Subproject commit 02f004daa70d6b0c5f7a00469b81897f3bb6ccea diff --git a/src/pipeline/node/StereoDepthBindings.cpp b/src/pipeline/node/StereoDepthBindings.cpp index 674a591a7..138c214cf 100644 --- a/src/pipeline/node/StereoDepthBindings.cpp +++ b/src/pipeline/node/StereoDepthBindings.cpp @@ -64,8 +64,27 @@ void bind_stereodepth(pybind11::module& m, void* pCallstack){ ; stereoDepthPresetMode - .value("HIGH_ACCURACY", StereoDepth::PresetMode::HIGH_ACCURACY, DOC(dai, node, StereoDepth, PresetMode, HIGH_ACCURACY)) - .value("HIGH_DENSITY", StereoDepth::PresetMode::HIGH_DENSITY, DOC(dai, node, StereoDepth, PresetMode, HIGH_DENSITY)) + .value("HIGH_ACCURACY", StereoDepth::PresetMode::HIGH_ACCURACY, "**Deprecated:** Will be removed in future releases and replaced with DEFAULT") + .value("HIGH_DENSITY", StereoDepth::PresetMode::HIGH_DENSITY, "**Deprecated:** Will be removed in future releases and replaced with DEFAULT") + + .value("DEFAULT", StereoDepth::PresetMode::DEFAULT) + .value("FACE", StereoDepth::PresetMode::FACE) + .value("HIGH_DETAIL", StereoDepth::PresetMode::HIGH_DETAIL) + .value("HIGH_FPS", StereoDepth::PresetMode::HIGH_FPS) + .value("HIGH_ACCURACY2", StereoDepth::PresetMode::HIGH_ACCURACY2) + .value("ROBOTICS", StereoDepth::PresetMode::ROBOTICS) + + // Deprecated overriden + .def_property_readonly_static("HIGH_ACCURACY", [](py::object){ + PyErr_WarnEx(PyExc_DeprecationWarning, "HIGH_ACCURACY is deprecated, will be removed in future releases and replaced with DEFAULT.", 1); + return StereoDepth::PresetMode::HIGH_ACCURACY; + }) + + .def_property_readonly_static("HIGH_DENSITY", [](py::object){ + PyErr_WarnEx(PyExc_DeprecationWarning, "HIGH_DENSITY is deprecated, will be removed in future releases and replaced with DEFAULT.", 1); + return StereoDepth::PresetMode::HIGH_DENSITY; + }) + ; // Node From 872b74c1019fbdd9292101ddba878b5ed18f013b Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Fri, 8 Nov 2024 15:55:25 +0200 Subject: [PATCH 31/47] Update core to latest develop --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 02f004daa..b0b4d4918 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 02f004daa70d6b0c5f7a00469b81897f3bb6ccea +Subproject commit b0b4d4918d1ff68521b1499bc5fa69f84b3c16b6 From 5afbbc357b90ca63a53b63d72eddbd447d667994 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Sat, 9 Nov 2024 19:23:32 +0100 Subject: [PATCH 32/47] Add Python3.13 to the CI --- .github/workflows/main.yml | 8 ++++---- setup.py | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 059a5d37e..9f78edd3b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -188,7 +188,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, '3.10', '3.11', '3.12'] + python-version: [3.7, 3.8, 3.9, '3.10', '3.11', '3.12', '3.13'] python-architecture: [x64, x86] fail-fast: false steps: @@ -244,7 +244,7 @@ jobs: needs: build-docstrings strategy: matrix: - python-version: [3.8, 3.9, '3.10', '3.11', '3.12'] + python-version: [3.8, 3.9, '3.10', '3.11', '3.12', '3.13'] os: [macos-13, macos-14] # macos-13 is x64, macos-14 is arm64 runs-on: ${{ matrix.os }} steps: @@ -352,7 +352,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..12}*/bin; do "${PYBIN}/pip" wheel . -w ./wheelhouse/ --verbose; done + run: for PYBIN in /opt/python/cp3{7..13}*/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 @@ -413,7 +413,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..12}*/bin; do "${PYBIN}/pip" wheel . -w ./wheelhouse/ --verbose; done + run: for PYBIN in /opt/python/cp3{7..13}*/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/setup.py b/setup.py index f9ebe5167..596c31c39 100644 --- a/setup.py +++ b/setup.py @@ -244,6 +244,7 @@ def build_extension(self, ext): "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: C++", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering", From d72e1522b8914d9f03a574cd03f6c264a711b103 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Mon, 11 Nov 2024 00:40:10 +0100 Subject: [PATCH 33/47] 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 b0b4d4918..93a537d1e 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit b0b4d4918d1ff68521b1499bc5fa69f84b3c16b6 +Subproject commit 93a537d1e5857dd820cad845b893e83bdd6c8ead From 0c3d39d29a3e033b1846f79f8cf308d88174866e Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Mon, 11 Nov 2024 18:38:33 +0200 Subject: [PATCH 34/47] Stereo: PostProcessing: Handle edge case --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index b0b4d4918..898f086e4 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit b0b4d4918d1ff68521b1499bc5fa69f84b3c16b6 +Subproject commit 898f086e476ba9f0385b9ca968a51fbfc3f1eff6 From fdee2812e3b0c1aa6abc626b71a49594889069c7 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Mon, 11 Nov 2024 19:03:10 +0100 Subject: [PATCH 35/47] Update core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 93a537d1e..ccbfbc18b 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 93a537d1e5857dd820cad845b893e83bdd6c8ead +Subproject commit ccbfbc18bd160ddcb619aee09c176a4dff5b6c9b From cefc2b35d65746ae263ec882465dca42fd69e0f9 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 12 Nov 2024 06:31:11 +0200 Subject: [PATCH 36/47] Stereo: PostProcess: Fix edge case when decimation is before median --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 898f086e4..36d374390 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 898f086e476ba9f0385b9ca968a51fbfc3f1eff6 +Subproject commit 36d37439048d7c616db92309cc6df6c28d8fae34 From 7a3d64d581b20d3d5bc6522642f4295a9edb8622 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Tue, 12 Nov 2024 13:13:24 +0200 Subject: [PATCH 37/47] StereoDepth: update getMaxDisparity --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 36d374390..fe5b1fb9f 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 36d37439048d7c616db92309cc6df6c28d8fae34 +Subproject commit fe5b1fb9f17432aa2f68d5ff638b4abe105401ec From c64d0de7b18c47302fb93753028552d1460a14ff Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Tue, 12 Nov 2024 12:30:03 +0100 Subject: [PATCH 38/47] Update core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index ccbfbc18b..869d0eef7 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit ccbfbc18bd160ddcb619aee09c176a4dff5b6c9b +Subproject commit 869d0eef7055b150cdc094905b29243598976f97 From e17221e21048e0f2e7929e3ffc005ef5176b99c9 Mon Sep 17 00:00:00 2001 From: asahtik Date: Thu, 14 Nov 2024 14:46:06 +0100 Subject: [PATCH 39/47] Added width and height to EncodedFrame --- depthai-core | 2 +- src/pipeline/datatype/EncodedFrameBindings.cpp | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/depthai-core b/depthai-core index 869d0eef7..0a65ae480 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 869d0eef7055b150cdc094905b29243598976f97 +Subproject commit 0a65ae48093e8128a34abd689124b415147886e3 diff --git a/src/pipeline/datatype/EncodedFrameBindings.cpp b/src/pipeline/datatype/EncodedFrameBindings.cpp index 546fb93eb..912c51848 100644 --- a/src/pipeline/datatype/EncodedFrameBindings.cpp +++ b/src/pipeline/datatype/EncodedFrameBindings.cpp @@ -46,6 +46,8 @@ void bind_encodedframe(pybind11::module &m, void *pCallstack) { .def_readwrite("lossless", &RawEncodedFrame::lossless) .def_readwrite("type", &RawEncodedFrame::type) .def_readwrite("instanceNum", &RawEncodedFrame::instanceNum) + .def_readwrite("width", &RawEncodedFrame::width) + .def_readwrite("height", &RawEncodedFrame::height) .def_readwrite("sequenceNum", &RawEncodedFrame::sequenceNum) .def_property( "ts", @@ -85,10 +87,15 @@ void bind_encodedframe(pybind11::module &m, void *pCallstack) { py::overload_cast<>(&EncodedFrame::Buffer::getTimestamp, py::const_), DOC(dai, Buffer, getTimestamp)) .def("getTimestampDevice", - py::overload_cast<>(&EncodedFrame::Buffer::getTimestampDevice, py::const_), + py::overload_cast<>(&EncodedFrame::Buffer::getTimestampDevice, + py::const_), DOC(dai, Buffer, getTimestampDevice)) .def("getInstanceNum", &EncodedFrame::getInstanceNum, DOC(dai, EncodedFrame, getInstanceNum)) + .def("getWidth", &EncodedFrame::getWidth, + DOC(dai, EncodedFrame, getWidth)) + .def("getHeight", &EncodedFrame::getHeight, + DOC(dai, EncodedFrame, getHeight)) .def("getSequenceNum", &EncodedFrame::Buffer::getSequenceNum, DOC(dai, Buffer, getSequenceNum)) .def("getExposureTime", &EncodedFrame::getExposureTime, @@ -99,7 +106,7 @@ void bind_encodedframe(pybind11::module &m, void *pCallstack) { DOC(dai, EncodedFrame, getColorTemperature)) .def("getLensPosition", &EncodedFrame::getLensPosition, DOC(dai, EncodedFrame, getLensPosition)) - .def("getLensPositionRaw", &EncodedFrame::getLensPositionRaw, + .def("getLensPositionRaw", &EncodedFrame::getLensPositionRaw, DOC(dai, EncodedFrame, getLensPositionRaw)) .def("getQuality", &EncodedFrame::getQuality, DOC(dai, EncodedFrame, getQuality)) @@ -119,6 +126,10 @@ void bind_encodedframe(pybind11::module &m, void *pCallstack) { DOC(dai, EncodedFrame, setTimestampDevice)) .def("setSequenceNum", &EncodedFrame::setSequenceNum, DOC(dai, EncodedFrame, setSequenceNum)) + .def("setWidth", &EncodedFrame::setWidth, + DOC(dai, EncodedFrame, setWidth)) + .def("setHeight", &EncodedFrame::setHeight, + DOC(dai, EncodedFrame, setHeight)) .def("setQuality", &EncodedFrame::setQuality, DOC(dai, EncodedFrame, getQuality)) .def("setBitrate", &EncodedFrame::setBitrate, From 74e168d4c37570d8eb638aff45b4f8b258fd156d Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Mon, 18 Nov 2024 11:59:21 +0200 Subject: [PATCH 40/47] Update stereo profile presets --- depthai-core | 2 +- src/pipeline/node/StereoDepthBindings.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/depthai-core b/depthai-core index 0a65ae480..b3a778f32 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 0a65ae48093e8128a34abd689124b415147886e3 +Subproject commit b3a778f32d202eecae8deb079156c02c3da9ada1 diff --git a/src/pipeline/node/StereoDepthBindings.cpp b/src/pipeline/node/StereoDepthBindings.cpp index 138c214cf..bc8823373 100644 --- a/src/pipeline/node/StereoDepthBindings.cpp +++ b/src/pipeline/node/StereoDepthBindings.cpp @@ -70,7 +70,6 @@ void bind_stereodepth(pybind11::module& m, void* pCallstack){ .value("DEFAULT", StereoDepth::PresetMode::DEFAULT) .value("FACE", StereoDepth::PresetMode::FACE) .value("HIGH_DETAIL", StereoDepth::PresetMode::HIGH_DETAIL) - .value("HIGH_FPS", StereoDepth::PresetMode::HIGH_FPS) .value("HIGH_ACCURACY2", StereoDepth::PresetMode::HIGH_ACCURACY2) .value("ROBOTICS", StereoDepth::PresetMode::ROBOTICS) From bd8cb9a0afcf826d5489adf67f139a5b3111ef8c Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Mon, 18 Nov 2024 13:36:00 +0200 Subject: [PATCH 41/47] Remove HIGH_ACCURACY2 --- depthai-core | 2 +- src/pipeline/node/StereoDepthBindings.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/depthai-core b/depthai-core index b3a778f32..1c9229bc1 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit b3a778f32d202eecae8deb079156c02c3da9ada1 +Subproject commit 1c9229bc1e495db7e35229c2e35ce7de540a23ba diff --git a/src/pipeline/node/StereoDepthBindings.cpp b/src/pipeline/node/StereoDepthBindings.cpp index bc8823373..60ae02a86 100644 --- a/src/pipeline/node/StereoDepthBindings.cpp +++ b/src/pipeline/node/StereoDepthBindings.cpp @@ -70,7 +70,6 @@ void bind_stereodepth(pybind11::module& m, void* pCallstack){ .value("DEFAULT", StereoDepth::PresetMode::DEFAULT) .value("FACE", StereoDepth::PresetMode::FACE) .value("HIGH_DETAIL", StereoDepth::PresetMode::HIGH_DETAIL) - .value("HIGH_ACCURACY2", StereoDepth::PresetMode::HIGH_ACCURACY2) .value("ROBOTICS", StereoDepth::PresetMode::ROBOTICS) // Deprecated overriden From e6f60aaf758a507b82f346575d600a0fda3d3c06 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Mon, 18 Nov 2024 17:54:37 +0200 Subject: [PATCH 42/47] Fix ImageAlign examples --- examples/ImageAlign/depth_align.py | 2 +- examples/ImageAlign/image_align.py | 25 +++++++++++++++++++++---- examples/ImageAlign/thermal_align.py | 21 +++++++++++++++++++-- examples/ImageAlign/tof_align.py | 23 ++++++++++++++++++++--- 4 files changed, 61 insertions(+), 10 deletions(-) diff --git a/examples/ImageAlign/depth_align.py b/examples/ImageAlign/depth_align.py index dddfab913..b73ec10f3 100755 --- a/examples/ImageAlign/depth_align.py +++ b/examples/ImageAlign/depth_align.py @@ -172,7 +172,7 @@ def updateBlendWeights(percentRgb): cv2.imshow("Depth aligned", alignedDepthColorized) blended = cv2.addWeighted( - cvFrame, rgbWeight, alignedDepthColorized, depthWeight, 0 + cvFrameUndistorted, rgbWeight, alignedDepthColorized, depthWeight, 0 ) cv2.putText( blended, diff --git a/examples/ImageAlign/image_align.py b/examples/ImageAlign/image_align.py index c3c08ad0f..0afcdcc9a 100755 --- a/examples/ImageAlign/image_align.py +++ b/examples/ImageAlign/image_align.py @@ -3,6 +3,7 @@ import cv2 import depthai as dai from datetime import timedelta +import numpy as np # This is an interactive example that shows how two frame sources without depth information. FPS = 30.0 @@ -14,7 +15,17 @@ COLOR_RESOLUTION = dai.ColorCameraProperties.SensorResolution.THE_1080_P LEFT_RIGHT_RESOLUTION = dai.MonoCameraProperties.SensorResolution.THE_720_P +ISP_SCALE = 3 + device = dai.Device() + +calibrationHandler = device.readCalibration() +rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) +rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) +distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) +if distortionModel != dai.CameraModel.Perspective: + raise RuntimeError("Unsupported distortion model for RGB camera. This example supports only Perspective model.") + pipeline = dai.Pipeline() # Define sources and outputs @@ -32,7 +43,7 @@ camRgb.setBoardSocket(RGB_SOCKET) camRgb.setResolution(COLOR_RESOLUTION) camRgb.setFps(FPS) -camRgb.setIspScale(1, 3) +camRgb.setIspScale(1, ISP_SCALE) out.setStreamName("out") @@ -109,12 +120,18 @@ def updateDepthPlane(depth): # Colorize the aligned depth leftCv = leftAligned.getCvFrame() + cvFrameUndistorted = cv2.undistort( + frameRgbCv, + np.array(rgbIntrinsics), + np.array(rgbDistortion), + ) + if len(leftCv.shape) == 2: leftCv = cv2.cvtColor(leftCv, cv2.COLOR_GRAY2BGR) - if leftCv.shape != frameRgbCv.shape: - leftCv = cv2.resize(leftCv, (frameRgbCv.shape[1], frameRgbCv.shape[0])) + if leftCv.shape != cvFrameUndistorted.shape: + leftCv = cv2.resize(leftCv, (cvFrameUndistorted.shape[1], cvFrameUndistorted.shape[0])) - blended = cv2.addWeighted(frameRgbCv, rgbWeight, leftCv, leftWeight, 0) + blended = cv2.addWeighted(cvFrameUndistorted, rgbWeight, leftCv, leftWeight, 0) cv2.imshow(windowName, blended) key = cv2.waitKey(1) diff --git a/examples/ImageAlign/thermal_align.py b/examples/ImageAlign/thermal_align.py index f4523e424..9cdc8659e 100755 --- a/examples/ImageAlign/thermal_align.py +++ b/examples/ImageAlign/thermal_align.py @@ -40,6 +40,17 @@ def getFps(self): raise RuntimeError("No thermal camera found!") +ISP_SCALE = 3 + +device = dai.Device() + +calibrationHandler = device.readCalibration() +rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) +rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) +distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) +if distortionModel != dai.CameraModel.Perspective: + raise RuntimeError("Unsupported distortion model for RGB camera. This example supports only Perspective model.") + pipeline = dai.Pipeline() # Define sources and outputs @@ -57,7 +68,7 @@ def getFps(self): camRgb.setBoardSocket(RGB_SOCKET) camRgb.setResolution(COLOR_RESOLUTION) camRgb.setFps(FPS) -camRgb.setIspScale(1,3) +camRgb.setIspScale(1,ISP_SCALE) out.setStreamName("out") @@ -132,6 +143,12 @@ def updateDepthPlane(depth): frameRgbCv = frameRgb.getCvFrame() fpsCounter.tick() + cvFrameUndistorted = cv2.undistort( + frameRgbCv, + np.array(rgbIntrinsics), + np.array(rgbDistortion), + ) + # Colorize the aligned depth thermalFrame = thermalAligned.getCvFrame().astype(np.float32) # Create a mask for nan values @@ -143,7 +160,7 @@ def updateDepthPlane(depth): # Apply the mask back with black pixels (0) colormappedFrame[mask] = 0 - blended = cv2.addWeighted(frameRgbCv, rgbWeight, colormappedFrame, thermalWeight, 0) + blended = cv2.addWeighted(cvFrameUndistorted, rgbWeight, colormappedFrame, thermalWeight, 0) cv2.putText( blended, diff --git a/examples/ImageAlign/tof_align.py b/examples/ImageAlign/tof_align.py index d9ec664ac..ea312741e 100755 --- a/examples/ImageAlign/tof_align.py +++ b/examples/ImageAlign/tof_align.py @@ -29,8 +29,19 @@ def getFps(self): return (len(self.frameTimes) - 1) / (self.frameTimes[-1] - self.frameTimes[0]) +ISP_SCALE = 2 + +device = dai.Device() + +calibrationHandler = device.readCalibration() +rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) +rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) +distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) +if distortionModel != dai.CameraModel.Perspective: + raise RuntimeError("Unsupported distortion model for RGB camera. This example supports only Perspective model.") pipeline = dai.Pipeline() + # Define sources and outputs camRgb = pipeline.create(dai.node.ColorCamera) tof = pipeline.create(dai.node.ToF) @@ -48,7 +59,7 @@ def getFps(self): camRgb.setBoardSocket(RGB_SOCKET) camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_800_P) camRgb.setFps(FPS) -camRgb.setIspScale(1, 2) +camRgb.setIspScale(1, ISP_SCALE) out.setStreamName("out") @@ -109,7 +120,8 @@ def updateBlendWeights(percentRgb): # Connect to device and start pipeline -with dai.Device(pipeline) as device: +with device: + device.startPipeline(pipeline) queue = device.getOutputQueue("out", 8, False) # Configure windows; trackbar adjusts blending ratio of rgb/depth @@ -138,6 +150,11 @@ def updateBlendWeights(percentRgb): # Blend when both received if frameDepth is not None: cvFrame = frameRgb.getCvFrame() + cvFrameUndistorted = cv2.undistort( + cvFrame, + np.array(rgbIntrinsics), + np.array(rgbDistortion), + ) # Colorize the aligned depth alignedDepthColorized = colorizeDepth(frameDepth.getFrame()) # Resize depth to match the rgb frame @@ -153,7 +170,7 @@ def updateBlendWeights(percentRgb): cv2.imshow("depth", alignedDepthColorized) blended = cv2.addWeighted( - cvFrame, rgbWeight, alignedDepthColorized, depthWeight, 0 + cvFrameUndistorted, rgbWeight, alignedDepthColorized, depthWeight, 0 ) cv2.imshow(rgbDepthWindowName, blended) From e33723bf09421ea04bdb90201f4575d77fc14643 Mon Sep 17 00:00:00 2001 From: SzabolcsGergely Date: Mon, 18 Nov 2024 18:01:31 +0200 Subject: [PATCH 43/47] Obtain intrinsics dynamically --- examples/ImageAlign/depth_align.py | 3 ++- examples/ImageAlign/image_align.py | 3 ++- examples/ImageAlign/thermal_align.py | 3 ++- examples/ImageAlign/tof_align.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/examples/ImageAlign/depth_align.py b/examples/ImageAlign/depth_align.py index b73ec10f3..df773e6c5 100755 --- a/examples/ImageAlign/depth_align.py +++ b/examples/ImageAlign/depth_align.py @@ -34,7 +34,6 @@ def getFps(self): device = dai.Device() calibrationHandler = device.readCalibration() -rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) if distortionModel != dai.CameraModel.Perspective: @@ -160,6 +159,8 @@ def updateBlendWeights(percentRgb): if frameDepth is not None: cvFrame = frameRgb.getCvFrame() + rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(cvFrame.shape[1]), int(cvFrame.shape[0])) + # Undistort the rgb frame cvFrameUndistorted = cv2.undistort( cvFrame, diff --git a/examples/ImageAlign/image_align.py b/examples/ImageAlign/image_align.py index 0afcdcc9a..4e555f205 100755 --- a/examples/ImageAlign/image_align.py +++ b/examples/ImageAlign/image_align.py @@ -20,7 +20,6 @@ device = dai.Device() calibrationHandler = device.readCalibration() -rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) if distortionModel != dai.CameraModel.Perspective: @@ -120,6 +119,8 @@ def updateDepthPlane(depth): # Colorize the aligned depth leftCv = leftAligned.getCvFrame() + rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(frameRgbCv.shape[1]), int(frameRgbCv.shape[0])) + cvFrameUndistorted = cv2.undistort( frameRgbCv, np.array(rgbIntrinsics), diff --git a/examples/ImageAlign/thermal_align.py b/examples/ImageAlign/thermal_align.py index 9cdc8659e..c25baa25f 100755 --- a/examples/ImageAlign/thermal_align.py +++ b/examples/ImageAlign/thermal_align.py @@ -45,7 +45,6 @@ def getFps(self): device = dai.Device() calibrationHandler = device.readCalibration() -rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) if distortionModel != dai.CameraModel.Perspective: @@ -143,6 +142,8 @@ def updateDepthPlane(depth): frameRgbCv = frameRgb.getCvFrame() fpsCounter.tick() + rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(frameRgbCv.shape[1]), int(frameRgbCv.shape[0])) + cvFrameUndistorted = cv2.undistort( frameRgbCv, np.array(rgbIntrinsics), diff --git a/examples/ImageAlign/tof_align.py b/examples/ImageAlign/tof_align.py index ea312741e..070a37d78 100755 --- a/examples/ImageAlign/tof_align.py +++ b/examples/ImageAlign/tof_align.py @@ -34,7 +34,6 @@ def getFps(self): device = dai.Device() calibrationHandler = device.readCalibration() -rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(1920 / ISP_SCALE), int(1080 / ISP_SCALE)) rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) if distortionModel != dai.CameraModel.Perspective: @@ -150,6 +149,7 @@ def updateBlendWeights(percentRgb): # Blend when both received if frameDepth is not None: cvFrame = frameRgb.getCvFrame() + rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(cvFrame.shape[1]), int(cvFrame.shape[0])) cvFrameUndistorted = cv2.undistort( cvFrame, np.array(rgbIntrinsics), From b21407233a4e8e2ba5ba7e142c0746677bdf36a8 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Mon, 18 Nov 2024 19:11:55 +0100 Subject: [PATCH 44/47] Fix the thermal_align.py example --- examples/ImageAlign/thermal_align.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/ImageAlign/thermal_align.py b/examples/ImageAlign/thermal_align.py index c25baa25f..3e2673dc2 100755 --- a/examples/ImageAlign/thermal_align.py +++ b/examples/ImageAlign/thermal_align.py @@ -42,8 +42,6 @@ def getFps(self): ISP_SCALE = 3 -device = dai.Device() - calibrationHandler = device.readCalibration() rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET) distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET) From 27a630ad1504df889d02e3adcf72a1f9ccde1a69 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Thu, 21 Nov 2024 14:58:00 +0100 Subject: [PATCH 45/47] Update core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 1c9229bc1..79de99d5a 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 1c9229bc1e495db7e35229c2e35ce7de540a23ba +Subproject commit 79de99d5a011c3429d8a6c59f394a4d7caa04c02 From 1a994f154c66c63ac46059b6a440d773665544ae Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Fri, 22 Nov 2024 11:42:42 +0100 Subject: [PATCH 46/47] Update core --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 79de99d5a..68fe9beb1 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 79de99d5a011c3429d8a6c59f394a4d7caa04c02 +Subproject commit 68fe9beb14d6c844c4fc2dc4ddc77d44c82eb1cf From a0b184244a3ca5044373d16888199be251bb2595 Mon Sep 17 00:00:00 2001 From: Matevz Morato Date: Fri, 22 Nov 2024 15:53:07 +0100 Subject: [PATCH 47/47] Update core to main --- depthai-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depthai-core b/depthai-core index 68fe9beb1..d6a37a5ba 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 68fe9beb14d6c844c4fc2dc4ddc77d44c82eb1cf +Subproject commit d6a37a5ba8ba2ee187fabc9208b813db5f75d4a7