一、前言

在“桌面三维记录册”的任务详情页中,“开始重建”只是一个入口。用户真正需要知道的是:输入是否被接收、重建是否完成、结果是否保存。这三个问题需要分别回答,否则一个持续变化的进度值,很容易被误读为整条流程已经可靠运行。

前三篇是关于实验档案、采集协议和质量观察结构,目前尚无可用批次、实机日志或产物。本篇据此规划第一次任务的执行与记录方法,实际结果保持待填写;不能将尚未执行写成重建失败,也不能宣称已经跑通。

证据可以回答的问题不能直接推出的结论
推入调用返回本次输入调用的结果该帧被选为关键帧、重建成功
启动调用返回本次启动调用的结果重建已经完成
有效进度查询查询时取得的过程信息重建或保存成功
完成通知及其结果按对应API契约解释阶段结果仅收到通知便代表成功
文件检查文件归属及实际文件信息可加载、质量可用、可自由浏览

这个分层是应用的记录设计。系统提供重建与保存能力,应用负责将调用、通知和文件关联到同一次任务;外部测量工具承担的性能观测留给后续实验。

二、变量与条件

2.1 固定环境与输入范围

任务继续引用experimentId、sampleId、baselineId、captureBatchId、environmentRef和sessionRecordRef,新增应用标识reconstructionTaskId。环境引用应指向当次确定的记录,避免修改设备信息后让旧任务失去原来的条件。

当次条件当前值填写依据
设备型号、芯片待填写目标实机信息
系统完整构建号待填写实际系统信息
SDK版本、API级别待填写实际开发环境
样本、批次待关联前三篇档案
输入路径待确定AR Engine或自组帧路径

2.2 核验输入可用性,再建立任务

第3篇的inputAvailability需要区分三种情况:输入仍在现存有效会话中、仅有证据索引、尚需采集。图片或日志能被找到,不代表能够重新推入;会话记录也不是可跨退出恢复的会话对象。

本篇主线是在一次受控流程中,新建会话、采集推入,再重建和保存。基准批次与带异常观察标签的批次逐个执行,各自关联独立会话。标签不放宽输入约束,也不能让多个批次混入同一输入集合。

前置条件继续所需依据未满足时的处理
能力与依赖支持查询及目标SDK依赖核验停止依赖该能力的步骤
工作目录已存在且属于应用文件目录子目录先处理目录问题
输入检查尺寸、对应关系、有效性依据停止相关推入
输入可用性有效会话与输入关联,或新采集安排不从索引假定可重放
阶段判定返回值、回调及保存条件的API契约不提交无法可靠管理的任务

C1是应用自定义任务骨架。标识实际建档时分配,null表示未知,notExecuted表示未执行;事件分别记录,避免一个rawStatus覆盖所有阶段。

{
  "reconstructionTaskId": null,
  "experimentId": null,
  "sampleId": null,
  "baselineId": null,
  "captureBatchId": null,
  "environmentRef": null,
  "sessionRecordRef": null,
  "inputAvailability": null,
  "executionState": "notExecuted",
  "inputCheckRefs": [],
  "spatialPushRecordRefs": [],
  "reconstruction": {
    "executionState": "notExecuted",
    "rawStatus": null,
    "callbackResult": null,
    "evidenceRefs": []
  },
  "saving": {
    "executionState": "notExecuted",
    "rawStatus": null,
    "callbackResult": null,
    "evidenceRefs": []
  },
  "eventRecordRefs": [],
  "evidenceRefs": []
}

在这里插入图片描述

图4为任务准备界面规划,各项待关联或待核验,不代表已有可恢复会话。

三、执行过程

3.1 支持查询、创建会话与输入接收

沿用第1篇的头文件与库依赖,先调用HMS_SpatialRecon_IsSupport。资料明确支持返回SPATIAL_RECON_STATUS_SUCCESS,不支持返回SPATIAL_RECON_STATUS_DEVICE_NOT_SUPPORT。其他无法解释的结果保留原值,不自动归为支持。

创建前核对workPath已经存在,并且属于应用文件目录子目录。随后调用HMS_SpatialRecon_CreateSession,保存返回值,将成功创建的spatialReconSession关联到本任务的会话记录。

输入检查沿用第2篇:图像必须宽1080、高1440,且与相机内参、位姿对应。AR路径先更新计算结果,再检查和推入;自组HMS_SpatialRecon_DataFrame路径遵守RGB约束,字段与数据生命周期未核清时不补写实现。

逐次保留arUpdate、inputCheck和spatialPush。AR更新返回值按AREngine_ARStatus解释,推入返回值按HMS_SpatialReconStatus解释。记录成功推入调用,只能说明相应调用结果;系统自动选取关键帧,采集帧数、推入次数和成功返回次数都不能代替关键帧数。

3.2 启动重建与设置运行模式

指南允许启动时传入保存配置,在重建结束后自动保存;也允许writeInfo为空,之后手动保存。本篇选择后者,使重建和保存各自拥有提交记录与结果证据。代价是应用必须管理两段流程之间的条件检查。

每次调用HMS_SpatialRecon_StartSession之后,都要依据当时应用前后台情况调用HMS_SpatialRecon_SetRunningMode,记录应用状态与设置动作。不能把示例中的前台模式无条件照搬到后台任务。

系统限制同一时刻只能有一个会话重建。本文进一步采用一次只处理一个任务的应用策略:重复点击、切换批次或返回任务页面,都不能再次提交同一任务。页面展示与任务持有者分离,是为保持调度一致,不意味着系统已经提供后台恢复能力。

C2将输入与启动串起来。它是text伪代码,中文动作属于应用职责;回调入口、返回解释及生命周期契约必须先核验,不能直接作为完整C/C++实现使用。

前提:目标SDK依赖、输入有效性和任务生命周期契约已核清
前提:旧式完成回调的类型、结果语义及安全交接方式已核清
若前提不足:记录缺口,停止依赖步骤
由应用取得单任务执行权,关联 reconstructionTaskId

supportStatus ← HMS_SpatialRecon_IsSupport(SPATIAL_RECON_MODEL_TYPE_GS)
保存 supportStatus 原值
若 supportStatus != SPATIAL_RECON_STATUS_SUCCESS:停止依赖步骤
核对 workPath 已存在且属于应用文件目录子目录
spatialReconSession ← nullptr
createStatus ← HMS_SpatialRecon_CreateSession(
    SPATIAL_RECON_MODEL_TYPE_GS, workPath, &spatialReconSession)
保存 createStatus 原值
若 createStatus != SPATIAL_RECON_STATUS_SUCCESS:停止依赖步骤
关联 sessionRecordRef;按第2篇协议准备 arSession、arFrame

对本批每次计划输入:
    arUpdateStatus ← HMS_AREngine_ARSession_Update(arSession, arFrame)
    保存 arUpdate 原始记录
    若不能确认更新成功:记录原因,停止本次推入
    检查宽1080、高1440、图像与相机信息对应及数据有效性
    保存 inputCheck;若未通过或待核验:停止本次推入
    spatialPushStatus ← HMS_SpatialRecon_PushARFrame(
        spatialReconSession, arSession, arFrame)
    保存 spatialPush 原值、调用序号、帧及批次关联
    若异常或无法解释:停止后续推入并复核

确认本批输入满足启动前提,且不存在其他重建任务
在调用前建立任务与完成事件的关联,并记录启动起点
startStatus ← HMS_SpatialRecon_StartSession(
    spatialReconSession, nullptr, 已核验的重建完成回调入口)
按当前前后台情况调用 HMS_SpatialRecon_SetRunningMode
分别保存 startStatus、运行模式设置动作及可取得的返回信息
按已核验语义处理提交结果;不直接标记重建成功
所有提前停止分支均交由C3检查收尾条件,不直接销毁会话

在这里插入图片描述

图1为依据重建指南组织的时序规划,不是实际执行轨迹;回调时机、结果语义和线程契约仍须按目标SDK核验。

3.3 进度、完成通知与应用状态

HMS_SpatialRecon_GetProgress提供进度查询入口。一次查询应同时记录调用返回值、取得的数据和时间;查询失败或数据有效性不明时,不应把初始化值显示为新进度。若保留上次有效数据,界面还需说明其采样时间。

当前资料没有完整给出进度范围与换算规则,因此本文不将数值换算成百分比,也不设置“达到某数即成功”的条件。阶段信息若被使用,应按HMS_SpatialReconStage单独解释,不能与HMS_SpatialReconStatus混存为同一种状态。

应用的executionState则表达自身认知:尚未执行、等待结果或结果待确认等。这些是应用状态,不是新增SDK枚举。完成通知到达后,应先保留原始结果,再按匹配SDK的契约判断;通知缺失、归属不明或语义未核清时,都不能推进为成功。

回调到页面之间规划应用事件交接:先关联任务并保存事件,再由受控处理流程更新页面。不能假定回调运行于UI线程,也不能在回调中直接销毁会话。事件应保留来源、任务、会话、接收时间和原始数据;迟到或重复事件需要复核,不能仅凭当前打开的页面决定归属。

C3概括进度、完成通知、保存与收尾的分支。它规定证据处理顺序,未提供缺失的成功枚举、回调注册实现或线程同步实现。

收到查询结果或完成事件:
    先保存来源、任务关联、时间及原值
    若任务归属或类型语义不明:标记待确认,停止依赖动作

处理进度查询:
    保存 HMS_SpatialRecon_GetProgress 的调用返回值
    仅在查询及输出有效性确认后记录有效进度
    阶段值另存;不由进度值判定成功

处理重建完成事件:
    按已核验契约解释结果
    若明确失败:记录重建失败及依据,不提交保存
    若结果未知:保持待确认,不提交保存
    若重建成功且允许保存的条件已确认:
        核验 HMS_SpatialRecon_ModelWriteInfo 的完整配置
        核验保存通知契约及所选格式的约束
        若配置或契约不足:记录缺口,不调用保存
        否则建立保存事件关联、记录保存起点
        调用 HMS_SpatialRecon_SaveResultToFile
        单独保存调用返回;按契约解释,不直接标记保存成功

处理保存完成事件:
    单独保存通知原值及解释依据
    若结果未知:保持待确认
    若明确失败:记录保存失败
    若确认成功:检查本任务实际文件,另存检查结果
    文件检查不自动推进为加载或质量验证通过

暂停或继续:
    按接口前提提交请求,记录动作、可取得的返回及后续观测
    不将暂停请求视作任务结束

准备收尾:
    停止新操作,停止并协调查询及事件处理中的会话访问
    只有全部相关任务已结束且无并发访问时:
        HMS_SpatialRecon_DestroySession(spatialReconSession)
        清除持有的引用,之后不再操作该会话
    若结束条件不明:保留待确认记录,不强制销毁

在这里插入图片描述

图2为空记录页面规划,显示“暂无记录”,不包含实机日志、进度曲线或成功通知。

3.4 单独提交保存,再检查实际文件

确认重建结果及允许保存的条件后,才准备HMS_SpatialRecon_ModelWriteInfo并调用HMS_SpatialRecon_SaveResultToFile。资料示例省略了完整保存配置,不能只填写modelFormat便视为可靠实现;输出位置、格式相关配置及其有效期仍需补充API依据。

重建指南支持讨论PLY与运镜MP4,当前没有实际输出格式。选择MP4时还必须遵守同一时刻只有一个会话保存MP4的限制。本文的单任务策略覆盖这一调度要求,但不能推广为系统允许任意其他并发组合。

保存调用返回、保存完成通知和文件检查分别记录。例如,未来若收到明确成功通知,但尚未检查文件,页面可以分别呈现通知结果与“文件未检查”,不能将整个交接对象标为已验证可用。

文件检查需要确认任务归属、位置、实际大小、生成时间与格式核验依据,排除误把旧文件作为本次产物。扩展名和非零大小只提供有限信息,不能证明兼容性。
在这里插入图片描述

图3为文件检查规划,状态“未检查”、大小“—”,不展示已有文件或模型缩略图。

3.5 暂停、异常和会话收尾

启动重建以后可用HMS_SpatialRecon_PauseSession暂停、用HMS_SpatialRecon_ResumeSession继续。请求、返回与后续观测分别保存;发出暂停请求不等于已经取消任务,更不等于可以释放会话。

指南建议订阅COMMON_EVENT_THERMAL_LEVEL_CHANGED热公共事件,并在相应过热条件下暂停和提示。本文保留这一建议,具体订阅实现与阈值待依据补齐。热等级事件按原值记录,不换算为温度测量值。

异常处理中,明确失败、未执行、应用等待超时和结果未知各自保留。应用等待超过预设时限,只能说明没有在该时限内确认结果,不能证明SDK已经终止。

会话指南要求所有相关任务完成后才能销毁,且不保证会话具备并发能力。收尾需要停止新操作,协调查询和事件处理,确认无并发访问后再销毁。页面退出、换批次以及等待超时,都不能替代这些条件。

四、观测结果

4.1 阶段结果与计时边界

当前各阶段均未执行。下表是待填写记录,null表示未知,界面显示“—”。“无”表示当前没有关联的实机证据,不代表实际执行后未发生事件。

检查项执行状态调用返回/通知结果实机证据引用当前结论缺失资料
支持与会话未执行null/不适用无能力及创建结果未知环境、查询与创建记录
输入接收未执行null/不适用无尚无可用输入证明批次、检查及推入记录
重建未执行null/null无尚无完成结果判定契约、调用与通知
保存未执行null/null无尚无保存结果保存配置、调用与通知
文件检查未执行不适用无尚无可交接产物实际文件与检查依据

计时采用应用观测边界:重建从启动调用前的时间点,到对应完成通知接收时间;保存从保存调用前,到保存完成通知接收时间。两段均包含调度和通知延迟,不能称为纯算法耗时。文件检查另行计时,采集时长继续沿用第2篇口径。

执行前需登记时钟方法、工具及版本、单位、起止事件和暂停区间。建议采用适合持续时间测量的单调时钟,并核对两端来自同一时间基准;日历时间用于事件定位。暂停区间单列,未经定义不自行扣除。缺少任一端证据时,不计算完整阶段耗时。

未来结果可能停在不同位置:前置条件受阻意味着尚未进入重建;明确失败通知才支持相应阶段失败结论;重建成功但保存失败,应保留前一阶段事实;保存通知不明则保持待确认。不能用一个总状态抹去这些差异。

4.2 向第5篇交付产物或受阻记录

交接对象需要让后续找到正确任务、输入条件和产物。C4为应用自定义JSON,关联质量观察与未覆盖区域;空数组表示尚未关联,不表示检查后没有问题。

{
  "reconstructionTaskId": null,
  "captureBatchId": null,
  "environmentRef": null,
  "sessionRecordRef": null,
  "executionState": "notExecuted",
  "inputAvailability": null,
  "qualityObservationRefs": [],
  "eventRecordRefs": [],
  "timing": {
    "clockMethod": null,
    "toolAndVersion": null,
    "unit": null,
    "reconstructionStartEventRef": null,
    "reconstructionEndEventRef": null,
    "reconstructionDuration": null,
    "savingStartEventRef": null,
    "savingEndEventRef": null,
    "savingDuration": null,
    "pauseIntervalRefs": [],
    "fileCheckTimingRef": null
  },
  "artifactRefs": [],
  "artifactCheckRefs": [],
  "uncoveredRegionRefs": [],
  "blockingStage": "preparation",
  "knownFacts": ["尚无实际批次、任务日志与产物"],
  "missingEvidence": [
    "实际输入与会话关联待补",
    "匹配SDK的阶段判定与保存配置依据待补",
    "实机调用、通知与文件检查证据待补"
  ],
  "evidenceRefs": []
}

这里的blockingStage说明执行准备缺口,不是SDK失败阶段。当前能交付的是方法与准备记录。有实际产物时,才填写其引用、生成证据及检查范围;没有产物时,交付受阻位置、已知事实和继续所需条件。证据引用仍不等于可重放输入。

第5篇负责质量观察,第6篇负责成本比较,第7篇验证加载和交互。本篇只确定交接对象及证据范围,不能以空记录替代这些后续步骤所需的真实产物。

在这里插入图片描述

图5为交接界面规划,各阶段保持“未执行”,产物待关联,后续入口不表示已有质量评价对象。

五、结论

即使未来完成一次重建和保存,结论也只适用于记录中的设备、系统、SDK、样本和输入条件。它不能保证其他材质、输入规模或设备表现相同,推荐芯片也不能代替实际测量。

支持查询、输入接收、重建完成、保存完成、质量可用和自由视角浏览,需要逐层取得证据。文件生成不会自动消除空洞或漂浮伪影;运镜视频能够播放,也不等于用户能够自由选择观察方向。

静态桌面物品的底面及遮挡区域继续按采集记录单列,不因任务完成便写成全表面恢复。没有几何真值与误差评价,本系列不报告测量级精度。

当前仍无实机结果。第一次任务要继续推进,需要补齐输入与会话关联、匹配SDK的判定契约,以及实际调用和文件证据。受阻处保留原状,不以云端、模拟器或生成产物补齐端侧实验。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐