无法获取 QR 码的正确坐标,ARKit - Swift

Posted

技术标签:

【中文标题】无法获取 QR 码的正确坐标,ARKit - Swift【英文标题】:Unable to get correct coordinates for QR code, ARKit - Swift 【发布时间】:2020-09-06 16:47:17 【问题描述】:

我正在尝试将一个对象快速放置在 QR 码上方。我能够检测到 QR 码,但是放置盒子的位置是错误的。我真的不明白放置是如何工作的。我知道如何将物体放在飞机上。我是否需要以某种方式将检测到的飞机与它检测到二维码的位置联系起来?任何有关此 SCNVector 列如何工作的信息也将不胜感激,哈哈。此外,如果 CIDector 已过时并且有新方法。

这是一个检测二维码并放置盒子的sn-p: var foundQRCodes = 字符串

func session(_ session: ARSession, didUpdate frame: ARFrame) 
        
        //print("Updated")
        if time != 0.5 
            return
        
    
        DispatchQueue.global(qos: .background).async 

        let image = CIImage(cvPixelBuffer: frame.capturedImage)
        let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: nil)
        let features = detector!.features(in: image)

        
            
        for feature in features as! [CIQRCodeFeature] 
            if !self.discoveredQRCodes.contains(feature.messageString!) 
                self.discoveredQRCodes.append(feature.messageString!)
                let url = URL(string: feature.messageString!)
                let position = SCNVector3(frame.camera.transform.columns.3.x,
                                          frame.camera.transform.columns.3.y,
                                          frame.camera.transform.columns.3.z)
//                add3DModel(fromURL: url!, toPosition: getPositionBasedOnQRCode(frame: frame, position: "df"))
                print(position)
                print(url)
                
                DispatchQueue.main.async 
                let boxNode = SCNNode()
                boxNode.geometry = SCNBox(width: 0.04, height: 0.04, length: 0.04, chamferRadius: 0.002)
                boxNode.geometry?.firstMaterial?.diffuse.contents = UIColor.green
                boxNode.position = position
                boxNode.name = "node"
                self.arView.scene.rootNode.addChildNode(boxNode)
                
                //add3dInstance(fromURL: url!, toPosition: position)
            
        
            
        
            
        

这是结果的图像:

这是一些调试输出: SCNVector3(x: 0.023941405, y: 0.040143043, z: 0.056782123)

【问题讨论】:

嘿,伙计,你用这个有什么收获吗? 【参考方案1】:

首先,您将boxNode 位置设置为相机位置。这不是你想要的。

其次,任何二维码检测器都提供图像空间中的二维边界框坐标。要将 2d 坐标转换为场景坐标,您需要找到从相机到 QR 码平面的射线。

请检查代码here。

【讨论】:

以上是关于无法获取 QR 码的正确坐标,ARKit - Swift的主要内容,如果未能解决你的问题,请参考以下文章

ARKit 大型模型跟随相机而不是保持静止

如何使用zbar在图像上获取检测到的QR码的x,y位置?

ARKit 和 Vuforia - 标记识别

QR二维码原理

二维码生成原理

如何利用Halcon进行二维码QR码的识别