ARCore 中文文档 下载 App

Augmented Images 图像触发器详解

Augmented Images 是什么

Augmented Images(增强图像)让 ARCore 应用检测特定的 2D 图像并触发 AR 体验——扫描电影海报弹出角色动画、扫描产品包装叠加 3D 模型、扫描广告牌显示扩展信息等。

与传统图像识别方案(如 Vuforia、ARtoolKit)不同的是,Augmented Images 不需要开发者预先"扫描目标图像"建图——ARCore 在运行时自动从图像中提取特征点并匹配,简化了开发者流程。

工作原理

开发者流程:
准备目标图像 → 创建 Image Database → 放入 Session 配置 → 运行时自动检测

运行时流程:
每一帧摄像头画面 → 提取特征点 → 和数据库中的图像特征点匹配
                                        ↓
                              匹配成功 → 返回 AugmentedImage 对象
                                                        ↓
                                              在图像位置叠加 AR 内容

步骤一:准备目标图像

目标图像的质量直接影响检测精度:

要求说明
清晰锐利不能模糊、压缩、过曝
纹理丰富有足够多的特征点(Logo、文字、图案等)——纯色大面积区域检测困难
扁平平面图像本身是平面的(海报、包装盒、名片)——曲面(如杯子上的文字)检测能力有限
尺寸适中建议物理尺寸至少 5cm × 5cm
独特与其他目标图像不相似(否则可能误匹配)

图像格式

避免用纯文字、纯图形、纯色块的图像——特征点不够。

步骤二:创建 Image Database

两种方式创建数据库:

方式一:运行时动态创建(简单灵活)

session.configure(
    Session.Config(context).apply {
        // 创建新的空数据库
        val database = AugmentedImageDatabase(session)

        // 添加图像(可选:指定物理宽度,单位米)
        database.addImage(
            imageName = "poster_movie",
            bitmap = yourBitmap,
            widthInMeters = 0.5f  // 海报实际宽度(米)——有助于精确估计距离
        )

        // 放入 Session 配置
        setAugmentedImageDatabase(database)
    }
)

方式二:离线预编译(性能更好)

用 arcoreimg 命令行工具编译图像数据库文件,然后打包进 APK:

# 在 Android SDK 目录中找到 arcoreimg
# 编译单个图像
arcoreimg buildimgdb \
    --input_images_directory ./images/ \
    --output_db_path ./assets/img_database.bin

然后在应用中加载:

// 从 assets 加载预编译数据库
val inputStream = context.assets.open("img_database.bin")
val database = AugmentedImageDatabase.deserialize(inputStream)

session.configure(
    Session.Config(context).apply {
        setAugmentedImageDatabase(database)
    }
)

预编译数据库的优势:启动更快、内存更省、特征点提取质量更高。

数据库容量限制

参数限制
单个数据库最大图像数1,000 张
单个目标图像最大约 10MB
同时检测的最大图像数由设备性能决定,通常 5~10 张

步骤三:运行时检测与触发

session.update(frame)

// 获取当前所有检测到的 Augmented Images
val detectedImages = session.getAllTrackables<AugmentedImage>()

detectedImages.forEach { image ->
    when (image.trackingState) {
        TrackingState.TRACKING -> {
            // 图片稳定跟踪中,叠加 AR 内容
            // image.name 返回的是数据库中注册的图像名
            when (image.name) {
                "poster_movie" -> {
                    // 在海报位置弹出角色动画
                    placeCharacterAnimation(image.centerPose)
                }
                "product_box" -> {
                    // 在包装盒上叠加 3D 模型
                    place3DModel(image.centerPose)
                }
            }

            // image 提供了:
            // image.centerPose: 中心位置和朝向
            // image.extent: 图像的实际物理尺寸 [width, height]
            // image.trackingMethod: 检测方式(IMAGE_TRACKING / FULL_TRACKING)
        }
        TrackingState.PAUSED -> {
            // 暂时丢失(图像被遮挡或移出视野)
        }
        TrackingState.STOPPED -> {
            // 彻底丢失,可以清理相关资源
        }
    }
}

移动图像跟踪

ARCore 还支持跟踪移动的图像(比如公交车身上的广告、用户手中挥动的海报)——即使图像移出视野后再回来也能继续跟踪。这由 ARCore 自动处理,开发者不需要额外配置。

Unity AR Foundation 中的用法

using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

public class ImageTrackingExample : MonoBehaviour
{
    public ARTrackedImageManager trackedImageManager;
    public GameObject prefab;

    void OnEnable()
    {
        trackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;
    }

    void OnDisable()
    {
        trackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
    }

    void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs args)
    {
        foreach (var image in args.added)
        {
            // 首次检测到该图像
            var placed = Instantiate(prefab, image.transform.position, image.transform.rotation);
            placed.transform.SetParent(image.transform);
        }

        foreach (var image in args.updated)
        {
            // 图像位置/姿态更新(移动跟踪时)
        }

        foreach (var image in args.removed)
        {
            // 图像移出视野
        }
    }
}

Unity 中图像数据库在 XR → AR Settings → ARCore → Augmented Image Database 中配置,可以直接拖入图片。

性能与精度注意

因素影响
图片质量模糊/压缩过的图片检测率下降 50% 以上
检测距离太远会看不清特征点,推荐 15cm ~ 2m 范围
光照条件过于昏暗或强逆光会严重影响检测
数据库大小数据库越大,每次搜索耗时越长(建议 < 100 张)
CPU 开销每帧都做特征点匹配,低端设备可能掉帧

建议

与 Vuforia 的对比

对比项Augmented ImagesVuforia
精度好(Android 新设备上接近 Vuforia)非常好(行业标杆)
曲面检测有限强
3D 物体检测不支持支持
价格完全免费免费版有功能限制,商业版收费
开发集成和 ARCore 无缝需要额外 SDK
云端识别不支持支持(Cloud Recognition)

推荐策略:如果你的识别需求是平面图像触发,Augmented Images 足够用且免费。如果需要高精度 3D 物体识别或云端识别,可以考虑 Vuforia + ARCore 组合。