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)