2016-01-08 3 views
1

Я пытаюсь сделать приложение распознавания лиц, которое распознает человека, когда оно обнаруживает его лицо. я уже сделал часть обнаружения лица, но я не мог найти способ сравнить лицо с фотографией из фотоальбома, который хранится в приложении.Сравнение изображений на лицо

Вот лицо код обнаружения:

-(void)markFaces:(UIImageView *)facePicture 

{ 

// draw a CI image with the previously loaded face detection picture 

CIImage* image = [CIImage imageWithCGImage:facePicture.image.CGImage]; 



// create a face detector 

CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace 

              context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]]; 



// create an array containing all the detected faces from the detector 

NSArray* features = [detector featuresInImage:image]; 


for(CIFaceFeature* faceFeature in features) 

{ 

    // get the width of the face 

    CGFloat faceWidth = faceFeature.bounds.size.width; 



    // create a UIView using the bounds of the face 

    UIView* faceView = [[UIView alloc] initWithFrame:faceFeature.bounds]; 



    // add a border around the newly created UIView 

    faceView.layer.borderWidth = 1; 

    faceView.layer.borderColor = [[UIColor redColor] CGColor]; 



    // add the new view to create a box around the face 

    [self.view addSubview:faceView]; 



    if(faceFeature.hasLeftEyePosition) 

    { 

     // create a UIView with a size based on the width of the face 

     UIView* leftEyeView = [[UIView alloc] initWithFrame:CGRectMake(faceFeature.leftEyePosition.x-faceWidth*0.15, faceFeature.leftEyePosition.y-faceWidth*0.15, faceWidth*0.3, faceWidth*0.3)]; 

     // change the background color of the eye view 

     [leftEyeView setBackgroundColor:[[UIColor blueColor] colorWithAlphaComponent:0.3]]; 

     // set the position of the leftEyeView based on the face 

     [leftEyeView setCenter:faceFeature.leftEyePosition]; 

     // round the corners 

     leftEyeView.layer.cornerRadius = faceWidth*0.15; 

     // add the view to the window 

     [self.view addSubview:leftEyeView]; 

    } 



    if(faceFeature.hasRightEyePosition) 

    { 

     // create a UIView with a size based on the width of the face 

     UIView* leftEye = [[UIView alloc] initWithFrame:CGRectMake(faceFeature.rightEyePosition.x-faceWidth*0.15, faceFeature.rightEyePosition.y-faceWidth*0.15, faceWidth*0.3, faceWidth*0.3)]; 

     // change the background color of the eye view 

     [leftEye setBackgroundColor:[[UIColor blueColor] colorWithAlphaComponent:0.3]]; 

     // set the position of the rightEyeView based on the face 

     [leftEye setCenter:faceFeature.rightEyePosition]; 

     // round the corners 

     leftEye.layer.cornerRadius = faceWidth*0.15; 

     // add the new view to the window 

     [self.view addSubview:leftEye]; 

    } 



    if(faceFeature.hasMouthPosition) 

    { 

     // create a UIView with a size based on the width of the face 

     UIView* mouth = [[UIView alloc] initWithFrame:CGRectMake(faceFeature.mouthPosition.x-faceWidth*0.2, faceFeature.mouthPosition.y-faceWidth*0.2, faceWidth*0.4, faceWidth*0.4)]; 

     // change the background color for the mouth to green 

     [mouth setBackgroundColor:[[UIColor greenColor] colorWithAlphaComponent:0.3]]; 

     // set the position of the mouthView based on the face 

     [mouth setCenter:faceFeature.mouthPosition]; 

     // round the corners 

     mouth.layer.cornerRadius = faceWidth*0.2; 

     // add the new view to the window 

     [self.view addSubview:mouth]; 

    } 

} 

} 



-(void)faceDetector 

{ 

// Load the picture for face detection 

UIImageView* image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"testpicture.png"]]; 



// Draw the face detection image 

[self.view addSubview:image]; 



// Execute the method used to markFaces in background 

[self performSelectorInBackground:@selector(markFaces:) withObject:image]; 



// flip image on y-axis to match coordinate system used by core image 

[image setTransform:CGAffineTransformMakeScale(1, -1)]; 



// flip the entire window to make everything right side up 

[self.view setTransform:CGAffineTransformMakeScale(1, -1)]; 





} 

ответ

1

Из документации:

Ядра Изображения может анализировать и находить человеческое лицо на изображении. Выполняет обнаружение лица, а не распознавание. Распознавание лиц - это идентификация прямоугольников, которые содержат черты лица человека, а лицо признание - это идентификация конкретных человеческих лиц (Джон, Мэри, и т. Д.). После того, как Core Image обнаружит лицо, он может предоставить информацию о лицевых особенностях, таких как положение глаз и рта. Он также может отслеживать положение идентифицированного лица в видео.

К сожалению, нет ави, предоставленного яблоком, но для распознавания лица. Вы можете посмотреть на third party libraries.