平台专用指南
Android (Kotlin/Java)
Android NDK (C)
Unity(AR 基础)
Unreal Engine
借助 ARCore 中的增强图像 API,您可以构建 AR 应用,以检测和增强用户环境中的 2D 图像(例如海报或产品包装)。
您需要提供一组参考图片。ARCore 使用计算机视觉算法从每张图片的灰度信息中提取特征,并将这些特征的表示法存储在一个或多个增强图像数据库中。
在运行时,ARCore 会在用户环境中的平坦表面上搜索这些功能。这样一来,ARCore 就能检测现实世界中的这些图像,并估计它们的位置、方向和大小(如果未提供此类图像)。
功能
ARCore 最多可以同时跟踪 20 张图像。ARCore 不会同时检测或跟踪同一图像的多个实例。
每个增强型图片数据库最多可存储 1,000 张参考图片的信息。数据库数量不受限制,但任何时候都只能有一个数据库处于活动状态。
您可以在运行时将图片添加到增强图像数据库,每个数据库最多可添加 1,000 张图片。您可以使用网络连接下载之前创建的数据库。
添加图片时,您可以提供要检测的图片的实际尺寸。这样做可以提高图片检测性能。
如果未提供实际尺寸,ARCore 会估算尺寸,并随着时间的推移不断优化此估算值。
如果提供了实际尺寸,ARCore 会使用所提供的尺寸并估算图像的位置和方向,而忽略视觉尺寸或实际尺寸与所提供的实际尺寸之间的任何差异。
ARCore 可以响应和跟踪以下类型的图像:
固定在原地的图片,例如挂在墙上的打印照片或放在桌上的杂志
移动图片,例如行驶中的公交车上的广告,或用户在移动手部时所持平面物体上的图片。
ARCore 开始跟踪图片后,它会在每一帧中提供图片位置和方向的估算值。随着 ARCore 收集的数据增多,这些估算会持续优化。
一旦检测到图像,ARCore 就会继续“跟踪”图像的位置和方向,即使图像因用户移动设备而暂时离开摄像头视图也是如此。在这种情况下,ARCore 会假定图像的位置和方向是静态的,并且图像本身不会在环境中移动。
所有跟踪都**在设备上**完成。无需连接到互联网即可检测和跟踪图片。
要求
图片必须:
填充至少 25% 的相机帧,以便系统进行初始检测。
平坦(例如,不要起皱或缠绕在瓶子上)。
将相机镜头对准您。它们不应被部分遮挡,不应以高度倾斜的角度查看,也不应在镜头因运动模糊而移动过快时进行查看。
CPU 利用率和性能注意事项
启用增强图像功能可能会增加 ARCore 的 CPU 利用率,具体取决于已启用的 ARCore 功能。在 AR 体验不需要时,不妨考虑停用所有未使用的功能。这将为您的应用提供额外的 CPU 周期,并提升热性能和电池续航时间。
如需了解详情,请参阅性能注意事项。
最佳做法
关于选择参考图片的提示
- 图片的分辨率至少应为 300 x 300 像素。使用高分辨率的图片不会提升效果。
- 您可以提供PNG 或 JPEG 文件格式的参考图片。
- 系统不会使用颜色信息。彩色图片和等效的灰度图片都可以用作参考图片,也可以供用户在运行时使用。
- 避免使用压缩过度的图片,因为这会干扰特征提取。
- 避免使用包含大量几何图形特征或极少特征的图片(例如条形码、二维码、徽标和其他线条图形),因为这会导致检测和跟踪性能不佳。
- 避免使用具有重复模式的图片,因为这也可能会导致检测和跟踪出现问题。
使用 ARCore SDK 中包含的
arcoreimg
工具,可以获取每个图像的质量得分(介于0
和100
之间)。我们建议质量得分至少为 75。以下是两个示例:示例图片 1 示例图片 2 得分: 0
得分: 100
包含重复的几何图形特征 分辨率足够;包含许多独特的功能
有关创建图像数据库的提示
- 使用 Android 版 arcoreimg 工具生成图片数据库文件。此工具仅适用于 Android 和 Android NDK 开发。它内置于 Unity SDK 和 ARCore Unreal 插件中。
- 数据库会存储从参考图像的灰度数据中提取的特征的压缩表示。每个图片条目占用大约 6 KB。
- 运行时,将一个图像添加到数据库需要大约 30 毫秒。
- 在工作线程上添加图片,以免阻塞界面线程。
- 或者,如果可能,使用 ARCore SDK 中包含的
arcoreimg
工具在编译时添加图片。
- 如果您知道图片的预期物理大小,请进行指定。此信息可以提升检测和跟踪性能,尤其是对于较大的物理图像(超过 75 厘米)。
- 避免在数据库中保留许多未使用的图片,因为这会导致 CPU 利用率增加,从而对系统性能产生一定的影响。
有关优化跟踪的提示
- 如果您的图片绝不会从初始位置移动(例如,贴在墙上的海报),您可以在图片上附加锚点以提高跟踪稳定性。
- 物理图像必须占据摄像头图像的至少 25%,才能进行初始检测。您可以提示用户将物理图像放在他们的摄像头取景范围内。
- 在图像的跟踪状态变为“完全跟踪”之前,请勿使用图像的姿态和大小估算。在 ARCore 初次检测到图像时,如果未指定预期的物理大小,图像的跟踪状态将暂停。这意味着,ARCore 已识别出图像,但未收集到足够的数据来估算图像在 3D 空间中的位置。