0

I am using the code below to draw a rect around an image using Apple VNRectangleObservation. This is detecting the rect, but when I have resized the AVCaptureVideoPreviewLayer view size, the rect isn't showing in the correct position. Please see screenshot below.

func drawBoundingBox(rect : VNRectangleObservation) {
    
        let transform = CGAffineTransform(scaleX: 1, y: -1).translatedBy(x: 0, y: -self.previewLayer.frame.height)
        let scale = CGAffineTransform.identity.scaledBy(x: self.previewLayer.frame.width, y: self.previewLayer.frame.height)

        let bounds = rect.boundingBox.applying(scale).applying(transform)
        createLayer(in: bounds)
    }

    private func createLayer(in rect: CGRect) {

        maskLayer = CAShapeLayer()
        maskLayer.frame = rect
        maskLayer.cornerRadius = 10
        maskLayer.opacity = 0.75
        maskLayer.borderColor = UIColor.red.cgColor
        maskLayer.borderWidth = 2.0
        
        previewLayer.insertSublayer(maskLayer, at: 1)

    }

Screenshot of vision rectangle detection not drawing in correct location

Tom Coomer
  • 6,227
  • 12
  • 45
  • 82

0 Answers0