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

本页目录

  • 演示
  • 设置
  • 源代码
  • Pipeline

Casting NN 减法

本示例演示了如何使用 NeuralNetworkCast 节点执行帧减法。

演示

减法效果演示

设置

请运行 安装脚本 以下载所有必需的依赖项。请注意,此脚本必须在 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 cv2
4import depthai as dai
5from pathlib import Path
6
7SHAPE = 720
8
9p = dai.Pipeline()
10
11camRgb = p.create(dai.node.ColorCamera)
12nn = p.create(dai.node.NeuralNetwork)
13script = p.create(dai.node.Script)
14rgbXout = p.create(dai.node.XLinkOut)
15cast = p.create(dai.node.Cast)
16castXout = p.create(dai.node.XLinkOut)
17
18camRgb.setVideoSize(SHAPE, SHAPE)
19camRgb.setPreviewSize(SHAPE, SHAPE)
20camRgb.setInterleaved(False)
21
22nnBlobPath = (Path(__file__).parent / Path('../models/diff_openvino_2022.1_6shave.blob')).resolve().absolute()
23nn.setBlobPath(nnBlobPath)
24
25script.setScript("""
26old = node.io['in'].get()
27while True:
28    frame = node.io['in'].get()
29    node.io['img1'].send(old)
30    node.io['img2'].send(frame)
31    old = frame
32""")
33
34rgbXout.setStreamName("rgb")
35castXout.setStreamName("cast")
36cast.setOutputFrameType(dai.RawImgFrame.Type.GRAY8)
37
38# Linking
39camRgb.preview.link(script.inputs['in'])
40script.outputs['img1'].link(nn.inputs['img1'])
41script.outputs['img2'].link(nn.inputs['img2'])
42camRgb.video.link(rgbXout.input)
43nn.out.link(cast.input)
44cast.output.link(castXout.input)
45
46# Pipeline is defined, now we can connect to the device
47with dai.Device(p) as device:
48    qCam = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
49    qCast = device.getOutputQueue(name="cast", maxSize=4, blocking=False)
50
51
52    while True:
53        colorFrame = qCam.get()
54        assert isinstance(colorFrame, dai.ImgFrame)
55        cv2.imshow("Color", colorFrame.getCvFrame())
56
57        inCast = qCast.get()
58        assert isinstance(inCast, dai.ImgFrame)
59        cv2.imshow("Diff", inCast.getCvFrame())
60
61        if cv2.waitKey(1) == ord('q'):
62            break

C++

1#include <depthai/depthai.hpp>
2#include <filesystem>
3#include <opencv2/opencv.hpp>
4
5constexpr int SHAPE = 720;
6
7int main() {
8    dai::Pipeline p;
9
10    auto camRgb = p.create<dai::node::ColorCamera>();
11    auto nn = p.create<dai::node::NeuralNetwork>();
12    auto script = p.create<dai::node::Script>();
13    auto rgbXout = p.create<dai::node::XLinkOut>();
14    auto cast = p.create<dai::node::Cast>();
15    auto castXout = p.create<dai::node::XLinkOut>();
16
17    camRgb->setVideoSize(SHAPE, SHAPE);
18    camRgb->setPreviewSize(SHAPE, SHAPE);
19    camRgb->setInterleaved(false);
20
21    nn->setBlobPath(BLOB_PATH);
22
23    script->setScript(R"(
24        old = node.io['in'].get()
25        while True:
26            frame = node.io['in'].get()
27            node.io['img1'].send(old)
28            node.io['img2'].send(frame)
29            old = frame
30    )");
31
32    rgbXout->setStreamName("rgb");
33    castXout->setStreamName("cast");
34    cast->setOutputFrameType(dai::RawImgFrame::Type::GRAY8);
35
36    // Linking
37    camRgb->preview.link(script->inputs["in"]);
38    script->outputs["img1"].link(nn->inputs["img1"]);
39    script->outputs["img2"].link(nn->inputs["img2"]);
40    camRgb->video.link(rgbXout->input);
41    nn->out.link(cast->input);
42    cast->output.link(castXout->input);
43
44    // Pipeline is defined, now we can connect to the device
45    dai::Device device(p);
46    auto qCam = device.getOutputQueue("rgb", 4, false);
47    auto qCast = device.getOutputQueue("cast", 4, false);
48
49    while(true) {
50        auto colorFrame = qCam->get<dai::ImgFrame>();
51        if(colorFrame) {
52            cv::imshow("Color", colorFrame->getCvFrame());
53        }
54
55        auto inCast = qCast->get<dai::ImgFrame>();
56        if(inCast) {
57            cv::imshow("Diff", inCast->getCvFrame());
58        }
59
60        if(cv::waitKey(1) == 'q') {
61            break;
62        }
63    }
64
65    return 0;
66}

Pipeline

需要帮助?

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