快照
快速开始
- 仅创建一次
EventsManager(例如,在管道/设备设置旁)。 - 在主应用类或上下文中保留对其的引用。
- 每当需要将视觉数据上传到Luxonis Hub时,调用
sendSnap()。
| 参数 | 描述 | 示例 |
|---|---|---|
Name | 快照的主要标识符 | car_detected, gate_open, image |
Files | 随快照上传的附件 | ImgFrame, ImgDetections |
Tags(可选) | 用于分组和筛选的额外过滤器 | dataset_collection, 数据集1, 位置72, 装配线17 |
Extras(可选) | 用于分组和筛选的额外过滤器 | 汽车品牌:volvo, 状态:开启, 位置:纽约 |
Success Callback(可选) | 上传尝试成功后的回调 | on_success |
Failure Callback(可选) | 上传尝试失败后的回调 | on_failure |
快照限制
| 字段 | 规则 |
|---|---|
Name | 1–56 字符(必填) |
Files | 每个快照最多20个文件(最少1个必填) |
Tags | 最多20个标签;每个1–56字符 |
Extras | 最多25个条目;extras.key 1–40字符;extras.value 0–100字符 |
- 最大文件大小
- 剩余存储空间
- 文件上传的小时限制(文件数量和带宽)
- 发送的事件和快照的小时限制
注意: 调用sendSnap()仅验证基本参数并将快照排队等待上传。这并不保证快包已发送到Hub。sendSnap()在快照成功排队时返回本地快照ID(字符串),否则返回None/nullopt。成功排队不确认投递或文件上传。 要获知上传尝试完成的通知,请向sendSnap()传递successCallback和failureCallback参数。
身份验证
oakctl运行应用程序,身份验证将为您处理。您不需要自己提供API密钥。对于oakctl run-script,使用您通过oakctl hub login登录的团队。 对于oakctl app run,使用设备所连接的团队。要发送快照,必须定义团队的API密钥。通常通过DEPTHAI_HUB_API_KEY环境变量设置,或在创建EventsManager实例时传递。在独立模式下运行并采用到Hub时,DEPTHAI_HUB_API_KEY会预填充。EventsManager构造函数的API密钥参数是可选的,未设置时默认为空字符串("")。如果在构造函数中传递了非空API密钥,则优先使用它而非DEPTHAI_HUB_API_KEY。仅当DEPTHAI_HUB_API_KEY未设置,或您有意覆盖它时,才设置构造函数中的API密钥。有关API密钥最佳实践及实用示例,请 点击此处。使用ImgFrame和ImgDetections发送快照
Python
Python
1# 创建 EventsManager 实例
2eventMan = dai.EventsManager()
3
4# 发送包含 ImgFrame 和 ImgDetections 的快照
5localSnapID = eventMan.sendSnap(
6 name="snap_name",
7 fileTag="file_tag",
8 imgFrame=inImgFrame,
9 imgDetections=inImgDetections,
10 tags=["examples", "python"],
11 extras={"confidence": "0.75", "location": "01"},
12 successCallback=uploadSuccessCallback,
13 failureCallback=uploadFailureCallback
14)Python
Python
1# 创建 EventsManager 实例
2eventMan = dai.EventsManager()
3
4# 发送带有 ImgFrame 的快照
5localSnapID = eventMan.sendSnap(
6 name="snap_name",
7 fileTag=None,
8 imgFrame=inImgFrame,
9 imgDetections=None,
10 tags=[],
11 extras={}
12)在退出前等待待处理的上传
sendSnap() 会将上传任务排队,然后在后台处理。如果 EventsManager 实例在上传仍处于待处理状态时被销毁,这些上传将被丢弃。在应用程序退出前,请调用 waitForPendingUploads(timeoutMs) 以保持 EventsManager 处于活动状态,直到处理完待上传文件。timeoutMs 参数是可选的,默认为 0。值为 0 意味着调用将无限期等待,直到上传完成、连接断开或管理器停止。waitForPendingUploads(timeoutMs) 在所有待处理上传完成时返回 true。如果达到所选超时时间、连接断开或管理器停止,则返回 false。注意: 当许多快照处于待处理状态(排队或缓存)时,此等待可能需要很长时间。
上传回调参数(可选)
sendSnap() 可以在上传尝试完成后调用可选的 successCallback 和 failureCallback 参数。如果您需要确认快照上传或从 SendSnapCallbackResult 获取更多信息(如成功上传后的 Hub ID、有效载荷或上传状态),请使用这些参数。Python
Python
1# 定义可选的回调函数
2def uploadSuccessCallback(sendSnapResult):
3 print(f"Successfully uploaded Snap: {sendSnapResult.snapName} to the hub.")
4
5def uploadFailureCallback(sendSnapResult):
6 print(f"Upload of Snap: {sendSnapResult.snapName} to the hub has failed.")
7
8# 创建 EventsManager 实例
9eventMan = dai.EventsManager()
10
11# 发送带有 ImgFrame 和 ImgDetections 的快照
12localSnapID = eventMan.sendSnap(
13 name="snap_name",
14 fileTag="file_tag",
15 imgFrame=inImgFrame,
16 imgDetections=inImgDetections,
17 tags=["examples", "python"],
18 extras={"confidence": "0.75", "location": "01"},
19 successCallback=uploadSuccessCallback,
20 failureCallback=uploadFailureCallback
21)Sending snaps (python)
Sending snaps (C++)
高级用法:使用 FileGroup 发送快照
FileGroup。您也可以显式创建 FileGroup。当发送 FileGroup 时,所有包含的文件将一起上传到 Luxonis Hub。该组的上传将完全成功或失败,具体取决于您分配的存储容量——该容量必须足够容纳组中的所有文件。以下示例使用显式的 FileGroup 对象展示了相同的功能。此方法涉及创建一个 FileGroup 实例,并向其中添加文件。 常见的文件对,如 ImgFrame 和 ImgDetections, 可以同时添加,也可以作为单独的文件分别添加。 更多信息可以 在 FileGroup 类文档中找到。Python
Python
1# 创建 EventsManager 实例
2eventMan = dai.EventsManager()
3
4# 创建 FileGroup 实例
5fileGroup = dai.FileGroup()
6
7# 向 fileGroup 添加文件
8fileGroup.addImageDetectionsPair("file_tag", inImgFrame, inImgDetections)
9
10# 使用 fileGroup 发送快照
11localSnapID = eventMan.sendSnap(
12 name="snap_name",
13 fileGroup=fileGroup,
14 tags=["examples", "python"],
15 extras={"confidence": "0.75", "location": "01"}
16)使用 FileGroup 发送快照 (Python)
使用 FileGroup 发送快照 (C++)
缓存
概述
sendSnap() 且快照经过多次重试尝试后仍无法送达 Hub 时,该快照会被丢弃。如果你希望在 网络中断期间保留快照,可以启用本地缓存。启用后,上传失败的快照将存储在本地,并在连接恢复后重新传输。启用缓存
EventsManager 实例上调用 setCacheIfCannotSend() 方法:Python
Python
1# 创建 EventsManager 实例
2eventMan = dai.EventsManager()
3
4# 启用无法发送的快照的缓存
5eventMan.setCacheIfCannotSend(True)配置缓存目录
setCacheDir() 方法:Python
Python
1# 创建 EventsManager 实例
2eventMan = dai.EventsManager()
3
4# 启用缓存
5eventMan.setCacheIfCannotSend(True)
6
7# 设置自定义缓存目录
8eventMan.setCacheDir("/path/to/cache/directory")