ARKit——图像检测跟踪

2D图像检测跟踪

图像跟踪技术,是指通过图像处理技术对摄像机中拍摄到的2D图像进行检测、识别、定位,并对其姿态进行跟踪的技术。

苹果官方给我们提供的ARKit框架具备了这样一个图像识别的能力,其能检测并识别从设备摄像头采集图像中的预定义2D图像,并能评估2D图像的尺寸大小和稳定跟踪这些图像的姿态,ARKit最大支持同时跟踪100张2D图像。

利用图像检测功能我们可以实现如下的AR体验:

1.使用2D图像作为放置虚拟元素的参考位置。通常情况下我们会要求用户扫描其周边环境,在检测到的屏幕上放置虚拟元素,这在某些时候会显得不太友好,如一个零售商店需要显示一个虚拟导购,这时我们可以在商店的大门两侧粘贴两张海报,在ARKit检测到这两张海报后利用这两张海报的位置计算出一个位置显示虚拟导购,营造虚拟导购正在门口迎接顾客的氛围。

2.使用2D图像作为AR应用的入口。AR应用启动后无须检测平面,用户只需要将手机摄像头对准2D图像就可以出发AR体验,这在某些场合更合适,如在电影院里,用户通过扫描电影海报就可以将电影主角召唤出来。

不仅如此,2D图像检测在教育培训、工作应用等很多场景都有广阔的应用前景。

图像检测基本操作

在ARKit中,使用图像检测功能有两步:第一步建立一个参考图像库(放置待检测图像集),第二步是配置好图像跟踪的configuration,并使用该配置运行ARSession

1.预先处理待检测的图像信息

使用静态方式创建参考图像库:

a.新建一个Xcode工程,在左侧工程导航面板中选择Assets.xcassets文件大,在打开的资源面板左侧空白处右击并打开弹出菜单,选择New AR Resource Group创建一个资源组,并命名为Poke Cards,如图所示。

b.在新创建的资源素名称上右击,选择import导入图片或直接拉入图片

注意警告中对图片的要求,按照要求放置图片会有更高的精度。

配置并运行

在创建好参考图像库后,就可以通过ARConfiguration配置并运行ARSession启动2D图像检测跟踪,典型使用方法如代码所示。

let config = ARImageTrackingConfiguration()
        guard let trackedImagesLib = ARReferenceImage.referenceImages(inGroupNamed: "Poke Cards", bundle: Bundle.main) else{
            fatalError("无法加载参考图像库")
        }
        config.trackingImages = trackedImagesLib
        config.maximumNumberOfTrackedImages = 2
        arview.session.run(config,options: [ ])

在上述代码中,首先从bundle中加载参考图像库,并将该参考图像库设置到AR配置类的trackingImages属性,然后通过ARSession.run()方法就可以运行2D图像检测跟踪了。ARKit支持同时跟踪多个2D图像,通过maximumNumberOfTrackedImages属性可以设置同时跟踪2D图像的数目,这个值设置的越大,同时跟踪的图像就越多,但性能消耗也会越大。

运行2D图像检测识别应用后,ARKit检测到与参考图像库中参考图像一致的2D图像时,ARSession会自动添加一个ARImageAnchor到ARAnchor集合中,开发人员可以通过ARSessionDelegate协议中didadd代理方法进行相应处理。

在AR应用运行时动态创建图像参考库并配置运行:

参考图像库除了可以在Xcode编辑状态下静态创建,也可以在AR应用运行时动态创建,典型的参考代码如下所示。

let config = ARImageTrackingConfiguration()
        var trackedImagesLib = Set<ARReferenceImage>()
        let image = UIImage(named: "Poke")
        let referenceImage = ARReferenceImage(image!.cgImage!,orientation: .up,physicalWidth: 0.15)
        trackedImagesLib.insert(referenceImage)
        config.trackingImages = trackedImagesLib
        config.maximumNumberOfTrackedImages = 1
        arview.session.run(config,options: [ ])

检测图像使用的配置

所有ARConfiguration配置类的功能都是建立虚拟数字世界与现实物理世界之间的联系,营造虚拟元素真的存在于真实世界中的假象。对于2D图像检测跟踪而言,可以使用图像跟踪(ARImageTrackingConfiguration)和世界追踪(ARWorldTrackingConfiguration)两种配置方式实现。

ARWorldTrackingConfiguration配置方式可以跟踪现实世界中的所有对象,包括2D图像,通过设置该配置类的以下3个属性,可以实现对2D图像的检测跟踪:使用detectionImages属性设置参考图像库,使用maximumNumberOfTrackedImages属性设置最大同时跟踪的图像数量,automaticImageScaleEstimationEnabled为一个布尔值,用于指示ARKit是否对检测到的图像进行尺寸估计。

ARImageTrackingConfiguration是专为2D图像检测跟踪优化的配置,其中,trackingImages属性用于设置参考图像库,maximunNumberOfTrackedImages设置最大同时跟踪的图像数量,isAutoFocusEnabled为一个布尔值,用于设定对焦方式。

图像跟踪和世界跟踪两种配置类都可以实现对2D图像的检测跟踪,它们的区别如下:

1.世界跟踪比图像跟踪性能代价高,因为其执行的任务更多,处理工作更大,因此使用图像跟踪可以检测跟踪更多的2D图像

2.图像跟踪只检测跟踪视线内的2D图像,一旦2D图像离开视线,对图像的跟踪将不再进行。而世界跟踪会跟踪已检测到的所有图像,即使2D图像离开视线跟踪也会进行,因此世界跟踪不仅知道2D图像,还知道这个2D图像所在位置

3.世界跟踪方式更适合跟踪静态,不移动的2D图像,图像跟踪方式更适合跟踪运动2D图像

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值