首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ARReferenceImage 11.3 beta、xCode 9.3 beta、ARKit 1.5上跟踪同一iOS的多个条目的可能性

在ARReferenceImage 11.3 beta、xCode 9.3 beta、ARKit 1.5上跟踪同一iOS的多个条目的可能性
EN

Stack Overflow用户
提问于 2018-03-02 12:52:38
回答 1查看 1.2K关注 0票数 2

在iOS SDK iOS 11.3测试版、xCode 9.3 beta版、ARKit 1.5版中,可能性可以通过摄像机跟踪参考图像,就像使用ARToolKit或Vuforia一样。

问题是,我是否可以跟踪完全相同参考图像的条目的数量,并在每个条目的顶部加上一些形状,就好像它们是单独的项目一样?文档指出:

当您运行一个全局跟踪AR会话并为会话配置的ARReferenceImage属性指定detectionImages对象时,ARKit将在现实环境中搜索这些图像。当会话识别图像时,它会自动向其锚定列表中添加每个检测到的图像的ARImageAnchor。

我能够给我的ARWorldTrackingConfiguration提供三个完全相同的图像(但旋转方式不同),但它只找到了第一个命中图像(它们被打印在一张类似矩阵视图的纸上)。这是否意味着我将只能跟踪每个唯一的参考图像的第一次命中?

如果我们有锚的列表,我们可以试着计算,如果这不是相同的确切点,也许试着强迫它进一步搜索?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-03-02 14:02:18

我非常肯定,不可能直接从框中跟踪同一图像的多个事件,因为当检测到图像时,就会给出一个ARImageAnchor,而这只发生一次:

如果当检测到图像时,AR体验会向场景添加虚拟内容,则默认情况下,该操作只发生一次。为了让用户在不重新启动应用程序的情况下再次体验这些内容,请调用会话的remove (锚:)方法来删除相应的ARImageAnchor:在删除锚后,ARKit将在下次检测到图像时添加一个新的锚点。

尽管如此,通过使用此内置函数,您可以通过在一段时间后手动删除图像的ARImageAnchor来跟踪图像显示的次数:

代码语言:javascript
复制
func remove(anchor: ARAnchor)

不过,我不认为这会起作用,不过,如果你在同一时间在相机的皱褶中有相同的图像。

不管怎么说,希望这个例子能帮助你.

创建两个变量(一个用于存储检测计数,另一个用于存储锚):

代码语言:javascript
复制
   var anchors = [ARImageAnchor]()
   var countOfDetectedImages = 0

然后:

代码语言:javascript
复制
  func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

    //1. If Out Target Image Has Been Detected Than Get The Corresponding Anchor
    guard let currentImageAnchor = anchor as? ARImageAnchor else { return }

    //2. Store The ARImageAnchors
    anchors.append(currentImageAnchor)

    //3. Get The Targets Name
    let name = currentImageAnchor.referenceImage.name!

    print("Image Name = \(name)")

    //4. Increase The Count If The Reference Image Is Called Target
    if name == "target"{

        countOfDetectedImages += 1

        print("\(name) Has Been Detected \(countOfDetectedImages)")

            //6. Remove The Anchor
            DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
                self.augmentedRealitySession.remove(anchor: anchor)
        }
    }

}

对于变量的完全重置:

代码语言:javascript
复制
 /// Removes All The ARImageAnchors & The Detected Count
func removeAllAnchorsAndResetCount(){

    countOfDetectedImages = 0
    anchors.forEach{ augmentedRealitySession.remove(anchor: $0) }
    anchors.removeAll()
}

可能的WorkAround:

FYI,在Apple Documentation中有一些注释,其中有init方法:

init(CGImage,取向: CGImagePropertyOrientation,physicalWidth: CGFloat):

从核心图形图像对象创建新的引用映像。

init(CVPixelBuffer,方位: CGImagePropertyOrientation,physicalWidth: CGFloat)

从核心视频像素缓冲区创建新的参考图像。

所以“也许”--我还没有研究过--你也许可以用这种方式来适应这个方向?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49069512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档