DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版
DepthAI 教程
DepthAI API 参考

本页目录

  • 演示
  • 设置
  • 源代码
  • 管道

NN 拼接转换

本示例演示了如何使用 NeuralNetworkCast 节点来拼接来自多个摄像头(RGB、左、右)的帧。

演示

拼接帧演示

设置

请运行 安装脚本 以下载所有必需的依赖项。请注意,此脚本必须在 git 上下文中运行,因此您必须先下载 depthai-python 存储库,然后运行脚本
Command Line
1git clone https://github.com/luxonis/depthai-python.git
2cd depthai-python/examples
3python3 install_requirements.py
有关更多信息,请遵循 安装指南

源代码

Python

Python
GitHub
1#!/usr/bin/env python3
2
3import numpy as np
4import cv2
5import depthai as dai
6from pathlib import Path
7
8SHAPE = 300
9
10p = dai.Pipeline()
11
12camRgb = p.create(dai.node.ColorCamera)
13left = p.create(dai.node.MonoCamera)
14right = p.create(dai.node.MonoCamera)
15manipLeft = p.create(dai.node.ImageManip)
16manipRight = p.create(dai.node.ImageManip)
17nn = p.create(dai.node.NeuralNetwork)
18cast = p.create(dai.node.Cast)
19castXout = p.create(dai.node.XLinkOut)
20
21camRgb.setPreviewSize(SHAPE, SHAPE)
22camRgb.setInterleaved(False)
23camRgb.setColorOrder(dai.ColorCameraProperties.ColorOrder.BGR)
24
25left.setCamera("left")
26left.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P)
27manipLeft.initialConfig.setResize(SHAPE, SHAPE)
28manipLeft.initialConfig.setFrameType(dai.ImgFrame.Type.BGR888p)
29
30right.setCamera("right")
31right.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P)
32manipRight.initialConfig.setResize(SHAPE, SHAPE)
33manipRight.initialConfig.setFrameType(dai.ImgFrame.Type.BGR888p)
34
35nnBlobPath = (Path(__file__).parent / Path('../models/concat_openvino_2021.4_6shave.blob')).resolve().absolute()
36nn.setBlobPath(nnBlobPath)
37nn.setNumInferenceThreads(2)
38
39castXout.setStreamName("cast")
40cast.setOutputFrameType(dai.ImgFrame.Type.BGR888p)
41
42# Linking
43left.out.link(manipLeft.inputImage)
44right.out.link(manipRight.inputImage)
45manipLeft.out.link(nn.inputs['img1'])
46camRgb.preview.link(nn.inputs['img2'])
47manipRight.out.link(nn.inputs['img3'])
48nn.out.link(cast.input)
49cast.output.link(castXout.input)
50
51# Pipeline is defined, now we can connect to the device
52with dai.Device(p) as device:
53    qCast = device.getOutputQueue(name="cast", maxSize=4, blocking=False)
54
55    while True:
56        inCast = qCast.get()
57        assert isinstance(inCast, dai.ImgFrame)
58        cv2.imshow("Concated frames", inCast.getCvFrame())
59
60        if cv2.waitKey(1) == ord('q'):
61            break

C++

1#include <depthai/depthai.hpp>
2#include <opencv2/opencv.hpp>
3
4constexpr int SHAPE = 300;
5
6int main() {
7    dai::Pipeline p;
8
9    auto camRgb = p.create<dai::node::ColorCamera>();
10    auto left = p.create<dai::node::MonoCamera>();
11    auto right = p.create<dai::node::MonoCamera>();
12    auto manipLeft = p.create<dai::node::ImageManip>();
13    auto manipRight = p.create<dai::node::ImageManip>();
14    auto nn = p.create<dai::node::NeuralNetwork>();
15    auto cast = p.create<dai::node::Cast>();
16    auto castXout = p.create<dai::node::XLinkOut>();
17
18    camRgb->setPreviewSize(SHAPE, SHAPE);
19    camRgb->setInterleaved(false);
20    camRgb->setColorOrder(dai::ColorCameraProperties::ColorOrder::BGR);
21
22    left->setCamera("left");
23    left->setResolution(dai::MonoCameraProperties::SensorResolution::THE_400_P);
24    manipLeft->initialConfig.setResize(SHAPE, SHAPE);
25    manipLeft->initialConfig.setFrameType(dai::ImgFrame::Type::BGR888p);
26
27    right->setCamera("right");
28    right->setResolution(dai::MonoCameraProperties::SensorResolution::THE_400_P);
29    manipRight->initialConfig.setResize(SHAPE, SHAPE);
30    manipRight->initialConfig.setFrameType(dai::ImgFrame::Type::BGR888p);
31
32    nn->setBlobPath(BLOB_PATH);
33    nn->setNumInferenceThreads(2);
34
35    castXout->setStreamName("cast");
36    cast->setOutputFrameType(dai::ImgFrame::Type::BGR888p);
37
38    // Linking
39    left->out.link(manipLeft->inputImage);
40    right->out.link(manipRight->inputImage);
41    manipLeft->out.link(nn->inputs["img1"]);
42    camRgb->preview.link(nn->inputs["img2"]);
43    manipRight->out.link(nn->inputs["img3"]);
44    nn->out.link(cast->input);
45    cast->output.link(castXout->input);
46
47    // Pipeline is defined, now we can connect to the device
48    dai::Device device(p);
49    auto qCast = device.getOutputQueue("cast", 4, false);
50
51    while(true) {
52        auto inCast = qCast->get<dai::ImgFrame>();
53        if(inCast) {
54            cv::imshow("Concated frames", inCast->getCvFrame());
55        }
56
57        if(cv::waitKey(1) == 'q') {
58            break;
59        }
60    }
61
62    return 0;
63}

管道

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。