AutoCalibration 是一个主机节点,可在管道中运行自动立体校准工作流,并在运行时提供校准质量结果。区分这两个层非常重要:AutoCalibration是您添加到管道的主机节点。- 在内部,它在后台控制并使用
DynamicCalibration。 DEPTHAI_AUTOCALIBRATION是自动校准的全局部署开关。
启用自动校准的三种方式
- 全局变量 (
DEPTHAI_AUTOCALIBRATION) 最适合已部署的管道,您希望在不更改代码的情况下启用自动行为。 - AutoCalibration 主机节点 最适合您希望对模式、重试、验证、刷新和结果处理进行显式管道级控制时。
- 管道设置器 (
pipeline.setAutoCalibrationMode(...)) 最适合您希望在不添加AutoCalibration主机节点的情况下进行轻量级代码级控制时。
通过全局变量进行自动校准
Command Line
1DEPTHAI_AUTOCALIBRATION=ON_START
2DEPTHAI_AUTOCALIBRATION=CONTINUOUS
3DEPTHAI_AUTOCALIBRATION=OFF从
DepthAI 3.6 开始,自动校准默认在 ON_START 模式下启用。使用 DEPTHAI_AUTOCALIBRATION=OFF 或 pipeline.setAutoCalibrationMode(...OFF) 来禁用它。行为说明
- 适用于立体
1280x800管道。 - 将校准刷新为用户校准。
- 出厂校准保持不变。
- 如果您的管道已包含
DynamicCalibration节点或AutoCalibration节点,则不会初始化基于AutoCalibrationMode的自动过程。
在
ON_START 和 CONTINUOUS 过程中,新的校准都将刷新为用户校准。这将覆盖设备上当前存储的用户校准。ON_START 过程
示例
Command Line
1DEPTHAI_AUTOCALIBRATION=ON_START python3 examples/Stereo/stereo.pyCommand Line
1DEPTHAI_LEVEL=info DEPTHAI_AUTOCALIBRATION=ON_START python3 examples/Stereo/stereo.py- 快速路径:约
2.5s。 - 常见重试路径:约
6s。 - 最坏情况重试(
maxIterations = 10):最多约25s。
CONTINUOUS 过程
示例
Command Line
1DEPTHAI_AUTOCALIBRATION=CONTINUOUS python3 examples/Stereo/stereo.pyCommand Line
1DEPTHAI_LEVEL=info DEPTHAI_AUTOCALIBRATION=CONTINUOUS python3 examples/Stereo/stereo.pyON_START 不同,此模式会增加持续的处理开销。通过管道设置器进行自动校准
AutoCalibration 主机节点时,请使用 pipeline.setAutoCalibrationMode(...)。Python
Python
1pipeline = dai.Pipeline()
2pipeline.setAutoCalibrationMode(dai.Pipeline.AutoCalibrationMode.ON_START)
3# 或者连续运行:
4# pipeline.setAutoCalibrationMode(dai.Pipeline.AutoCalibrationMode.CONTINUOUS)
5
6# 禁用自动校准
7pipeline.setAutoCalibrationMode(dai.Pipeline.AutoCalibrationMode.OFF)如果同时设置了
DEPTHAI_AUTOCALIBRATION 和 pipeline.setAutoCalibrationMode(...),则代码中设置的管道本地模式将覆盖环境变量。管道中的 AutoCalibration 主机节点
示例
Python
Python
1import cv2 as cv
2import numpy as np
3import depthai as dai
4
5# Create pipeline
6with dai.Pipeline() as pipeline:
7 device = pipeline.getDefaultDevice()
8 botchCalibration(device)
9
10 camLeft = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
11 camRight = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C)
12 stereo = pipeline.create(dai.node.StereoDepth)
13
14 dcWorker = pipeline.create(dai.node.AutoCalibration).build(camLeft, camRight)
15 dcWorker.initialConfig.maxIterations = 2
16 dcWorker.initialConfig.sleepingTime = 10
17 dcWorker.initialConfig.flashCalibration = False
18 dcWorker.initialConfig.mode = dai.AutoCalibrationConfig.CONTINUOUS # ON_START
19 dcWorker.initialConfig.validationSetSize = 5
20 dcWorker.initialConfig.dataConfidenceThreshold = 0.7
21 workerOutputQueue = dcWorker.output.createOutputQueue()
22
23 videoQueueLeft = camLeft.requestOutput((1280, 800), fps=30)
24 videoQueueRight = camRight.requestOutput((1280, 800), fps=30)
25
26 videoQueueLeft.link(stereo.left)
27 videoQueueRight.link(stereo.right)
28
29 stereoOut = stereo.depth.createOutputQueue()
30 pipeline.start()
31
32 while pipeline.isRunning():
33 workerOutput = workerOutputQueue.tryGet()
34 if workerOutput is not None:
35 if workerOutput.passed:
36 print("Passed")
37 print(f"dataConfidence = {workerOutput.dataConfidence}")
38 print(f"calibrationConfidence = {workerOutput.calibrationConfidence}")
39 else:
40 print("Did not pass")
41
42 depth = stereoOut.get()
43 cv.imshow("Depth", depth)
44
45 if cv.waitKey(1) == ord("q"):
46 break
47
48 pipeline.stop()配置参数
auto_calib.initialConfig 配置行为:mode选择自动校准程序(ON_START或CONTINUOUS)。flashCalibration如果为true,则在成功验证后将校准作为用户校准刷新。maxIterations最大校准尝试次数。sleepingTime校准尝试/迭代之间的延迟。validationSetSize在接受校准之前使用的验证样本数量。
节点输出(结果)
AutoCalibrationResult 消息。常见字段:passed校准/验证是否成功。dataQuality收集的校准数据的质量指示器。calibrationConfidence结果校准的置信度分数。