Saltar al contenido

Convierta VisionboundingBox de VNFaceObservation a rect para dibujar en la imagen

Si encuentras algo que no comprendes puedes comentarlo y te responderemos rápidamente.

Solución:

Hay métodos incorporados que lo harían por usted. Para convertir de forma normalizada use esto:

func VNImageRectForNormalizedRect(_ normalizedRect: CGRect, _ imageWidth: Int, _ imageHeight: Int) -> CGRect

Y viceversa:

func VNNormalizedRectForImageRect(_ imageRect: CGRect, _ imageWidth: Int, _ imageHeight: Int) -> CGRect

Métodos similares para puntos:

func VNNormalizedFaceBoundingBoxPointForLandmarkPoint(_ faceLandmarkPoint: vector_float2, _ faceBoundingBox: CGRect, _ imageWidth: Int, _ imageHeight: Int) -> CGPoint
func VNImagePointForNormalizedPoint(_ normalizedPoint: CGPoint, _ imageWidth: Int, _ imageHeight: Int) -> CGPoint

Tienes que hacer la transición y escalar de acuerdo a la imagen. Ejemplo

func drawVisionRequestResults(_ results: [VNFaceObservation]) 
    print("face count = (results.count) ")
    previewView.removeMask()

    let transform = CGAffineTransform(scaleX: 1, y: -1).translatedBy(x: 0, y: -self.view.frame.height)

    let translate = CGAffineTransform.identity.scaledBy(x: self.view.frame.width, y: self.view.frame.height)

    for face in results 
        // The coordinates are normalized to the dimensions of the processed image, with the origin at the image's lower-left corner.
        let facebounds = face.boundingBox.applying(translate).applying(transform)
        previewView.drawLayer(in: facebounds)
    

Probé de varias maneras y esto es lo que funcionó mejor para mí:

dispatch_async(dispatch_get_main_queue(), ^
    VNDetectedObjectObservation * newObservation = request.results.firstObject;
    if (newObservation) 
        self.lastObservation = newObservation;
        CGRect transformedRect = newObservation.boundingBox;
        CGRect convertedRect = [self.previewLayer rectForMetadataOutputRectOfInterest:transformedRect];
        self.highlightView.frame = convertedRect;
    
);

Puedes ayudar nuestra tarea escribiendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *