设备
设备 API
Device 对象代表一个 OAK 设备。启动设备时,需要向其上传一个 Pipeline,该 Pipeline 将在 VPU 上执行。在代码中创建设备时,固件会与 Pipeline 和其他资产(如神经网络 blob)一起上传。Python
1pipeline = depthai.Pipeline()
2
3# 创建节点,配置它们并将它们链接在一起
4
5# 连接设备并将管道上传到设备
6with depthai.Device(pipeline) as device:
7 # 打印设备的 MxID、USB 速度和可用相机
8 print('MxId:',device.getDeviceInfo().getMxId())
9 print('USB speed:',device.getUsbSpeed())
10 print('Connected cameras:',device.getConnectedCameras())连接到指定设备
Python
1# 指定 MXID、IP 地址或 USB 路径
2device_info = depthai.DeviceInfo("14442C108144F1D000") # MXID
3#device_info = depthai.DeviceInfo("192.168.1.44") # IP 地址
4#device_info = depthai.DeviceInfo("3.3.3") # USB 端口名称
5with depthai.Device(pipeline, device_info) as device:
6 # ...时钟
dai.Clock.now()(Python)或 dai::Clock::now()(C++)是一个单调时钟,用于 depthai 库中的时间戳。它派生自 std::chrono::steady_clock,不受系统时间变化(例如 NTP 同步)的影响。该方法返回自主机(PC)启动以来的 datetime.timedelta(Python)或 std::chrono::steady_clock::duration(C++)。它在调用设备 消息 的 getTimestamp() 时使用,并指示消息在设备上创建的时间。设备上还有一个单独的单调时钟,用于获取自设备(OAK)启动以来的时间,可以通过 getTimestampDevice() 调用。主机时钟同步



Python
1# 配置主机时钟同步示例
2
3import depthai as dai
4from datetime import timedelta
5# 配置管道
6with dai.Device(pipeline) as device:
7 # 第一个值:时间同步运行之间的间隔
8 # 第二个值:每次运行的时间同步样本数,用于计算更准确的值
9 # 第三个值:如果为 True,则部分时间同步请求将在随机间隔内执行,否则在固定间隔内执行
10 device.setTimesync(timedelta(seconds=5), 10, True) # (这些是默认值)设备队列

Py
1pipeline = dai.Pipeline()
2
3xout = pipeline.createXLinkOut()
4xout.setStreamName("output_name")
5# ...
6xin = pipeline.createXLinkIn()
7xin.setStreamName("input_name")
8# ...
9with dai.Device(pipeline) as device:
10
11 outputQueue = device.getOutputQueue("output_name", maxSize=5, blocking=False)
12 inputQueue = device.getInputQueue("input_name")
13
14 outputQueue.get() # 从队列读取,阻塞直到有消息到达
15 outputQueue.tryGet() # 从队列读取,如果没有消息则返回 None(不阻塞)
16 if outputQueue.has(): # 检查队列中是否有任何消息输出队列设置
while True 循环内),无论队列大小如何,队列大部分时间都会保持空状态。但当我们增加主机端的处理(如额外处理、分析等)时,可能会发生设备向主机队列推送消息的速度快于主机读取速度的情况。此时队列中的消息数量将开始增加——而 maxSize 和 blocking 设置将决定队列在此情况下的行为。两种常见配置如下:Py
1with dai.Device(pipeline) as device:
2 # 如果您只需要最新消息,而不关心之前的消息;
3 # 当新消息到达主机时,如果旧消息仍留在队列中,它将覆盖最旧的(最早的)消息
4 q1 = device.getOutputQueue(name="name1", maxSize=1, blocking=False)
5
6 # 如果您关心每一条消息(例如 H264/5 编码视频;如果丢失一帧,会出现伪影);
7 # 如果队列已满,设备将等待主机从队列中读取一条消息
8 q2 = device.getOutputQueue(name="name2", maxSize=30, blocking=True) # 也是默认值 (maxSize=30/blocking=True)maxSize=30 仅作为示例,实际上可以是任何 int16 数值。由于设备队列位于主机计算机上,内存(RAM)通常并不稀缺,因此 maxSize 的影响不会太大。但如果您使用小型单板计算机(如 RPI Zero,512MB RAM)并流式传输大帧(例如未压缩的 4K 图像),并且将 maxSize 设置得过高(同时读取队列不够快),则可能会迅速耗尽内存。一些额外信息
- 队列是线程安全的——可以从任何线程访问。
- 队列的创建方式是每个队列拥有自己的线程,负责接收、序列化/反序列化以及转发消息(输入/输出队列同理)。
Device对象并非完全线程安全。某些 RPC 调用(例如getLogLevel、setLogLevel、getDdrMemoryUsage)在设置互斥锁后才会变得线程安全(目前可能存在竞争条件)。
看门狗
自定义看门狗超时时间
DEPTHAI_WATCHDOG_INITIAL_DELAY 和 DEPTHAI_BOOTUP_TIMEOUT 设置为所需的超时值(以毫秒为单位),如下所示:Linux/macOS
Command Line
1DEPTHAI_WATCHDOG_INITIAL_DELAY=<my_value> DEPTHAI_BOOTUP_TIMEOUT=<my_value> python3 script.pyPython
1pipeline = depthai.Pipeline()
2
3# 创建 BoardConfig 对象
4config = depthai.BoardConfig()
5
6# 设置参数
7config.watchdogInitialDelayMs = <my_value>
8config.watchdogTimeoutMs = <my_value>
9
10pipeline.setBoardConfig(config)环境变量
| 环境变量 | 描述 |
|---|---|
DEPTHAI_LEVEL | 设置日志详细程度,选项:'trace', 'debug', 'warn', 'error', 'off' |
XLINK_LEVEL | 设置 XLink 库的日志详细程度,选项:'debug', 'info', 'warn', 'error', 'fatal', 'off' |
DEPTHAI_INSTALL_SIGNAL_HANDLER | 设为 0 以禁用安装 Backward 信号处理程序(用于打印堆栈跟踪) |
DEPTHAI_WATCHDOG | 设置设备看门狗超时时间。用于调试(DEPTHAI_WATCHDOG=0)可防止进程暂停期间设备重置。 |
DEPTHAI_WATCHDOG_INITIAL_DELAY | 指定设备看门狗启动前的延迟时间。 |
DEPTHAI_SEARCH_TIMEOUT | 指定阻塞函数中设备搜索的超时时间(毫秒)。 |
DEPTHAI_CONNECT_TIMEOUT | 指定建立到指定设备连接的超时时间(毫秒)。 |
DEPTHAI_BOOTUP_TIMEOUT | 等待设备在发送二进制文件后启动的超时时间(毫秒)。 |
DEPTHAI_PROTOCOL | 将默认搜索限制为指定协议。选项:any, usb, tcpip。 |
DEPTHAI_DEVICE_MXID_LIST | 将默认搜索限制为指定的 MXID。接受逗号分隔的 MXID 列表。列表过滤结果为“AND”而非“OR”方式。 |
DEPTHAI_DEVICE_ID_LIST | MXID 列表的别名。列表过滤结果为“AND”而非“OR”方式。 |
DEPTHAI_DEVICE_NAME_LIST | 将默认搜索限制为指定的名称。接受逗号分隔的名称列表。列表过滤结果为“AND”而非“OR”方式。 |
DEPTHAI_DEVICE_BINARY | 覆盖设备固件二进制文件。主要用于内部调试。 |
DEPTHAI_BOOTLOADER_BINARY_USB | 覆盖设备 USB 引导加载程序二进制文件。主要用于内部调试。 |
DEPTHAI_BOOTLOADER_BINARY_ETH | 覆盖设备网络引导加载程序二进制文件。主要用于内部调试。 |
DEPTHAI_DISABLE_CRASHDUMP_COLLECTION | 设为 1 时,禁用向 Luxonis 发送崩溃转储。默认情况下,崩溃转储、管道、操作系统和 depthai 版本信息会发送给 Luxonis 用于诊断。 |
DEPTHAI_ENABLE_ANALYTICS_COLLECTION | 设为 1 时,分析数据(管道模式)会发送给 Luxonis,用于进一步改进库。 |
参考
class
depthai.Device(depthai.DeviceBase)
class
Config
Device specific configuration
method
method
method
method
getInputQueueNames(self) -> list[str]: list[str]Get all available input queue names Returns: Vector of input queue names
method
method
getOutputQueueNames(self) -> list[str]: list[str]Get all available output queue names Returns: Vector of output queue names
method
method
class
depthai.Device.Config
variable
variable
variable
variable
variable
method