iOS 人脸识别功能

来源:互联网 发布:网狐棋牌源码搭建教程 编辑:程序博客网 时间:2024/06/09 20:35

使用 coreimage 可以实现人脸识别功能,并且获取到人脸面部五官的位置。

CIContext *context = [[CIContextalloc]init];

    CIImage *ciImage = [CIImageimageWithCGImage:_faceImg.CGImage];

    NSDictionary *dic = [NSDictionarydictionaryWithObject:CIDetectorAccuracyforKey:CIDetectorAccuracyHigh];

    CIDetector *detector = [CIDetectordetectorOfType:CIDetectorTypeFacecontext:niloptions:dic];

    NSArray *array = [detector featuresInImage:ciImage];

    

    //  照片中只有一个人脸的人脸识别

    if (array.count ==1) {

        

        for (CIFaceFeature *featurein array) {

            NSInteger leftEye_X = feature.leftEyePosition.x;

            NSInteger leftEye_Y = feature.leftEyePosition.y;

            NSInteger rightEye_X = feature.rightEyePosition.x;

            NSInteger rightEye_Y = feature.rightEyePosition.y;

            //   NSInteger mouth_X = feature.mouthPosition.x;

            NSInteger mouth_Y = feature.mouthPosition.y;

            

            //  头为正 左眼高 右眼底  需逆时针旋转

            if (leftEye_Y > rightEye_Y && leftEye_Y > mouth_Y && leftEye_X < rightEye_X)

            {

                CGFloat height = leftEye_Y - rightEye_Y;

                CGFloat width = rightEye_X - leftEye_X;

                CGFloat rad = atan(height/width);

                self.transform =CGAffineTransformMakeRotation(-rad);

            }else if (leftEye_Y < rightEye_Y && rightEye_Y > mouth_Y && leftEye_X < rightEye_X)

            {

                CGFloat height = rightEye_Y - leftEye_Y;

                CGFloat width = rightEye_X - leftEye_X;

                CGFloat rad = atan(height/width);

                self.transform =CGAffineTransformMakeRotation(rad);

            }else if (leftEye_X >= rightEye_X && leftEye_Y >= rightEye_Y && mouth_Y > leftEye_Y) {

                CGFloat height = leftEye_Y - rightEye_Y;

                CGFloat width = leftEye_X - rightEye_X;

                CGFloat rad = atan(height/width);

                self.transform =CGAffineTransformMakeRotation(-(M_PI-rad));

            }else if (leftEye_X >= rightEye_X && rightEye_Y >= leftEye_Y && mouth_Y > leftEye_Y) {

                CGFloat height = rightEye_Y - leftEye_Y;

                CGFloat width = leftEye_X - rightEye_X;

                CGFloat rad = atan(height/width);

                self.transform =CGAffineTransformMakeRotation((M_PI - rad));

            }else{

                self.transform =CGAffineTransformMakeRotation(0);

            }

    }

        

        //  照片中有多个人脸的人脸识别 给每个人脸打上马赛克

    }else if (array.count >1){

        

        CGSize inputImageSize = ciImage.extent.size;

        CGAffineTransform transform =CGAffineTransformIdentity;

        transform = CGAffineTransformScale(transform,1, -1);

        transform = CGAffineTransformTranslate(transform,0, -inputImageSize.height);

        



0 0
原创粉丝点击