CIFaceFeature señala incorrectamente

este es solo un código bastante estándar que he probado. Lo que estoy tratando de hacer es colocar dos ojos y una boca en una image de retrato muy estable. Esto es lo que he intentado:

CIImage *image = [CIImage imageWithCGImage: [tim.image CGImage]]; CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options: [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey: CIDetectorAccuracy]]; NSArray *feats = [detector featuresInImage: image]; for (CIFaceFeature *faceFeature in feats) { if (faceFeature.hasLeftEyePosition) { eyeLeft.center = faceFeature.leftEyePosition; } if (faceFeature.hasRightEyePosition) { eyeRight.center = faceFeature.rightEyePosition; } if (faceFeature.hasMouthPosition) { moth.center = faceFeature.mouthPosition; } } 

El problema es que mis imágenes traducen su centro, pero a una position muy incómoda (AKA no es la position correcta)! Aunque aparecen en una relación de distancia correcta, excepto que la boca está en la parte superior. Lo que esto significa es que hay:

Una boca en la parte superior, unos centímetros más abajo, hay dos globos oculares separados unos centímetros. Entonces, se escalan correctamente según la vista de la image, están en el lugar equivocado

CIImage sistemas de coorderadas CIImage y UIImage son inversos, por lo que debe traducir las coorderadas. Por ejemplo:

 CGPoint ciMmouthCenter = faceFeature.mouthPosition; CGPoint uiMmouthCenter; uiMouthCenter.x = tim.image.size.width - ciMouthCenter.x; uiMouthCenter.y = tim.image.size.height - ciMouthCenter.y; 

Debe usar la aplicación 'SquareCam' de apple. Coloca un cuadrado en la position correcta para cualquier orientación de las cameras delantera y trasera. Para mi aplicación, acabo de quitar el código de la 'SquareCam' que determina la 'faceRect'. Para la Posición bucal, interpolado a lo largo de la cara del recto para el porcentaje del valor x y el valor y.