如何解决无法获取QR码,ARKit的正确坐标-Swift
我试图迅速将一个物体放置在QR码上方。我能够检测到QR码,但是放置盒子的位置错误。我不太了解该展示位置的工作原理。我知道如何将物体放在飞机上。我是否需要以某种方式将检测到的飞机与检测到QR码的位置相关联?关于此SCNVector列如何工作的任何信息也将受到赞赏,哈哈。另外,如果CIDector过时并且有一种新方法。
以下是检测QRCode并放置方框的代码段: var foundQRQRs = String
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)
解决方法
首先,将boxNode
位置设置为相机位置。这不是你想要的。
第二,任何QR码检测器都会在图像空间中提供2d边界框坐标。要将2d坐标转换为场景坐标,您需要找到一条从相机到QR码平面的光线。
请检查代码here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。