天天看點

iOS人臉識别(CoreImage)

1、從初始UIImage擷取一個CIImage對象。

2、建立一個用于分析對象的CIContext。

3、通過type和options參數建立一個CIDetector執行個體。

type參數指定了要識别的特征類型。options參數可以設定識别特征的精确度,低精确度速度快,高精确度更準确。

4、建立一個圖像數組,裡面放對象的執行個體。

//self.mainImageView.image選取的圖檔      
- (IBAction)findFace:(id)sender
{
    UIImage * image = self.mainImageView.image;
    CIImage * coreImage = [[CIImage alloc] initWithImage:image];
    CIContext * context = [CIContext contextWithOptions:nil];
    CIDetector * detector = [CIDetector detectorOfType:@"CIDetectorTypeFace"context:context options:[NSDictionary dictionaryWithObjectsAndKeys:@"CIDetectorAccuracyHigh", @"CIDetectorAccuracy", nil]];
    NSArray * features = [detector featuresInImage:coreImage];
    
    if ([features count] >0)
    {
        CIImage * faceImage = [coreImage imageByCroppingToRect:[[features lastObject] bounds]];
        UIImage * face = [UIImage imageWithCGImage:[context createCGImage:faceImage fromRect:faceImage.extent]];
        self.faceImageView.image = face;
        
        [self.findFaceButton setTitle:[NSString stringWithFormat:@"%lu Face(s) Found", (unsigned long)[features count]] forState:UIControlStateNormal];
        self.findFaceButton.enabled = NO;
        self.findFaceButton.alpha = 0.6;
    }
    else
    {
        [self.findFaceButton setTitle:@"No Faces Found"forState:UIControlStateNormal];
        self.findFaceButton.enabled = NO;
        self.findFaceButton.alpha = 0.6;
    }
}