设备
设备
设备 API
Device 对象代表一个 OAK 设备。启动设备时,您必须向其上传一个 Pipeline,该 Pipeline 将在 VPU 上执行。 在代码中创建设备时,固件会与 Pipeline 和其他资产(例如 NN blob)一起上传。Python
1pipeline = depthai.Pipeline()
2
3# 创建节点,配置它们并将它们链接在一起
4
5# 连接到设备并将其上的 Pipeline 上传
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# 配置 Pipeline
6with dai.Device(pipeline) as device:
7 # 第一个值:timesync 运行之间的间隔
8 # 第二个值:每次运行用于计算更好值的 timesync 样本数
9 # 第三个值:如果为 true,则将在随机间隔执行部分 timesync 请求,否则将在固定间隔执行
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)这样的小型 SBC,并且正在流式传输大型帧(例如未编码的 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 可禁用安装用于打印堆栈跟踪的后向信号处理程序 |
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