ARKit 2-作物识别图像 [英] ARKit 2 - Crop Recognizing Images

查看:120
本文介绍了ARKit 2-作物识别图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我的目标是:

  1. 查找已知图片

  1. Find known image

guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else { return }

let configuration = ARWorldTrackingConfiguration()
configuration.detectionImages = referenceImages

.

  1. 从sceneView拍摄快照

  1. take a snapshot from sceneView

 func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

       let image = sceneView.snapshot()  //  or else self.sceneView.session.currentFrame?.capturedImage

  • 我需要从SceneView中提取图像.

  • I need extract the image form the SceneView.

    这是我的代码,我正在使用renderer.projectPoint方法.

    This is my code, I'm using the renderer.projectPoint method.

      guard let imageAnchor = anchor as? ARImageAnchor else {
                return
            }
            let posx = anchorTr.x// fnode.convertPosition(node.position, to: node).x //self.positionFromTransform(node.simdTransform).x// node.simdTransform.columns.3.x
            let posy = anchorTr.y//fnode.convertPosition(node.position, to: node).y //self.positionFromTransform(node.simdTransform).y//node.simdTransform.columns.3.y
            let posz = anchorTr.z //node.simdTransform.columns.3.z
    
    
                      let width = referenceImage.physicalSize.width
            let height = referenceImage.physicalSize.height
    
    
            let topLeftPosition = SCNVector3(posx - Float(width / 2), posy - Float(height / 2), posz )
            let topRightPosition = SCNVector3(posx + Float(width / 2), posy - Float(height / 2), posz )
            let bottomLeftPosition = SCNVector3(posx - Float(width / 2), posy + Float(height / 2), posz )
            let bottomRightPosition = SCNVector3(posx + Float(width / 2), posy  + Float(height / 2), posz)
    
    
            let topLeftProjection = renderer.projectPoint(topLeftPosition)
            let topRightProjection = '''
            let bottomLeftProjection = '''
            let bottomRightProjection = '''
    
            let topLeft = CGPoint(x: CGFloat(topLeftProjection.x), y: CGFloat( topLeftProjection.y))
            let topRight = ''
            let bottomLeft = ''''''
            let bottomRight = '''
    
    
      let points = [topLeft, topRight, bottomRight, bottomLeft]
    
       self.drawPolygon(points, color:.green)
    

    但是,似乎这种方法取决于手机的位置.

    but it seems that this method depends on the position of the cell phone.

    推荐答案

    对于我来说,我通过对每个参考点执行此操作来解决了该问题.

    In my case, I solved it by doing this for each of the reference points.

    let transform = node.simdConvertTransform(node.simdTransform, to: node.parent!)
    
    let x = transform.columns.3.x
    let y = transform.columns.3.y
    let z = transform.columns.3.z
    
    let position = SCNVector3(x, y, z)
    let projection = renderer.projectPoint(position)
    
    let screenPoint =  CGPoint(x: CGFloat(projection.x), y: CGFloat( projection.y))
    

    这篇关于ARKit 2-作物识别图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆