2013-12-11 6 views
-1

CoreImage의 얼굴 인식에 문제가 있습니다. 내 응용 프로그램은 전면 카메라를 사용하여 얼굴의 인물 사진을 찍습니다. 여기 iOS 얼굴 검출 있음

CIImage* image = [CIImage imageWithCGImage:self.photo.CGImage]; 
CIContext *context = [CIContext contextWithOptions:nil]; 
CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace 
              context:context options:@{CIDetectorAccuracyHigh:CIDetectorAccuracy}]; 
NSDictionary* imageOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:6] forKey:CIDetectorImageOrientation]; 
NSArray* features = [detector featuresInImage:image options:imageOptions]; 


for (CIFaceFeature *f in features) 
{ 
    NSLog(@"%@",NSStringFromCGRect(f.bounds)); 

    if (f.hasLeftEyePosition) 
     NSLog(@"Left eye %.0f %.0f", f.leftEyePosition.x, f.leftEyePosition.y); 

    if (f.hasRightEyePosition) 
     NSLog(@"Right eye %.0f %.0f", f.rightEyePosition.x, f.rightEyePosition.y); 

    if (f.hasMouthPosition) 
     NSLog(@"Mouth %.0f %.0f", f.mouthPosition.x, f.mouthPosition.y); 
} 

내 콘솔 출력 :이 좌표가 분명히 내 응용 프로그램의보기를 (사용하지 않는

  1. :

    {{437.5, 170}, {625, 625}} 
    Left eye 628 371 
    Right eye 639 594 
    Mouth 906 482 
    

    2이 문제가되어 여기 내 설정이다 320 X 568)

  2. 잘못된 방향으로 보입니다. 눈의 y 레벨은 같아야하지만 동일한 x 레벨을 가져야합니다.

어떻게 이러한 문제를 해결할 수 있습니까?

+0

아마도 픽셀 단위이며 아마 인물 사진 일 것입니다. – Jessedc

답변

2

CoreImage의 얼굴 검출기는보기 공간이 아닌 이미지 좌표 공간에서 작동합니다. 이렇게 반환 된 좌표는 이미지의 픽셀 단위입니다.

Here님께서는이 글의 좌표 공간이 무엇인지, 그리고 서로 변환하는 방법에 대한 자습서를 제공합니다. 이것은 당신을 위해 일을 정리해야합니다.

오리엔테이션은 다음과 같이 바뀝니다.

가로 또는 세로 어느 것이 든 사용자가 사진을 찍을 때 디스크에 쓰여지는 실제 이미지는 항상 같은 크기입니다. 파일의 어딘가에 표시해야하는 방향 (정확히 Exif.Image.Orientation)을 나타내는 플래그 만 설정하면 UIImageView이라는 플래그가 적용되지만 CGImage으로 변환 한 다음 CIImage으로 변환하면이 플래그가 손실됩니다.

원래 UIImageimageOrientation 속성을보고 xy 값을 뒤집을 지 여부를 알 수 있습니다. 이 플래그가 무엇인지 정확히 알고 싶다면 놀랍게도 많은 사람들이 잘못 이해하는 방법을 here