一、前言

给桌面物品拍照,通常是为了以后还能认出它。正面照片能够留下颜色和局部细节,但当回看需求变成“侧面的轮廓怎样”“转到背面还能看到什么”,记录方式就需要容纳观察方向的变化。本系列的“桌面三维记录册”围绕这一需求展开:固定静态物品,采集多视角信息,尝试在设备端重建,再验证产物能否用于交互式浏览。

这里先把浏览写成目标。保存了文件,甚至能够播放一段围绕物品的视频,都不能直接说明用户已经可以自主选择观察方向。后续需要分别检查重建、保存、加载和视角操作。本篇先解释记录的价值,整理能力入口与实验条件;具体设备返回值和产物表现留待实机记录。

3DGS的全称是3D Gaussian Splatting。理解它,可以先看组成场景的单个高斯点。高斯点带有位置、颜色、透明度、旋转和缩放等属性,可以用三维高斯椭球理解。

位置说明这个单元分布在哪里;旋转描述椭球的朝向;缩放影响它沿不同方向的形态与范围;颜色和透明度参与外观表达。一个单元不足以表达桌面物品,许多这样的单元共同构成场景。先理解“带属性的空间单元”,再理解“多个单元共同表达外观”,就不必一开始进入训练公式或渲染实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图1用于解释高斯点概念,图中组合关系不代表实测重建产物或测量精度。

“点”这个名称容易让人想到物体表面的精确采样坐标,但高斯点包含空间范围与外观属性,不能直接当作精确测量点。即便某个视角看起来接近原物,也还需要另外的依据,才能讨论尺寸误差或几何精度。本系列首先关心可见外观是否值得保留,以及预期观察范围内能否稳定浏览。

因此,样本选择从用途开始:是否确实需要多角度回看?能否固定摆放,并在相近条件下重复采集?希望观察哪些表面?如果需求只是辨认物品或保存正面标签,照片已经可能足够;如果轮廓和不同侧面的细节都重要,三维记录便值得进入实验。

这是一套业务选择准则,不是重建成功率排序。反光、低纹理和复杂形状可以作为样本标签,帮助后续解释差异。本篇不据此宣布某种材质必然成功或失败。具体样本尚未选定,也不预填任何已经采集的物品。

二、变量与条件

一次重建结果只有连同条件保存,才有比较价值。同一物品换了设备、系统构建或照明,结果发生变化时,不能仅凭文件名称判断原因。因此,“桌面三维记录册”首先需要实验档案。

版本信息分开记录。设备实际系统构建号、开发SDK版本与API级别则描述执行环境。共享资料将视觉重建和会话管理的起始版本标为6.1.0(23),另将NG回调标为从26.0.0开始。现有资料没有给出这些标记与HarmonyOS 7.0的准确对应关系。

设备范围同样需要分层理解。Phone、Tablet、PC/2in1和TV,说明Kit适用的设备类型;具体设备是否支持重建仍需查询。该资料同时限定使用地区为中国境内,不含香港特别行政区、澳门特别行政区和中国台湾,并明确暂不支持模拟器。

分组拟记录字段填写规则
关联标识experimentId、sampleId、baselineId分别关联实验、样本和比较基线
设备环境型号、芯片、系统完整构建号、地区据目标设备填写
开发环境SDK版本、API级别、DevEco Studio版本据实际工程环境填写
样本条件名称、材质、纹理、形状、摆放、照明、预期浏览范围记录观察与目标,不预判质量
证据来源文档链接、更新时间、读取时间、日志引用区分文档依据与实机证据
后续测量阶段耗时、工具及版本、单位、采样方法、条件未测量留空,不填0

在这里插入图片描述

图3为实验档案界面规划,展示待填写字段,不是设备信息采集截图。

代码C1用JSON表达档案骨架。全部字段均为应用自定义;三个标识在实际建档时分配。null表示当前未知,notExecuted表达尚未执行,两者共同避免把空值误读为失败或零耗时。

{
  "experimentId": null,
  "sampleId": null,
  "baselineId": null,
  "device": {
    "model": null, "chip": null,
    "systemBuild": null, "region": null
  },
  "development": {
    "sdkVersion": null, "apiLevel": null,
    "devEcoStudioVersion": null
  },
  "sample": {
    "name": null, "materialObservation": null,
    "textureObservation": null, "shape": null,
    "placement": null, "lighting": null,
    "expectedViewRange": null
  },
  "supportQuery": {
    "executionState": "notExecuted",
    "rawStatus": null,
    "environmentRef": null,
    "evidenceRefs": []
  },
  "measurements": {
    "stageDuration": null, "unit": null,
    "toolAndVersion": null, "method": null,
    "conditions": null
  },
  "evidenceRefs": []
}

正式记录时,evidenceRefs关联包含来源类型和时间信息的证据条目。环境变化应留下可区分的基线记录;否则两次任务看似属于同一实验,实际上可能无法直接比较。

三、执行过程

3.1 分清职责和证据来源

系统提供输入接收、关键帧选择、重建与保存能力。应用负责组织采集,将图像与对应的相机信息关联起来,管理工作目录、任务和档案,并保存原始返回值。外部实验工具负责后续性能测量及辅助记录,具体工具和方法在第6篇确定。

这一区分直接影响结论的来源。重建接口返回值用来说明相应调用的结果;温度、内存与能耗等指标需要各自的采样方法,不能包装成重建接口直接给出的数据。外部工具也不承担替代性的云端重建。

在这里插入图片描述

图2为职责与证据流向规划,外部工具区域只承担测量和辅助记录。

3.2 制定支持查询步骤

实机检查先登记环境,再核对目标SDK中头文件、接口和库是否可用。随后按会话指南引入依赖。代码C2的CMake片段沿用指南中的entry目标名,接入工程时应对应实际原生库目标。

# 加入已有原生库目标的 CMakeLists.txt
find_library(
    spatialrecon-lib
    libspatial_recon_ndk.z.so
)
target_link_libraries(entry PUBLIC
    ${spatialrecon-lib}
)

下面的C++片段展示查询与解释分支。QuerySupport是应用函数,系统接口名称保持原样;注释中的记录动作仍需应用实现。

#include "spatial/spatial_recon_interface.h"

HMS_SpatialReconStatus QuerySupport()
{
    const HMS_SpatialReconStatus supportStatus =
        HMS_SpatialRecon_IsSupport(SPATIAL_RECON_MODEL_TYPE_GS);
    // 应用应保存 supportStatus 原值,并关联环境与日志。
    if (supportStatus == SPATIAL_RECON_STATUS_SUCCESS) {
        // 当前设备支持该特性;继续核对后续前置条件。
    } else if (supportStatus == SPATIAL_RECON_STATUS_DEVICE_NOT_SUPPORT) {
        // 记录能力受阻,停止依赖该能力的重建步骤。
    } else {
        // 保留原值并待查,不自动归类为支持。
    }
    return supportStatus;
}

指南明确了支持与不支持的两个返回值。保留其他返回值的分支是应用的防御性设计,不代表资料已经确认还有某种特定错误。查询成功只允许继续检查;查询不支持时,档案和采集协议可以保留,但不能继续宣称设备能够完成端侧重建。

在这里插入图片描述

图4为能力检查页规划,当前状态为“尚未查询”,没有支持成功的实机证据。

3.3 核对输入与会话前置条件

重建输入包含图像、相机内参与位姿。图像提供外观信息;内参描述相机成像关系,例如资料列出的焦距和主点参数;位姿描述拍摄时相机的位置与朝向。应用必须保持这些信息与对应图像的关联,完整采集协议留给第2篇。

共享重建指南对尺寸给出了明确约束:宽度1080像素、高度1440像素,其他尺寸的结果未定义。虽然其中AR Engine示例注释使用了“推荐”措辞,正文对两种输入路径的限制更明确,本系列按该限制规划,不能将宽高互换或视为任选分辨率。

输入有两条路径:推入AR Engine数据帧前,需要先更新AR引擎的计算结果;自行组装HMS_SpatialRecon_DataFrame时,资料要求RGB格式。当前资料示例没有完整展开位姿字段,本篇不补写字段名或转换代码。系统会从推入的数据帧中选取关键帧,因此应用推入帧数不能直接充当关键帧数,也没有依据新增关键帧计数查询接口。

会话用于管理系统状态。创建前,workPath必须指向已经存在的应用文件目录子目录。代码C3仅用生命周期伪代码说明责任,其中中文动作是应用需实现的逻辑,不是系统API。

前提:支持查询成功,且开发环境已核对
workPath ← 应用选定的工作目录
检查 workPath 已存在且属于应用文件目录的子目录
spatialReconSession ← nullptr
createStatus ← HMS_SpatialRecon_CreateSession(
    SPATIAL_RECON_MODEL_TYPE_GS, workPath, &spatialReconSession)
保存 createStatus 原值及环境关联
若 createStatus != SPATIAL_RECON_STATUS_SUCCESS:记录并结束本流程
应用持有 spatialReconSession;本片段不提交任务
准备释放时,禁止再向该会话提交操作
确认该会话所有相关任务均已结束,且没有并发访问
HMS_SpatialRecon_DestroySession(spatialReconSession)
spatialReconSession ← nullptr;不再使用该会话及其其他引用

会话指南明确:重建或保存进行中销毁会话会导致未定义行为,销毁后也不得继续操作。页面关闭不能直接替代“任务全部结束”的判断。

还要提前登记后续执行约束:同一时刻只能有一个会话进行重建;每次调用HMS_SpatialRecon_StartSession后,要按应用前后台情况调用HMS_SpatialRecon_SetRunningMode设置运行模式;同一时刻只能有一个会话保存MP4。完整调度与完成判定在第4篇展开,本篇代码没有提交重建任务。

四、观测结果

当前能够确认的是资料中的入口与约束,以及应用拟采用的记录方式。支持查询、会话创建和产物检查都尚未执行。把这些信息分开,后续才不会把“接口有文档”误写成“目标设备已验证”。

观测记录按检查项保存执行状态、原始返回值、环境关联、证据引用、可得结论和下一步。当前各项可采用下表;其中“待关联”表示字段尚未填写,不代表已经存在设备日志。

检查项执行状态原始返回值环境/实机证据当前结论与下一步
支持查询未执行null待关联/无设备能力待验证;先登记环境
会话创建未执行null待关联/无创建结果未知;核对工作目录
输入接收未执行null待关联/无有效性待验证;准备采集协议
重建未执行null待关联/无尚无完成证据;留待第4篇
保存未执行null待关联/无尚无输出文件;单独记录保存结果
浏览待验证null待关联/无尚无交互证据;留待第7篇

C1中的executionState是应用状态,rawStatus用于保存实际取得的系统返回值。两者不能混为一个系统枚举。浏览阶段还涉及不同模块,其证据应按对应接口和操作保存,不能统一套用HMS_SpatialReconStatus解释。

在这里插入图片描述

图5为观测记录界面规划,状态保持“尚未查询”或“待验证”,不展示运行日志。

后续即使支持查询返回成功,也只能确认设备支持该特性;会话创建成功,仍不能证明输入有效、产物可用或耗时合适。每一层结论都需要对应阶段的证据,不能用前一层成功填满整张表。

交给第2篇的是档案结构、待分配的样本与基线标识、待填环境字段,以及已经明确的输入约束。采集条件表将继续填写距离、路径、背景与照明;形成批次后,再通过标识关联。阶段耗时及测量方法仍为空,只有发生实际测量,才记录工具、单位、起止边界和实验条件。

五、结论

“值得做成3DGS”在本篇指一个有理由投入实验的需求:多角度外观回看具有价值,样本可以固定并重复采集,设备能力有可核验的入口。它还不是针对某种物品的质量保证。最佳距离、最少帧数和材质成功率,都需要后续比较,不能从接口说明推导出来。

预期观察范围也必须提前限定。物品底面或被遮挡区域如果没有采集,应单独记录,不能因为正面外观完整就承诺全方位恢复。高斯点共同表达场景,不自动构成测量级扫描依据;没有几何真值与误差评价,本系列不报告尺寸精度。

输出与加载同样需要分开。共享重建指南的保存部分提到PLY与运镜MP4;加载指南列出MP4、PLY、GLB。这两份列表不能推导出重建接口可以输出GLB,也不能保证任意同扩展名文件兼容。后续应从实际保存产物出发,核对加载路径。播放运镜视频可以展示既定路线,但不能代替自由视角浏览验证。

接下来,第2、3篇形成可追溯的输入批次,第4篇记录实际重建与保存,第5、6篇在相同证据基础上评价质量与成本,第7篇验证浏览,第8篇整理复现材料。任何阶段受阻,都保留其环境、原始信息与待补条件,让下一步建立在已经取得的证据上。

Logo

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

更多推荐