Script NNData example¶
This example shows how to create a NNData message inside the Script node and then send it to the host (where it gets printed to the console).
Demo¶
~/depthai-python/examples/Script$ python3 script_nndata_datatype.py
Names of layers: ['fp16', 'uint8']
NNData size: 13
FP16 values: [1.0, 1.2001953125, 3.900390625, 5.5]
UINT8 values: [6, 9, 4, 2, 0]
Setup¶
Please run the install script to download all required dependencies. Please note that this script must be ran from git context, so you have to download the depthai-python repository first and then run the script
git clone https://github.com/luxonis/depthai-python.git
cd depthai-python/examples
python3 install_requirements.py
For additional information, please follow installation guide
Source code¶
Also available on GitHub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #!/usr/bin/env python3
import depthai as dai
import time
# Start defining a pipeline
pipeline = dai.Pipeline()
# Script node
script = pipeline.create(dai.node.Script)
script.setScript("""
buf = NNData(150)
buf.setLayer("fp16", [1.0, 1.2, 3.9, 5.5])
buf.setLayer("uint8", [6, 9, 4, 2, 0])
node.warn("Names of layers: " + str(buf.getAllLayerNames()))
node.io['host'].send(buf)
""")
# XLinkOut
xout = pipeline.create(dai.node.XLinkOut)
xout.setStreamName('host')
script.outputs['host'].link(xout.input)
# Connect to device with pipeline
with dai.Device(pipeline) as device:
device.setLogLevel(dai.LogLevel.WARN)
device.setLogOutputLevel(dai.LogLevel.WARN)
nndata = device.getOutputQueue("host").get()
time.sleep(0.5)
print(f"NNData size: {len(nndata.getData())}")
print("FP16 values:", nndata.getLayerFp16("fp16"))
print("UINT8 values:",nndata.getLayerUInt8("uint8"))
|
Also available on GitHub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream>
// Includes common necessary includes for development using depthai library
#include "depthai/depthai.hpp"
int main() {
using namespace std;
// Start defining a pipeline
dai::Pipeline pipeline;
// Script node
auto script = pipeline.create<dai::node::Script>();
script->setScript(R"(
buf = NNData(150)
buf.setLayer("fp16", [1.0, 1.2, 3.9, 5.5])
buf.setLayer("uint8", [6, 9, 4, 2, 0])
node.info("Names of layers: " + str(buf.getAllLayerNames()))
node.io['host'].send(buf)
)");
// XLinkOut
auto xout = pipeline.create<dai::node::XLinkOut>();
xout->setStreamName("host");
script->outputs["host"].link(xout->input);
// Connect to device with pipeline
dai::Device device(pipeline);
device.setLogLevel(dai::LogLevel::WARN);
device.setLogOutputLevel(dai::LogLevel::WARN);
auto nndata = device.getOutputQueue("host")->get<dai::NNData>();
std::cout << "NNData size: " << nndata->getData().size() << std::endl;
std::cout << "FP16 values: ";
for(auto val : nndata->getLayerFp16("fp16")) {
std::cout << to_string(val) + " ";
}
std::cout << std::endl;
std::cout << "UINT8 values: ";
for(auto val : nndata->getLayerUInt8("uint8")) {
std::cout << to_string(val) + " ";
}
std::cout << std::endl;
return 0;
}
|