SDKPython SDK

API 参考

对象与方法总表,以及数据与结果模型。

当前版本 · 1.4.0

API 参考

Python SDK 没有为 Sdk 提供 context manager。请使用 try/finally 显式清理:

sdk = Sdk(devices=(...))

try:
    ...
finally:
    sdk.close()

只使用手套功能时,可以在 finally 中调用 glove.close()。关闭后不能继续读取数据或使用已有的 GloveDevice 和 subscription,否则会抛出 ClosedHandleError。

close() 会回收仍然有效的 subscription。只有 SDK 还要继续运行、但需要提前停止某个 callback 时,才调用 subscription.unsubscribe();最终关闭前不需要逐个取消订阅。

推荐清理顺序:

  1. 后台运行时调用 request_stop() 停止产生新数据。
  2. 后台运行时调用 join() 等待线程结束。
  3. 如果设置过震动,按业务需要调用 clear()。
  4. 调用 glove.close() 或 sdk.close(),统一回收剩余 subscription。

公开命令行示例按 Ctrl+C 直接结束进程;正式程序需要主动停止时,使用后台模式执行上述顺序。

Sdk.close() 可重复调用。Glove.close() 会停止并关闭全部已配置手套,应在正常清理路径中调用一次。析构函数只作为异常情况下的兜底,不应代替显式关闭。

对象与方法总表

无参数方法在“参数、类型与默认值”列写“无”。

顶层函数

API用途参数、类型与默认值返回值调用时机主要错误
discover_gloves()查看当前可发现的手套无tuple[DiscoveredGlove, ...]创建 SDK 前顶层发现错误;逐端口错误在结果中

Sdk

API用途参数、类型与默认值返回值调用时机主要错误
Sdk.glove()进入手套功能无GloveSDK 未关闭ClosedHandleError、能力不可用
Sdk.start()启动已配置功能和设备数据流无None准备数据读取和订阅后连接、身份、数据流或生命周期错误
Sdk.update()在当前循环中执行一次 SDK 任务调度无UpdateResult已启动且未使用其他运行方式LifecycleError
Sdk.run_forever()在当前线程持续推进 SDK 调度任务无None已启动且未使用其他运行方式LifecycleError
Sdk.run_background()在后台推进 SDK 调度任务无None已启动且未使用其他运行方式LifecycleError、后台运行错误
Sdk.request_stop()请求正在运行的调度任务停止无None前台或后台运行期间LifecycleError
Sdk.join()等待后台调度线程结束无None已请求后台停止后LifecycleError、后台错误
Sdk.stop()停止运行并断开设备无NoneSDK 已启动停止过程错误
Sdk.close()最终关闭 SDK 并释放资源无None不再使用 SDK 时关闭过程错误;关闭后对象失效
Sdk.health()查看整个 SDK 的健康状态无HealthSDK 未关闭ClosedHandleError

Glove

API用途参数、类型与默认值返回值调用时机主要错误
Glove.device(name=None, *, side=None)从已配置手套中选择一只设备name: str | None = None 或 side: Side | None = None,两者互斥GloveDeviceSDK 创建后NotFoundSelectionError、AmbiguousSelectionError
Glove.sync_time(reference_time_ms)为所有手套 source 设置统一的外部绝对时间基准reference_time_ms: float,有限的 Unix 毫秒值None建议在 start() 前;运行中可再次调用以重新授时InvalidArgumentError、ClosedHandleError 或底层授时错误
Glove.start()启动全部已配置手套和功能无None准备数据读取和订阅后连接、身份、数据流或生命周期错误
Glove.update()在当前循环中执行一次 SDK 任务调度无UpdateResult已启动且未使用其他运行方式LifecycleError
Glove.run_forever()在当前线程持续推进 Retargeting 和恢复等 SDK 调度任务无None已启动且未使用其他运行方式LifecycleError
Glove.run_background()在后台推进 Retargeting 和恢复等 SDK 调度任务无None已启动且未使用其他运行方式LifecycleError、后台运行错误
Glove.request_stop()请求正在运行的调度任务停止无None前台或后台运行期间LifecycleError
Glove.join()等待后台调度线程结束无None已请求后台停止后LifecycleError、后台错误
Glove.stop()停止全部手套并断开设备无NoneGlove 已启动停止过程错误
Glove.close()最终关闭手套功能并释放资源无None不再使用 Glove 时关闭过程错误;关闭后对象失效
Glove.health()查看全部已配置手套的健康状态无HealthGlove 未关闭ClosedHandleError

GloveDevice

API用途参数、类型与默认值返回值调用时机主要错误
GloveDevice.name / GloveDevice.source_id读取配置名称和运行时 source 标识无,propertystr | None / strSDK 未关闭ClosedHandleError
GloveDevice.get_device_info()读取已验证的设备信息快照无DeviceInfoSDK 创建后,可在 start 前UnavailableFeatureError(身份未验证)
GloveDevice.start() / GloveDevice.stop()只启动或停止选中的一只手套无None需要单独控制设备时连接、身份、数据流或生命周期错误
GloveDevice.health()查看所选手套的健康状态无Health设备未关闭时ClosedHandleError
GloveDevice.close()释放所选手套的设备作用域无None不再使用该设备时;关闭后不可重启ClosedHandleError
GloveDevice.pose()读取手套原始姿态无ReadChannel[GlovePose]SDK 创建后;建议 start 前调用生命周期或关闭错误
GloveDevice.imu()读取手套的原始 IMU 数据无ReadChannel[GloveImu]SDK 创建后;建议 start 前调用生命周期、关闭或不支持错误;实验性功能
GloveDevice.status()读取设备连接和恢复状态无ReadChannel[GloveStatus]SDK 创建后;建议 start 前调用生命周期或关闭错误
GloveDevice.skeleton()启用并访问 Skeleton 数据无Skeleton必须在 start 前调用LifecycleError、能力不可用
GloveDevice.skeleton().joint_angles()读取 Skeleton 关节角无ReadChannel[HandJointCommand]skeleton 启用后所属对象已关闭或功能不可用
GloveDevice.skeleton().pose()读取 OpenXR 骨骼节点姿态无ReadChannel[HandSkeletonPose]skeleton 启用后所属对象已关闭或功能不可用
GloveDevice.output(name=None)读取指定 target 的灵巧手输出name: str | None = None;省略时要求 target 唯一ReadChannel[HandJointCommand]SDK 创建后target 未找到或歧义
GloveDevice.haptics()取得指尖震动控制入口无StateChannel[Haptics]串口设备选择后external、无线或断连时不支持或拒绝
GloveDevice.push_frame(frame)向外部输入 source 提交一帧手部数据frame: ExternalGloveFrame,必填GlovePoseexternal device 已 start参数、时间戳或生命周期错误
GloveDevice.calibration_status(name=None)查看指定 target 的标定状态name: str | TargetName | None = None;省略时要求 target 唯一CalibrationReadinessSDK 创建后target 未找到或歧义
GloveDevice.capture_status(package_ids, operator_id)检查该设备的手动采集是否可以开始package_ids: Sequence[str]、operator_id: str,均必填CaptureReadiness创建 Capture Session 前InvalidArgumentError、WorkflowError
GloveDevice.start_capture(package_ids, operator_id, force=False)在该设备上启动手动采集上述参数;force: bool = FalseCaptureSession准备开始采集时InvalidArgumentError、WorkflowError
GloveDevice.start_calibration(completed_capture_session, targets)用该设备已完成的采集启动标定completed_capture_session: CaptureSession;targets 为非空 target 序列,均必填CalibrationSessionCapture 完成且 Session 保持打开Session 或 target 验证错误
GloveDevice.capture_progress()读取当前 Capture 进度无ReadChannel[CaptureProgress]external 交互流程生命周期或关闭错误
GloveDevice.capture_control()提交 Capture 确认、跳过、重试或取消无CaptureControlexternal 交互流程生命周期或控制请求错误
GloveDevice.calibration_progress(name=None)读取指定 target 的 Calibration 进度name: str | TargetName | None = None;省略时要求 target 唯一ReadChannel[CalibrationProgress]标定观察期间target 未找到或歧义

Sdk、Glove 和 GloveDevice 仍提供 connect() 与 disconnect()。connect() 仅为兼容旧代码保留,不会打开设备;disconnect() 等同于 stop()。新代码直接使用 start() 和 stop()。

数据读取与订阅

StateChannel[T] 继承 ReadChannel[T] 的读取能力,同样支持 latest()、subscribe()、next() 和异步迭代,并额外提供 set() 和 clear()。

API用途参数、类型与默认值返回值调用时机主要错误
ReadChannel.latest()读取最近一条数据且不等待无Sample[T] | None所属对象未关闭关闭错误
ReadChannel.subscribe(callback)每次收到新数据时执行 callbackcallback: Callable[[Sample[T]], None],必填Subscription建议在 start 前注册参数或关闭错误
ReadChannel.next() / 异步迭代异步等待下一条或持续读取数据无awaitable Sample[T] / AsyncIterator[Sample[T]]所属对象运行期间取消、关闭或数据流错误
StateChannel.set(value)更新当前震动设置value: Haptics,必填None设备已连接且能力受支持参数、拒绝或断连错误
StateChannel.clear()清除当前震动设置无None设备已连接且能力受支持拒绝或断连错误
Subscription.unsubscribe()提前停止一个 callback无NoneSDK 继续运行但不再需要该 callback 时callback 内同步取消不安全

Capture/Calibration 会话

API用途参数、类型与默认值返回值调用时机主要错误
CaptureControl.confirm() / CaptureControl.skip() / CaptureControl.cancel()确认、跳过或取消当前 Capture 请求request_id: str,必填Noneexternal 交互收到当前请求后空、过期或不适用于当前状态的请求
CaptureControl.retry()重新执行一个 Capture 阶段stage_id: str,必填Noneexternal 交互需要重试阶段时空、未知或当前不可重试的阶段
CaptureSession控制手动采集并读取状态或结果confirm(request_id)、skip(request_id)、retry(stage_id)、cancel()、snapshot()、result()、close()状态、结果或 NoneSession 打开期间过期请求、无效阶段、关闭错误
CalibrationSession控制手动标定并读取或等待结果snapshot()、result()、wait()、cancel()、close()状态、可选结果或结果 tupleSession 打开期间工作流、取消或关闭错误

GloveDevice.capture_status(...) 的参数(设备已由 Glove.device() 选定,不再传 source 或 side):

参数类型必填/默认说明与约束
package_idsSequence[str]必填非空算法包 ID 序列;同时查询多个包时按本次实际需要传入
operator_idstr必填非空佩戴者标识,用于查找该佩戴者可复用的采集

GloveDevice.start_capture(...) 的参数:

参数类型必填/默认说明与约束
package_idsSequence[str]必填非空算法包 ID 序列,决定本次需要完成的采集计划
operator_idstr必填非空佩戴者标识;后续标定结果与该佩戴者关联
forcebool默认 FalseFalse 复用可用采集;True 忽略可复用采集并重新完成当前计划

GloveDevice.start_calibration(...) 的参数:

参数类型必填/默认说明与约束
completed_capture_sessionCaptureSession必填必须由同一个 Sdk 创建、已经完成且仍保持打开
targetsSequence[str | TargetName | None]必填非空且不能重复;名称选择已配置 target,None 选择唯一未命名 target,Skeleton 使用 TargetName.SKELETON

数据与结果模型

以下表格说明公开 API 接收或返回的数据。表中的“可为空”表示该字段是否可能为 None;空序列或空映射会在说明中单独指出。

TelemetryMeta

TelemetryMeta 是手套原始数据附带的来源和帧信息,作为 GlovePose.meta、GloveImu.meta 等字段出现。它同时覆盖实体手套数据和通过 ExternalConnection 提交的外部输入,便于关联 source、设备时间与帧标识。

字段类型可为空说明
sourcestr否产生这条数据的 source ID
timestampfloat否数据时间戳
sequenceint | None是设备或数据源提供的序号
frame_idstr | None是设备或数据源提供的帧标识

Sample[T]

latest() 和 next() 取得 Sample[T];subscribe() 返回 Subscription,注册的 callback 接收 Sample[T]。T 是 GlovePose、GloveImu、HandJointCommand 或 GloveStatus 等具体数据类型;value 保存该数据,其余字段描述 SDK 发布序号和时间。

字段类型可为空说明
valueT否当前业务数据
sequenceint否同一类数据中单调递增的 SDK 序号
source_timefloat | None是数据源时间;数据源没有提供时为 None
observed_atfloat否SDK 接收到数据的时间

source_time 与 observed_at 都不是系统日历时间。

DiscoveredGlove

DiscoveredGlove 是 discover_gloves() 返回的单个发现结果,用于查看候选设备的端口、左右手、SN 和该端口的发现错误。

字段类型可为空说明
portstr否发现的串口路径
handSide | None是成功识别的左右手;识别失败时可能不存在
snstr | None是成功读取的设备 SN
errorGloveDiscoveryIssue | None是该端口的发现错误;成功时为 None

GloveDiscoveryIssue

GloveDiscoveryIssue 作为 DiscoveredGlove.error 出现,说明某个候选端口为什么没有完成身份读取。程序应按稳定的 code 分类处理,message 仅用于展示或记录。

字段类型可为空说明
codeGloveDiscoveryErrorCode否稳定的错误分类,应使用它判断失败原因
messagestr否面向日志或界面展示的错误说明,不用于程序分支判断

DeviceInfo

DeviceInfo 由 get_device_info() 返回,是 SDK 创建期间保存的已验证设备身份快照。它用于展示或记录设备的规范 SN、型号、固件版本和左右手信息。

字段类型可为空说明
canonical_snstr否经过设备身份验证的规范 SN
device_typestr否设备类型
modelstr否设备型号
firmware_versionstr否固件版本
handSide否设备左右手
hand_sourcestr否左右手信息的来源

GloveNodePose

GloveNodePose 表示一个手部节点的位置和旋转。它既用于构造 ExternalGloveFrame 的指尖输入,也作为 GloveFeaturePayload 中根节点和指尖姿态的字段类型。

字段类型可为空说明
positiontuple[float, float, float]否三维位置,单位为米
quaternion_xyzwtuple[float, float, float, float]否XYZW 顺序的旋转四元数

ExternalGloveFrame

ExternalGloveFrame 是传给 push_frame() 的外部手部帧,用于在没有实体手套输入时提交五个指尖的姿态和可选时间戳。

字段类型可为空说明
thumbGloveNodePose否拇指指尖姿态
indexGloveNodePose否食指指尖姿态
middleGloveNodePose否中指指尖姿态
ringGloveNodePose否无名指指尖姿态
pinkyGloveNodePose否小指指尖姿态
timestamp_msfloat | None是推荐输入;有限的毫秒时间戳,省略时沿用当前共享时间基准;时间语义见时间戳与外部授时
timestamp_secfloat | None是已废弃的兼容输入;SDK 会乘以 1000 转为毫秒,不得与 timestamp_ms 同时设置

GloveFeaturePayload

GloveFeaturePayload 是 GlovePose.payload 的内容,保存一帧手套原始姿态中的根节点、五指姿态和有效性信息。

字段类型可为空说明
glove_idstr否手套数据标识
timestamp_msfloat否设备数据时间,单位为毫秒
root_poseGloveNodePose否手部根节点姿态
fingertip_worlddict[GloveFinger, GloveNodePose]否五指指尖在世界坐标系中的姿态
fingertip_localdict[GloveFinger, GloveNodePose]否五指指尖相对根节点的局部姿态
hand_sidestr否帧中报告的左右手
finger_namestuple[GloveFinger, ...]否当前帧包含的手指顺序
raw_valid_maskdict[GloveFinger, bool]否各手指原始数据是否有效
held_maskdict[GloveFinger, bool]否各手指是否沿用上一条有效值
quality_flagstuple[str, ...]否当前帧的质量标记,可为空序列

GlovePose

GlovePose 是 device.pose() 发布的手套原始姿态,也是 push_frame() 接受外部帧后返回的解析结果。它组合来源信息、姿态内容和可扩展质量信息。

字段类型可为空说明
metaTelemetryMeta否source、时间和帧标识
payloadGloveFeaturePayload否根节点、指尖和质量状态
qualitydict[str, object]否可扩展质量信息,可为空映射

GloveImuPayload

GloveImuPayload 是 GloveImu.payload 的内容,保存一帧 IMU 的有效状态、三轴陀螺仪计数和三轴加速度计计数。

字段类型可为空说明
validbool否当前 IMU 原始计数是否有效
gyroscope_rawtuple[int, int, int]否三轴陀螺仪原始计数
accelerometer_rawtuple[int, int, int]否三轴加速度计原始计数

GloveImu

GloveImu 是 device.imu() 发布的 IMU 原始数据,组合来源信息、六轴原始计数和可扩展质量信息。

字段类型可为空说明
metaTelemetryMeta否source、时间和帧标识
payloadGloveImuPayload否有效状态及六轴原始计数
qualitydict[str, object]否可扩展质量信息,可为空映射

HandJointCommand

HandJointCommand 表示一组关节角输出,包含 target、关节名到角度的映射、输出时间、可选 source 和 metadata。device.output() 与 skeleton().joint_angles() 都提供这类数据的读取;每次读取获得 Sample[HandJointCommand],其中 sample.value 才是 HandJointCommand。该类型本身不规定固定的关节名称和数量。

字段类型可为空说明
targetstr否目标标识
jointsdict[str, float]否关节名称到目标位置的映射
timestampfloat否输出时间戳
sourcestr | None是产生该输出的 source ID
metadatadict[str, object]否算法附加信息,可为空映射

Skeleton 固定关节

当数据来自 skeleton().joint_angles() 时,HandJointCommand.joints 固定包含以下 25 个 active joints。名称中的 <side> 替换为 left 或 right;你的代码应按关节名读取,不能依赖 JSON/字典的键遍历顺序。

索引关节名
0<side>_thumb_cmc_abduction
1<side>_thumb_cmc_flexion
2<side>_thumb_cmc_opposition
3<side>_thumb_mcp_abduction
4<side>_thumb_mcp_flexion
5<side>_thumb_ip_flexion
6<side>_index_mcp_abduction
7<side>_index_mcp_flexion
8<side>_index_pip_flexion
9<side>_index_dip_flexion
10<side>_middle_mcp_abduction
11<side>_middle_mcp_flexion
12<side>_middle_pip_flexion
13<side>_middle_dip_flexion
14<side>_ring_cmc_cup
15<side>_ring_mcp_abduction
16<side>_ring_mcp_flexion
17<side>_ring_pip_flexion
18<side>_ring_dip_flexion
19<side>_little_cmc_opposition
20<side>_little_cmc_cup
21<side>_little_mcp_abduction
22<side>_little_mcp_flexion
23<side>_little_pip_flexion
24<side>_little_dip_flexion

device.output() 提供的灵巧手输出仍使用 HandJointCommand,但关节名称和数量由对应灵巧手算法包定义,不使用上述 Skeleton 固定列表。

HandSkeletonPose

HandSkeletonPose 是 skeleton().pose() 发布的 OpenXR 骨骼节点姿态,用于按相同索引读取 25 个节点的名称、位置和旋转。

字段类型可为空说明
timestamp_msfloat否骨骼输出时间,单位为毫秒
hand_sideSide否左右手
coordinate_framestr否当前为 wrist_local
namestuple[str, ...]否25 个骨骼节点名称,顺序与位置和旋转数组一致
positions_localtuple[tuple[float, float, float], ...]否25 个 wrist-local 节点位置
orientations_local_xyzwtuple[tuple[float, float, float, float], ...]否25 个 wrist-local 节点 XYZW 四元数

Haptics

Haptics 同时用于 set() 的输入,以及 latest() 和 subscribe() 取得的震动输出状态。device.haptics() 返回指尖震动控制和读取入口,不直接返回 Haptics。

字段类型可为空说明
strengthsdict[GloveFinger, int]否手指到 0..100 整数震动强度的映射;可为空映射,未列出的手指不包含在当前震动设置中

GloveStatus

GloveStatus 是 device.status() 发布的设备状态,用于观察当前连接、数据是否过期、最近错误和成功恢复次数。

字段类型可为空说明
device_typestr否设备类型
connectedbool否当前是否已连接
stalebool否当前数据是否已经过期或尚未开始流动
timestampfloat否状态时间戳
last_errorstr | None是最近一次设备错误;没有错误时为 None
reconnect_countint否成功恢复连接的累计次数
fieldsdict[str, object]否设备类型相关的附加状态,可为空映射

DeviceHealth

DeviceHealth 是 Health.devices 中每条 source 对应的设备健康摘要,用于同时查看多只手套的连接、数据时效和最近错误。

字段类型可为空说明
connectedbool否设备是否已连接
stalebool否设备数据是否过期或尚未开始流动
last_errorstr | None是最近一次设备错误

Health

Health 由 sdk.health() 或 glove.health() 返回,用于汇总 SDK 或全部手套的告警、错误、设备状态和调度状态。

字段类型可为空说明
okbool否当前汇总状态是否健康
warning_countint否当前汇总中的告警数量
error_countint否当前汇总中的错误数量
devicesdict[str, DeviceHealth]否source ID 到设备健康状态的映射
last_errorstr | None是最近一次 SDK 错误
runtime_overrunbool否SDK 调度是否发生过超时
topic_callback_errorbool否callback 是否发生过未处理异常

CalibrationReadiness

CalibrationReadiness 由 device.calibration_status() 返回,用于判断指定 target 对当前佩戴者是否无需标定、可以直接使用或需要重新标定。

字段类型可为空说明
stateCalibrationReadinessState否NOT_REQUIRED、READY 或 NEEDS_CALIBRATION
operator_idstr否本次判断使用的佩戴者标识

UpdateResult

UpdateResult 由 sdk.update() 或 glove.update() 返回,用于查看本次手动调度执行了多少任务、是否仍有后续任务,并等待下一项任务到期。

字段类型可为空说明
tickint否当前更新序号
ran_task_countint否本次执行的任务数量
has_next_taskbool否是否还有后续调度任务
sleep()() -> SleepResult—等待下一项任务到期;每个结果只能调用一次

Capture 模型

Capture 类型共同描述采集计划、开始前的准备状态、运行进度、Session 快照和最终结果。

CapturePlanStage

CapturePlanStage 是 CapturePlan.stages 中的一个动作阶段,用于告诉程序应展示什么动作、需要采集多少样本以及是否允许跳过。

字段类型可为空说明
stage_idstr否动作阶段标识
promptstr否展示给佩戴者的动作提示
required_sample_countint否完成阶段需要的样本数
optionalbool否是否允许跳过

CapturePlan

CapturePlan 作为 CaptureReadiness.plan 和 CaptureSessionSnapshot.plan 出现,说明本次 Capture 涉及哪些算法包以及阶段执行顺序。

字段类型可为空说明
package_idstuple[str, ...]否本次计划覆盖的算法包 ID
stagestuple[CapturePlanStage, ...]否按顺序执行的采集阶段

CaptureStageReadiness

CaptureStageReadiness 是 CaptureReadiness.stages 中一个阶段的准备状态,用于判断该阶段可复用已有数据还是需要重新采集。

字段类型可为空说明
stage_idstr否阶段标识
required_sample_countint否所需样本数
stateCaptureStageReadinessState否REUSABLE 或 NEEDS_CAPTURE

CaptureReadiness

CaptureReadiness 由 GloveDevice.capture_status() 返回,用于在创建 Capture Session 前查看整体准备状态、采集计划和各阶段是否需要采集。

字段类型可为空说明
stateCaptureReadinessState否NOT_REQUIRED、READY 或 NEEDS_CAPTURE
planCapturePlan否解析后的采集计划
stagestuple[CaptureStageReadiness, ...]否各阶段准备状态

CaptureStageProgress

CaptureStageProgress 作为 CaptureProgress.stage 和 CaptureSessionSnapshot.stage_progress 的元素出现,用于驱动动作提示、样本进度和当前允许的交互。

字段类型可为空说明
stage_idstr否当前阶段标识
promptstr否当前动作提示
optionalbool否当前阶段是否允许跳过
stateCaptureStageState否当前阶段状态
originCaptureStageOrigin否新采集或复用已有采集
collected_sample_countint否已采集样本数
required_sample_countint否所需样本数
request_idstr | None是当前确认或控制请求标识

CaptureFailure

CaptureFailure 作为 CaptureProgress.failure 和 CaptureSessionSnapshot.failure 出现,用稳定代码和可读消息说明 Capture Session 的失败原因。

字段类型可为空说明
codestr否稳定失败代码
messagestr否展示或记录用失败说明

CaptureProgress

CaptureProgress 由 device.capture_progress() 发布,用于外部交互界面持续显示当前 source、佩戴者、Session 状态和动作阶段。

字段类型可为空说明
session_idstr否Capture Session 标识
session_stateCaptureSessionState否Session 状态
failureCaptureFailure | None是Session 失败信息
source_idstr否采集使用的 source ID
sideSide否采集左右手
operator_idstr否佩戴者标识
stageCaptureStageProgress否当前阶段进度

CaptureSessionSnapshot

CaptureSessionSnapshot 由 CaptureSession.snapshot() 返回,是手动 Capture Session 的当前完整快照,用于显示进度并决定下一项允许的操作。

字段类型可为空说明
sideSide否采集左右手
planCapturePlan否本次采集计划
stateCaptureSessionState否Session 状态
current_stagestr | None是当前阶段标识
request_idstr | None是当前控制请求标识
collected_sample_countint否当前阶段已采集样本数
required_sample_countint否当前阶段所需样本数
remaining_stagestuple[str, ...]否尚未完成的阶段
stage_progresstuple[CaptureStageProgress, ...]否全部阶段进度
allowed_operationstuple[CaptureControlAction, ...]否当前允许的控制操作
next_actionstr否下一步操作提示
failureCaptureFailure | None是Session 失败信息

CaptureStageSamples

CaptureStageSamples 是 CaptureResult.stage_samples 中一个阶段的采集摘要,用于查看该阶段最终保存了多少帧。

字段类型可为空说明
stage_idstr否阶段标识
frame_countint否该阶段保存的帧数

CaptureResult

CaptureSession.result() 返回 CaptureResult | None:Session 完成后得到本次采集结果,尚未完成时得到 None。CaptureResult 记录本次采集的佩戴者、左右手、完成时间和各阶段帧数摘要。

字段类型可为空说明
operator_idstr否佩戴者标识
sideSide否采集左右手
created_atfloat否采集结果创建时间
stage_samplestuple[CaptureStageSamples, ...]否各阶段保存的帧数摘要

Capture 会话相关枚举的取值:

枚举取值
CaptureSessionStateRUNNING、COMPLETED、FAILED、CANCELLED
CaptureStageStatePENDING、AWAITING_CONFIRMATION、COLLECTING、COMPLETED、SKIPPED
CaptureStageOriginNEW_CAPTURE、REUSED
CaptureControlActionCONFIRM、RETRY、SKIP、CANCEL

Calibration 模型

Calibration 类型按 target 描述计算进度,并提供整个 Session 的快照和最终结果。

CalibrationJobFailure

CalibrationJobFailure 作为 CalibrationJobProgress.failure 出现,用稳定代码和可读消息说明某个 target 的标定失败原因。

字段类型可为空说明
codestr否稳定失败代码
messagestr否展示或记录用失败说明

CalibrationJobProgress

CalibrationJobProgress 作为 CalibrationProgress.job 和 CalibrationSessionSnapshot.jobs 的元素出现,用于查看单个 target 的标定状态和失败信息。

字段类型可为空说明
target_idstr否target 标识
stateCalibrationJobState否当前 target 的标定状态
failureCalibrationJobFailure | None是当前 target 的失败信息

CalibrationProgress

CalibrationProgress 由 device.calibration_progress() 发布,用于外部交互界面持续显示一个 target 在当前 Calibration Session 中的计算状态。

字段类型可为空说明
session_idstr否Calibration Session 标识
source_idstr否标定使用的 source ID
jobCalibrationJobProgress否当前 target 的标定进度

CalibrationSessionSnapshot

CalibrationSessionSnapshot 由 CalibrationSession.snapshot() 返回,用于一次查看整个 Session 及其全部 target 的当前状态。

字段类型可为空说明
stateCalibrationSessionState否Session 状态
jobstuple[CalibrationJobProgress, ...]否按 targets 顺序排列的任务状态

CalibrationResult

CalibrationResult 是标定结果集合中的单个 target 结果,用于记录已保存标定的记录 ID、source、target 和创建时间。CalibrationSession.result() 返回 tuple[CalibrationResult, ...] | None,wait() 返回 tuple[CalibrationResult, ...]。

字段类型可为空说明
record_idstr否保存后的标定记录标识
source_idstr否标定使用的 source ID
target_idstr否标定对应的 target ID
created_atfloat否标定结果创建时间

CalibrationSessionState 和 CalibrationJobState 的值均为 RUNNING、COMPLETED、FAILED、CANCELLED,其中 CalibrationJobState 还包含等待执行的 PENDING。