Skip to content

Commit de8a2e3

Browse files
committed
Initial bindings for gen2
1 parent 8cf9e41 commit de8a2e3

17 files changed

+457
-105
lines changed

CMakeLists.txt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,21 @@ find_package(pybind11 CONFIG REQUIRED)
3838
# Add files for python module
3939
pybind11_add_module(${TARGET_NAME}
4040
src/py_bindings.cpp
41-
src/host_data_packet_bindings.cpp
42-
src/nnet_packet_bindings.cpp
43-
src/py_tensor_entry_container_iterator.cpp
44-
src/device_bindings.cpp
41+
#src/host_data_packet_bindings.cpp
42+
#src/nnet_packet_bindings.cpp
43+
#src/py_tensor_entry_container_iterator.cpp
44+
#src/device_bindings.cpp
45+
src/XLinkConnectionBindings.cpp
46+
src/DeviceBindings.cpp
47+
src/DatatypeBindings.cpp
48+
src/DataQueueBindings.cpp
49+
src/pipeline/PipelineBindings.cpp
50+
src/pipeline/NodeBindings.cpp
4551
)
4652

53+
# Add include directory (src)
54+
target_include_directories(${TARGET_NAME} PRIVATE src)
55+
4756
# Link with libraries
4857
target_link_libraries(${TARGET_NAME}
4958
PUBLIC

depthai-core

Submodule depthai-core updated 52 files

src/DataQueueBindings.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "DataQueueBindings.hpp"
2+
3+
// depthai-shared
4+
#include "depthai/DataQueue.hpp"
5+
6+
void DataQueueBindings::bind(pybind11::module& m){
7+
8+
using namespace dai;
9+
10+
// Bind DataOutputQueue
11+
py::class_<DataOutputQueue, std::shared_ptr<DataOutputQueue>>(m, "DataOutputQueue")
12+
.def("get", static_cast<std::shared_ptr<RawBuffer>(DataOutputQueue::*)()>(&DataOutputQueue::get) )
13+
.def("has", static_cast<bool(DataOutputQueue::*)()>(&DataOutputQueue::has))
14+
.def("tryGet", static_cast<std::shared_ptr<RawBuffer>(DataOutputQueue::*)()>(&DataOutputQueue::tryGet))
15+
;
16+
17+
// Bind DataInputQueue
18+
py::class_<DataInputQueue, std::shared_ptr<DataInputQueue>>(m, "DataInputQueue")
19+
.def("send", &DataInputQueue::send)
20+
.def("sendAsync", &DataInputQueue::sendAsync)
21+
;
22+
23+
}

src/DataQueueBindings.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
// pybind
4+
#include "pybind11_common.hpp"
5+
6+
struct DataQueueBindings {
7+
static void bind(pybind11::module& m);
8+
};

src/DatatypeBindings.cpp

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#include "DatatypeBindings.hpp"
2+
3+
#include <memory>
4+
5+
// depthai-shared
6+
#include "depthai-shared/datatype/RawBuffer.hpp"
7+
#include "depthai-shared/datatype/ImgFrame.hpp"
8+
#include "depthai-shared/datatype/NNTensor.hpp"
9+
10+
void DatatypeBindings::bind(pybind11::module& m){
11+
12+
using namespace dai;
13+
14+
// Bind RawBuffer
15+
py::class_<RawBuffer, std::shared_ptr<RawBuffer>>(m, "RawBuffer")
16+
.def_readwrite("data", &RawBuffer::data)
17+
;
18+
19+
20+
// Bind ImgFrame
21+
py::class_<ImgFrame, RawBuffer, std::shared_ptr<ImgFrame>> imgFrame(m, "ImgFrame");
22+
imgFrame
23+
.def_readwrite("fb", &ImgFrame::fb)
24+
.def_readwrite("category", &ImgFrame::category)
25+
.def_readwrite("instanceNum", &ImgFrame::instanceNum)
26+
.def_readwrite("sequenceNum", &ImgFrame::sequenceNum)
27+
.def_property("ts",
28+
[](const ImgFrame& o){
29+
double ts = o.ts.sec + o.ts.nsec / 1000000000.0;
30+
return ts;
31+
},
32+
[](ImgFrame& o, double ts){
33+
o.ts.sec = ts;
34+
o.ts.nsec = (ts - o.ts.sec) * 1000000000.0;
35+
}
36+
)
37+
;
38+
39+
40+
py::enum_<ImgFrame::Type>(imgFrame, "Type")
41+
.value("YUV422i", ImgFrame::Type::YUV422i)
42+
.value("YUV444p", ImgFrame::Type::YUV444p)
43+
.value("YUV420p", ImgFrame::Type::YUV420p)
44+
.value("YUV422p", ImgFrame::Type::YUV422p)
45+
.value("YUV400p", ImgFrame::Type::YUV400p)
46+
.value("RGBA8888", ImgFrame::Type::RGBA8888)
47+
.value("RGB161616", ImgFrame::Type::RGB161616)
48+
.value("RGB888", ImgFrame::Type::RGB888)
49+
.value("LUT2", ImgFrame::Type::LUT2)
50+
.value("LUT4", ImgFrame::Type::LUT4)
51+
.value("LUT16", ImgFrame::Type::LUT16)
52+
.value("RAW16", ImgFrame::Type::RAW16)
53+
.value("RAW14", ImgFrame::Type::RAW14)
54+
.value("RAW12", ImgFrame::Type::RAW12)
55+
.value("RAW10", ImgFrame::Type::RAW10)
56+
.value("RAW8", ImgFrame::Type::RAW8)
57+
.value("PACK10", ImgFrame::Type::PACK10)
58+
.value("PACK12", ImgFrame::Type::PACK12)
59+
.value("YUV444i", ImgFrame::Type::YUV444i)
60+
.value("NV12", ImgFrame::Type::NV12)
61+
.value("NV21", ImgFrame::Type::NV21)
62+
.value("BITSTREAM", ImgFrame::Type::BITSTREAM)
63+
.value("HDR", ImgFrame::Type::HDR)
64+
.value("NONE", ImgFrame::Type::NONE)
65+
.export_values()
66+
;
67+
68+
py::class_<ImgFrame::Specs>(imgFrame, "Specs")
69+
.def_readwrite("type", &ImgFrame::Specs::type)
70+
.def_readwrite("width", &ImgFrame::Specs::width)
71+
.def_readwrite("height", &ImgFrame::Specs::height)
72+
.def_readwrite("stride", &ImgFrame::Specs::stride)
73+
.def_readwrite("bytesPP", &ImgFrame::Specs::bytesPP)
74+
.def_readwrite("p1Offset", &ImgFrame::Specs::p1Offset)
75+
.def_readwrite("p2Offset", &ImgFrame::Specs::p2Offset)
76+
.def_readwrite("p3Offset", &ImgFrame::Specs::p3Offset)
77+
;
78+
79+
80+
81+
// NNTensor
82+
py::class_<NNTensor, RawBuffer, std::shared_ptr<NNTensor>> nnTensor(m, "NNTensor");
83+
nnTensor
84+
.def_readwrite("tensors", &NNTensor::tensors)
85+
.def_readwrite("batchSize", &NNTensor::batchSize)
86+
;
87+
88+
py::class_<TensorInfo> tensorInfo(m, "TensorInfo");
89+
tensorInfo
90+
.def_readwrite("order", &TensorInfo::order)
91+
.def_readwrite("dataType", &TensorInfo::dataType)
92+
.def_readwrite("numDimensions", &TensorInfo::numDimensions)
93+
.def_readwrite("dims", &TensorInfo::dims)
94+
.def_readwrite("strides", &TensorInfo::strides)
95+
.def_readwrite("name", &TensorInfo::name)
96+
.def_readwrite("offset", &TensorInfo::offset)
97+
;
98+
99+
py::enum_<TensorInfo::DataType>(tensorInfo, "DataType")
100+
.value("FP16", TensorInfo::DataType::FP16)
101+
.value("U8F", TensorInfo::DataType::U8F)
102+
.value("INT", TensorInfo::DataType::INT)
103+
.value("FP32", TensorInfo::DataType::FP32)
104+
.value("I8", TensorInfo::DataType::I8)
105+
.export_values()
106+
;
107+
108+
py::enum_<TensorInfo::StorageOrder>(tensorInfo, "TensorInfo")
109+
.value("NHWC", TensorInfo::StorageOrder::NHWC)
110+
.value("NHCW", TensorInfo::StorageOrder::NHCW)
111+
.value("NCHW", TensorInfo::StorageOrder::NCHW)
112+
.value("HWC", TensorInfo::StorageOrder::HWC)
113+
.value("CHW", TensorInfo::StorageOrder::CHW)
114+
.value("WHC", TensorInfo::StorageOrder::WHC)
115+
.value("HCW", TensorInfo::StorageOrder::HCW)
116+
.value("WCH", TensorInfo::StorageOrder::WCH)
117+
.value("CWH", TensorInfo::StorageOrder::CWH)
118+
.value("NC", TensorInfo::StorageOrder::NC)
119+
.value("CN", TensorInfo::StorageOrder::CN)
120+
.value("C", TensorInfo::StorageOrder::C)
121+
.value("H", TensorInfo::StorageOrder::H)
122+
.value("W", TensorInfo::StorageOrder::W)
123+
.export_values()
124+
;
125+
126+
127+
}

src/DatatypeBindings.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
// pybind
4+
#include "pybind11_common.hpp"
5+
6+
struct DatatypeBindings {
7+
static void bind(pybind11::module& m);
8+
};

src/DeviceBindings.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include "DeviceBindings.hpp"
2+
3+
// depthai
4+
#include "depthai/device.hpp"
5+
6+
void DeviceBindings::bind(pybind11::module& m){
7+
8+
using namespace dai;
9+
10+
// Bind global properties
11+
py::class_<Device>(m, "Device")
12+
.def(py::init<>())
13+
.def(py::init<const DeviceInfo&, bool>(), py::arg("deviceDesc"), py::arg("usb2Mode") = false)
14+
.def(py::init<const DeviceInfo&, std::string>(), py::arg("deviceDesc"), py::arg("pathToCmd"))
15+
.def("isPipelineRunning", &Device::isPipelineRunning)
16+
.def("startPipeline", &Device::startPipeline)
17+
.def("getOutputQueue", &Device::getOutputQueue)
18+
.def("getInputQueue", &Device::getInputQueue)
19+
.def("setCallback", &Device::setCallback)
20+
;
21+
22+
}

src/DeviceBindings.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
// pybind
4+
#include "pybind11_common.hpp"
5+
6+
struct DeviceBindings {
7+
static void bind(pybind11::module& m);
8+
};

src/XLinkConnectionBindings.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#include "XLinkConnectionBindings.hpp"
2+
3+
#include "depthai/xlink/XLinkConnection.hpp"
4+
5+
#include <cmath>
6+
#include <cstring>
7+
8+
void XLinkConnectionBindings::bind(pybind11::module& m){
9+
10+
using namespace dai;
11+
12+
py::class_<DeviceInfo>(m, "DeviceInfo")
13+
.def(py::init<>())
14+
.def_readwrite("desc", &DeviceInfo::desc)
15+
.def_readwrite("state", &DeviceInfo::state)
16+
;
17+
18+
py::class_<deviceDesc_t>(m, "DeviceDesc")
19+
.def(py::init<>())
20+
.def_readwrite("protocol", &deviceDesc_t::protocol)
21+
.def_readwrite("platform", &deviceDesc_t::platform)
22+
.def_property("name",
23+
[](deviceDesc_t& o){return std::string(o.name);},
24+
[](deviceDesc_t& o, std::string n){ std::strncpy(o.name, n.c_str(), std::min(XLINK_MAX_NAME_SIZE,(int) n.size()));}
25+
)
26+
27+
;
28+
29+
py::enum_<XLinkDeviceState_t>(m, "XLinkDeviceState")
30+
.value("X_LINK_ANY_STATE", X_LINK_ANY_STATE)
31+
.value("X_LINK_BOOTED", X_LINK_BOOTED)
32+
.value("X_LINK_UNBOOTED", X_LINK_UNBOOTED)
33+
.export_values();
34+
;
35+
36+
37+
py::enum_<XLinkProtocol_t>(m, "XLinkProtocol")
38+
.value("X_LINK_USB_VSC", X_LINK_USB_VSC)
39+
.value("X_LINK_USB_CDC", X_LINK_USB_CDC)
40+
.value("X_LINK_PCIE", X_LINK_PCIE)
41+
.value("X_LINK_IPC", X_LINK_IPC)
42+
.value("X_LINK_NMB_OF_PROTOCOLS", X_LINK_NMB_OF_PROTOCOLS)
43+
.value("X_LINK_ANY_PROTOCOL", X_LINK_ANY_PROTOCOL)
44+
.export_values()
45+
;
46+
47+
py::enum_<XLinkPlatform_t>(m, "XLinkPlatform")
48+
.value("X_LINK_ANY_PLATFORM", X_LINK_ANY_PLATFORM)
49+
.value("X_LINK_MYRIAD_2", X_LINK_MYRIAD_2)
50+
.value("X_LINK_MYRIAD_X", X_LINK_MYRIAD_X)
51+
.export_values()
52+
;
53+
54+
py::class_<XLinkConnection>(m, "XLinkConnection")
55+
.def(py::init<const DeviceInfo&, std::vector<std::uint8_t>>())
56+
.def(py::init<const DeviceInfo&, std::string>())
57+
.def(py::init<const DeviceInfo&>())
58+
.def_static("getAllConnectedDevices", &XLinkConnection::getAllConnectedDevices)
59+
.def_static("getFirstDevice", &XLinkConnection::getFirstDevice)
60+
;
61+
62+
63+
}

src/XLinkConnectionBindings.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
// pybind
4+
#include "pybind11_common.hpp"
5+
6+
struct XLinkConnectionBindings {
7+
static void bind(pybind11::module& m);
8+
};

0 commit comments

Comments
 (0)