【HarmonyOS 7新能力|029】3DGS工程封装:把接入逻辑放进可维护的分层结构

3DGS工程封装

3DGS(3D Gaussian Splatting)让多视角图像重建和新视角渲染有了更灵活的表达方式,但工程难点远不止“调用一次重建”。拍摄覆盖不足、模糊帧进入计算、相机位姿失败、资源峰值过高、应用退到后台后仍继续优化,都会让结果不可用。

本文把端侧三维重建拆成采集交互、会话、数据治理、重建编排、资源和呈现六层。文中的类型、阶段与策略是应用侧教学封装,不代表 HarmonyOS 7 官方 3DGS API、算法实现或性能指标;能力范围、硬件条件和接口应以当前 SDK 与华为官方资料为准。图片中的质量数值均为设计示意,不是实测结论。

一、先定义可交付的重建目标

“把物体变成 3D”无法直接验收。第一版应限定对象大小、拍摄距离、环境光、输出用途与最低完整性。例如仅支持静态小型物体,输出用于本机预览,不承诺精密测量,也不处理透明和强反光表面。

验收目标包括:用户获得覆盖引导;明显模糊帧被拒绝;位姿异常时停止并提示补拍;任务可取消;资源超过预算时降级或失败;结果通过完整性检查后才进入预览;原始图像默认不上传。

二、把采集计划变成显式数据

采集不是随手拍一圈。应用应描述目标、推荐视角、已覆盖区域和缺口,形成可恢复的会话。

interface CapturePlan {
  sessionId: string
  targetName: string
  expectedViews: number
  elevationBands: ReadonlyArray<'low' | 'middle' | 'high'>
  minOverlap: number
}

interface CaptureProgress {
  acceptedFrames: number
  rejectedFrames: number
  missingBands: ReadonlyArray<string>
}

expectedViews 和重叠阈值只是产品策略,需根据目标设备与算法实测确定,不能当成通用标准。

三、每张图像都绑定可信元数据

图像需要与拍摄时间、方向、尺寸、焦距信息和会话版本关联。只保存文件路径,后续很难判断它属于哪一次采集或是否已经过旋转。

interface CaptureFrame {
  id: string
  sessionId: string
  revision: number
  width: number
  height: number
  rotation: 0 | 90 | 180 | 270
  capturedAt: number
  localUri: string
}

元数据进入清单,重建任务读取不可变快照。用户补拍后生成新 revision,旧任务的迟到结果不能覆盖新任务。

四、帧质量门禁早于重建

端侧3DGS重建链路

模糊、曝光异常、重复视角和缺少纹理的帧应在重建前识别。质量门禁不需要替代算法,只负责淘汰明确无效输入并给出可操作反馈。

interface FrameQuality {
  frameId: string
  sharpness: number
  exposure: 'low' | 'normal' | 'high'
  duplicateOf?: string
  accepted: boolean
  reasons: ReadonlyArray<string>
}

function canUse(q: FrameQuality): boolean {
  return q.accepted && q.exposure === 'normal' && q.duplicateOf === undefined
}

阈值由目标设备样本标定,并保留人工复核入口,避免算法误判后用户无法继续。

五、重建流程采用阶段状态机

重建包含输入冻结、位姿估计、初始化、优化、验证和导出。把它压成一个 loading 会导致取消和恢复无从落地。

type ReconstructionStage =
  | 'preparing'
  | 'estimating-pose'
  | 'initializing'
  | 'optimizing'
  | 'validating'
  | 'completed'
  | 'failed'
  | 'cancelled'

interface ReconstructionJob {
  id: string
  revision: number
  stage: ReconstructionStage
  progress: number
  checkpointUri?: string
}

只有验证通过才能进入 completed。取消是终态,后台回调只能清理资源,不能偷偷恢复执行。

六、分层结构隔离算法变化

端侧3DGS分层架构

采集层提供引导和覆盖反馈;会话层管理状态、取消和进度;数据治理层处理筛帧、元数据与隐私;编排层组织位姿、初始化和优化;资源层控制内存、温控与持久化;呈现层只消费稳定输出。

页面不直接持有重建引擎对象,算法适配器也不修改 UI。未来更换模型或增加云端备选时,业务会话和验收规则仍可复用。

七、算法接入收口为窄接口

interface ReconstructionInput {
  jobId: string
  manifestUri: string
  outputDirectory: string
}

interface ReconstructionArtifact {
  sceneUri: string
  metadataUri: string
  previewUri: string
}

interface ReconstructionPort {
  run(input: ReconstructionInput, signal: AbortSignal): Promise<ReconstructionArtifact>
  release(): Promise<void>
}

适配器把平台错误映射为有限错误码,确保失败时关闭句柄、释放加速资源和临时缓冲区。

八、资源预算是运行时门禁

端侧优化可能持续占用内存、算力和电量。启动前检查可用存储与设备状态,运行中监控内存峰值、温度等级和应用可见性。

interface ResourceBudget {
  maxMemoryBytes: number
  maxTemporaryBytes: number
  maxElapsedMs: number
  allowBackground: boolean
}

function deadlineExceeded(startedAt: number, budget: ResourceBudget): boolean {
  return Date.now() - startedAt >= budget.maxElapsedMs
}

触发预算后应保存安全检查点、降级或明确失败,不能依靠系统强杀来结束。

九、检查点只保存可恢复状态

并非每个内部缓冲区都适合持久化。检查点应包含算法版本、输入清单摘要、阶段、必要参数和已验证的中间产物引用。

interface JobCheckpoint {
  jobId: string
  algorithmVersion: string
  manifestDigest: string
  stage: ReconstructionStage
  artifactUris: ReadonlyArray<string>
  savedAt: number
}

恢复前核对版本和输入摘要。不匹配时从安全阶段重新开始,避免把旧中间结果套到新图片上。

十、结果质量需要多维验收

是否能打开预览不是质量通过。至少检查输入覆盖、位姿有效比例、空洞区域、异常漂浮点、目标外区域和多个保留视角的重投影表现。

interface QualityReport {
  validPoseRatio: number
  uncoveredRegions: ReadonlyArray<string>
  artifactWarnings: ReadonlyArray<string>
  holdoutChecksPassed: boolean
  status: 'passed' | 'needs-more-capture' | 'failed'
}

阈值必须来自产品场景和设备实验。报告应允许返回“需要补采”,而不是强行给出成功模型。

十一、隐私和数据保留必须显式

环绕拍摄可能带入人脸、室内环境和文档。默认在本地处理,采集前提示用户清理敏感背景;原始图像、临时文件、检查点和最终模型分别定义保留期限与删除入口。

interface RetentionPolicy {
  keepSourceFrames: boolean
  deleteTemporaryOnSuccess: boolean
  deleteTemporaryOnCancel: boolean
  exportRequiresConfirmation: boolean
}

日志只记录任务号、阶段、耗时、错误码和资源指标,不记录图片内容与精确环境信息。

十二、用故障注入完成验收

测试覆盖:覆盖不足、连续重复视角、模糊帧、旋转元数据错误、位姿失败、用户中途补拍、任务取消、应用退后台、存储耗尽、内存预算触发、温控降级、检查点版本不匹配、导出失败和删除流程。

还要连续运行多轮任务,确认句柄、内存和临时目录回到基线;对同一输入重复执行时,阶段与报告可复现。只有正常与失败链路都能安全收束,才说明工程封装完整。

3DGS 的体验上限由算法决定,交付下限却由工程边界决定。把采集质量、状态机、算法适配、资源预算、检查点、质量报告和隐私清理纳入同一链路,端侧三维重建才能从一次炫酷演示变成可维护的产品能力。

Logo

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

更多推荐