本页目录

  • 如何放置
  • 输入和输出
  • 模型尺寸
  • 后处理
  • Rectification
  • Usage
  • Examples of functionality
  • Reference

NeuralDepth

Supported on:RVC4
NeuralDepth 节点使用神经网络而非传统立体匹配算法,从立体相机对计算深度。 它提供了 StereoDepth 节点的替代方案,具有其独特的优势。它在底层使用 LENS (Luxonis Edge Neural Stereo),这是一个完全在设备上的神经立体模型,针对低纹理表面、重复图案和困难光照等具有挑战性的场景进行了优化。更多背景信息,请参阅 LENS介绍文章DepthAI 3.6.1 性能更新

如何放置

Python

Python
1pipeline = dai.Pipeline()
2neuralDepth = pipeline.create(dai.node.NeuralDepth)

C++

C++
1dai::Pipeline pipeline;
2auto neuralDepth = pipeline.create<dai::node::NeuralDepth>();

输入和输出

模型尺寸

NeuralDepth 支持多种模型尺寸,从高分辨率 XL 变体到低延迟实时预设。下面的 FPS 数据反映了在 DepthAI 3.6.1 中引入的优化模型。这些新增功能使您可以根据应用更轻松地权衡深度分辨率、精度和实时性能。
模型 分辨率 FPS
NEURAL_DEPTH_1248X780 (NEURAL_DEPTH_EXTRA_LARGE) 1248x780 8.5
NEURAL_DEPTH_1056X660 1056x660 12.5
NEURAL_DEPTH_960X600 960x600 14
NEURAL_DEPTH_864X540 864x540 18
NEURAL_DEPTH_LARGE 768x480 22
NEURAL_DEPTH_MEDIUM 576x360 38
NEURAL_DEPTH_SMALL (默认) 480x300 56
NEURAL_DEPTH_NANO 384x240 85

后处理

NeuralDepth 提供了几种后处理选项以提高深度质量:
  • 置信度阈值:置信度低于此阈值的像素被视为无效。有效范围是 [0, 255],默认值为 125。
  • 边缘阈值:边缘幅度低于此值的像素被视为无效。有效范围是 [0, 255],默认值为 10。
  • 时间滤波器:随时间平均深度值以降低噪声。该滤波器具有以下参数:
    • enable:布尔值,启用/禁用滤波器(默认:false)
    • alpha:指数移动平均平滑因子,范围 [0, 1]。较低的值提供更平滑的效果(对静态场景很有用),值为 1.0 时实际上相当于直通(默认:0.4)
    • delta:视差变化检测的阈值,范围 [0, 255]。只有视差变化(当前帧与前一帧之间)低于此值的像素才会被滤波,否则该像素的滤波被禁用(默认:100)

Rectification

NeuralDepth包含一个内部矫正步骤。如果您的输入图像已经矫正过,您可以使用 setRectification(false) 禁用它。

Usage

Python

Python
1import depthai as dai
2
3pipeline = dai.Pipeline()
4
5# Create mono cameras
6monoLeft = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
7monoRight = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C)
8
9# Create Outputs
10leftOutput = monoLeft.requestOutput((640, 400))
11rightOutput = monoRight.requestOutput((640, 400))
12
13# Create NeuralDepth node
14neuralDepth = pipeline.create(dai.node.NeuralDepth)
15neuralDepth.build(leftOutput, rightOutput, dai.DeviceModelZoo.NEURAL_DEPTH_SMALL)
16
17# Configure post-processing
18neuralDepth.initialConfig.setConfidenceThreshold(125)
19neuralDepth.initialConfig.setEdgeThreshold(10)
20
21neuralDepth.initialConfig.postProcessing.temporalFilter.enable = True
22neuralDepth.initialConfig.postProcessing.temporalFilter.delta = 100
23neuralDepth.initialConfig.postProcessing.temporalFilter.alpha = 0.4
24
25# Create output queue
26depthQueue = neuralDepth.depth.createOutputQueue()

C++

C++
1dai::Pipeline pipeline;
2
3// Create mono cameras
4auto monoLeft = pipeline.create<dai::node::Camera>()->build(dai::CameraBoardSocket::CAM_B);
5auto monoRight = pipeline.create<dai::node::Camera>()->build(dai::CameraBoardSocket::CAM_C);
6
7// Create outputs
8auto leftOutput = monoLeft->requestOutput(std::make_pair(640, 400));
9auto rightOutput = monoRight->requestOutput(std::make_pair(640, 400));
10
11// Create NeuralDepth node
12auto neuralDepth = pipeline.create<dai::node::NeuralDepth>();
13neuralDepth->build(leftOutput, rightOutput, dai::DeviceModelZoo::NEURAL_DEPTH_SMALL);
14
15// Configure post-processing
16neuralDepth->initialConfig.setConfidenceThreshold(125);
17neuralDepth->initialConfig.setEdgeThreshold(10);
18
19neuralDepth->initialConfig.postProcessing.temporalFilter.enable = true;
20neuralDepth->initialConfig.postProcessing.temporalFilter.delta = 100;
21neuralDepth->initialConfig.postProcessing.temporalFilter.alpha = 0.4f;
22
23// Create output queue
24auto depthQueue = neuralDepth->depth.createOutputQueue();

Examples of functionality

  • Neural Depth Minimal - 最小示例,展示基本 NeuralDepth 用法及视差输出可视化。
  • Neural Depth - 演示 NeuralDepth 节点,支持运行时配置置信度阈值、边缘阈值和时间滤波。
  • Neural Depth RGBD - 将 NeuralDepth 与 RGBD 节点结合生成点云,可通过远程连接查看。
  • Neural Depth Align - 演示使用 ImageAlign 节点将 NeuralDepth 输出对齐到 RGB 相机。

Reference

class

dai::node::NeuralDepth

#include NeuralDepth.hpp
variable
std::shared_ptr< NeuralDepthConfig > initialConfig
Initial config to use for NeuralDepth.
variable
Subnode< Sync > sync
variable
Subnode< MessageDemux > messageDemux
variable
Subnode< Rectification > rectification
variable
Subnode< NeuralNetwork > neuralNetwork
variable
Input & left
Input for left ImgFrame of left-right pair
variable
Input & right
Input for right ImgFrame of left-right pair
variable
Output & rectifiedLeft
Output for rectified left ImgFrame
variable
Output & rectifiedRight
Output for rectified right ImgFrame
variable
Input inputConfig
Input config to modify parameters in runtime.
variable
Input nnDataInput
Input NNData to parse
variable
Input leftInternal
Input left frame internal, used to extract frame info
variable
Input rightInternal
Input right frame internal, used to extract frame info
variable
Output disparity
Output disparity ImgFrame
variable
Output depth
Output depth ImgFrame
variable
Output edge
Output edge ImgFrame
variable
Output confidence
Output confidence ImgFrame
function
NeuralDepth()
function
NeuralDepth & setRectification(bool enable)
Enable or disable rectification (useful for prerectified inputs)
function
std::shared_ptr< NeuralDepth > build(Output & left, Output & right, DeviceModelZoo model)
function
void buildInternal()

需要帮助?

请前往 OAKChina 官网 获取技术支持或解答您的任何疑问。