this is just some pretty standard code I have tried. What I am trying to do is place two eyeballs and a mouth on a very stable portrait image. Here is what I have tried:
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;
}
}
The problem is my images do translate their center, but to a very awkward position (AKA not the right position)! Although they do appear in a correct distance relation, except mouth is at top. What this means is that there is:
A mouth on top, a few centimeters below there are two eyeballs which are a few centimeters apart. So they are scaled correctly according to the image view, they are just in the wrong plac
CIImage
and UIImage
coordinate systems are inverse, so you have to translate the coordinates.
For example:
CGPoint ciMmouthCenter = faceFeature.mouthPosition;
CGPoint uiMmouthCenter;
uiMouthCenter.x = tim.image.size.width - ciMouthCenter.x;
uiMouthCenter.y = tim.image.size.height - ciMouthCenter.y;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With