所有文章 > 如何集成API > 使用 RoomPlan API 在 iOS 中构建房间扫描应用
使用 RoomPlan API 在 iOS 中构建房间扫描应用

使用 RoomPlan API 在 iOS 中构建房间扫描应用

在 iOS 平台上,RoomPlan API 提供了一种强大的工具,用于创建房间扫描应用程序。本文将详细介绍如何使用 RoomPlan API 构建一个功能完善的房间扫描应用,包括所需工具、设备支持以及具体实现步骤。


必备条件

  1. Xcode 12.5 或更高版本
    RoomPlan API 需要 Xcode 12.5 或更高版本支持,该版本包含构建 AR 应用程序所需的工具和框架。

  2. 支持的设备
    仅支持配备 LiDAR 传感器的 iOS 设备,例如:

    • iPhone 12 Pro、iPhone 12 Pro Max
    • iPhone 13 Pro、iPhone 13 Pro Max
    • iPad Pro(2020 年或更高版本)

RoomPlan API 的基本工作流程

RoomPlan API 的实现主要分为以下三个部分:

  • 扫描:设置并启动扫描会话,同时向用户显示进度和指令。
  • 处理:处理扫描数据并生成模型。
  • 导出:将生成的模型导出为 USD/USDZ 文件。

在应用中实现 RoomPlan API 有两种方式:

  1. 使用 RoomCaptureSession
  2. 使用 RoomCaptureView

接下来,我们将分别介绍这两种实现方式。


使用 RoomCaptureSession 实现房间扫描

第一步:设置房间捕捉会话

  1. 在应用中添加一个 ARView
  2. 实例化一个 RoomCaptureSession 对象,并将当前的 ViewController 扩展为 RoomCaptureSessionDelegate
  3. self 分配为会话的委托属性。
  4. 创建自定义可视化工具,用于向用户实时更新扫描进度。

第二步:实现 RoomCaptureSession 的委托方法

RoomCaptureSession 提供了多个委托方法,用于处理扫描过程中的不同事件:

  • didUpdate:每次扫描时,当检测到或更新表面或物体时调用。
  • didProvide:提供扫描过程的说明,包括距离、速度、光线调节和低纹理等警告信息。

此外,还有以下方法可供使用:

  • didAdddidChangedidRemove
  • didStartWithdidEndWith

这些方法主要用于处理扫描过程中的动态变化。

第三步:捕获并导出最终模型

当会话停止时,RoomCaptureSessionDelegatedidEndWith 方法会被调用。此方法会返回捕获的房间数据或错误信息。通过此方法,我们可以处理扫描数据并导出最终的 3D 模型。

CapturedRoom 的属性

CapturedRoom 包含以下属性,用于描述扫描结果:

  • 曲线:包括半径、起始角和终止角。
  • 边缘:包括左、右、上、下边缘。
  • 类别:例如墙壁、开口、窗户和门。

对象的独特属性

  • 类别:例如桌子、椅子、沙发、床等。

曲面和对象的共同属性

  • 尺寸:包括高度、宽度和长度。
  • 置信度:扫描表面或对象的三个置信度级别。
  • 变换:三维变换矩阵。
  • 标识符:唯一标识符。
  • 导出(to: URL):将生成的 3D 模型导出到指定的 URL。

通过导出功能,我们可以将 CapturedRoom 转换为 USD/USDZ 文件格式,并将其保存或分享。


使用 RoomCaptureView 实现房间扫描

RoomCaptureView 是一个 UIView 子类,能够简化房间扫描的实现。它提供了以下功能:

  • 实时勾勒出检测到的表面和物体的动画线条。
  • 在视图底部生成交互式 3D 模型,显示扫描进度。
  • 提供指导说明,帮助用户获得最佳扫描效果。

第一步:设置房间捕捉视图

  1. 在 ViewController 中创建一个 RoomCaptureView 引用。
  2. 将其添加到视图层次结构中。

第二步:开始房间捕捉会话

创建一个 RoomCaptureSession.Configuration 实例,用于启动扫描会话。通过该实例,可以启用或禁用扫描指导功能。

第三步:捕获并导出最终模型

实现 RoomCaptureViewDelegate 的方法,以处理扫描结果并导出模型:

  • shouldPresent:返回一个布尔值,指示是否需要后处理并呈现扫描结果。
  • didPresent:扫描完成后,提供后处理的扫描结果。

通过扩展 ViewController 为 RoomCaptureViewDelegate,并将 self 分配为 RoomCaptureView 的委托属性,即可完成实现。


扫描结果示例

以下是使用 RoomPlan API 扫描房间的示例结果:
检测到 6 把椅子、1 张桌子、1 台电视、1 扇门、1 扇窗户以及周围的墙壁。


原文链接: https://medium.com/simform-engineering/building-a-room-scanning-app-with-the-roomplan-api-in-ios-a5e9f66cfaaf
#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费