[iOS]CIDetector之CIDetectorTypeFace人脸识别

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    imageView.image = [UIImage imageNamed:@"timg.jpeg"];
    [self.view addSubview:imageView];

    CGFloat width = imageView.image.size.width;
    CGFloat height = imageView.image.size.height;

    CGFloat sWidth = imageView.bounds.size.width;
    CGFloat sHeight = imageView.bounds.size.height;

    CGFloat x = width/sWidth;
    CGFloat y = height/sHeight;

    // 根据image修改imageview的frame
    if (x > y)
    {
        imageView.frame = CGRectMake(0, (sHeight-height/x)/2, sWidth, height/x);
    }else{
        imageView.frame = CGRectMake((sWidth-width/y)/2, 0, width/y, sHeight);
    }

    // 压缩image
    UIGraphicsBeginImageContext(CGSizeMake(imageView.bounds.size.width , imageView.bounds.size.height));
    [imageView.image drawInRect:CGRectMake(0, 0, imageView.bounds.size.width, imageView.bounds.size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    imageView.image = scaledImage;

    //识别
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        CIImage *cImage = [CIImage imageWithCGImage:imageView.image.CGImage];
        // 设置识别模式
        NSDictionary  *opts = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh
                                                          forKey:CIDetectorAccuracy];
        /* Lower accuracy, higher performance */
        //CORE_IMAGE_EXPORT NSString* const CIDetectorAccuracyLow NS_AVAILABLE(10_7, 5_0);

        /* Lower performance, higher accuracy */
        //CORE_IMAGE_EXPORT NSString* const CIDetectorAccuracyHigh NS_AVAILABLE(10_7, 5_0);

        CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
                                                  context:nil
                                                  options:opts];

        NSArray *features = [detector featuresInImage:cImage];

        if ([features count] == 0)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"检测失败");
            });
            return ;
        }

        for (CIFaceFeature *feature in features)
        {
            // 是否微笑
            BOOL smile = feature.hasSmile;

            NSLog(smile ? @"微笑" : @"没微笑");

            // 眼睛是否睁开
            BOOL leftEyeClosed = feature.leftEyeClosed;
            BOOL rightEyeClosed = feature.rightEyeClosed;

            NSLog(leftEyeClosed ? @"左眼没睁开" : @"左眼睁开");
            NSLog(rightEyeClosed ? @"右眼没睁开" : @"右眼睁开");

            // 获取脸部frame
            CGRect rect = feature.bounds;
            rect.origin.y = imageView.bounds.size.height - rect.size.height - rect.origin.y;// Y轴旋转180度
            faceRect = rect;
            NSLog(@"脸 %@",NSStringFromCGRect(rect));

            // 左眼
            if (feature.hasLeftEyePosition)
            {
                CGPoint eye = feature.leftEyePosition;
                eye.y = imageView.bounds.size.height - eye.y;// Y轴旋转180度
                NSLog(@"左眼 %@",NSStringFromCGPoint(eye));
            }

            // 右眼
            if (feature.hasRightEyePosition)
            {
                CGPoint eye = feature.rightEyePosition;
                eye.y = imageView.bounds.size.height - eye.y;// Y轴旋转180度
                NSLog(@"右眼 %@",NSStringFromCGPoint(eye));
            }

            // 嘴
            if (feature.hasMouthPosition)
            {
                CGPoint mouth = feature.mouthPosition;
                mouth.y = imageView.bounds.size.height - mouth.y;// Y轴旋转180度
                NSLog(@"嘴 %@",NSStringFromCGPoint(mouth));
            }
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"检测完成");
            UIView *view = [[UIView alloc] initWithFrame:faceRect];
            view.backgroundColor = [UIColor blueColor];
            view.alpha = 0.3;
            [imageView addSubview:view];
        });
    });
}

运行结果

控制台输出结果

时间: 2024-10-20 04:35:16

[iOS]CIDetector之CIDetectorTypeFace人脸识别的相关文章

iOS 使用百度的人脸识别登录验证,解决认证失败在头像页面继续识别认证问题

人脸识别(活体验证): 1.芝麻认证 : 0.4元/次,需要企业企业认证.不能有与芝麻信用类似的业务,如:保险... 2.旷视 : 0.5/次.企业认证.业务限制 3. 百度人脸识别 :免费的---可以同时处理10条认证,  企业认证. 4.科大讯飞   人脸检测  2000万次   1年 7.2万  活体检测只能上传一段视频来检测 需要和商务沟通 我们使用的百度,,,, 需求:需要在认证中不跳转界面,失败:继续认证.成功:跳转. 1.在认证结果中促发通知给 DetectionViewContr

IOS 通过摄像头读取每一帧的图片,并且做识别做人脸识别(swift)

最近帮别人做一个项目,主要是使用摄像头做人脸识别 github地址:https://github.com/qugang/AVCaptureVideoTemplate 要使用IOS的摄像头,需要使用AVFoundation 库,库里面的东西我就不介绍. 启动摄像头需要使用AVCaptureSession 类. 然后得到摄像头传输的每一帧数据,需要使用AVCaptureVideoDataOutputSampleBufferDelegate 委托. 首先在viewDidLoad 里添加找摄像头设备的代

利用CIDetector来人脸识别

利用CIDetector来人脸识别 by 伍雪颖 利用CIDetector来人脸识别 添加图片: UIImage* image = [UIImage imageNamed:@"face.jpg"]; UIImageView *testImage = [[UIImageView alloc] initWithImage: image]; [testImage setTransform:CGAffineTransformMakeScale(1, -1)]; [[[UIApplication

iOS人脸识别(CoreImage)

1.从初始UIImage获取一个CIImage对象. 2.创建一个用于分析对象的CIContext. 3.通过type和options参数创建一个CIDetector实例. type参数指定了要识别的特征类型.options参数可以设置识别特征的精确度,低精确度速度快,高精确度更准确. 4.创建一个图像数组,里面放对象的实例. 5.通过imageByCroppingToRect:方法结合原始图像以及在图像中找到的最后一个实例对象中指定的边界创建一个CIImage.这些边界表示人脸所在的CGRec

iOS人脸识别(检测)

iOS的CoreImage已经内建了人脸检测的接口,检测准确率一般,尤其是侧脸,基本上就检测不到.不过跟其他同类产品比较,也还算是不相上下吧.用起来很简单: CIImage* image = [CIImage imageWithCGImage:aImage.CGImage]; NSDictionary *opts = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]; CIDe

结合活体检测,人脸识别在Android、IOS、服务器中的应用

随着深度学习方法的应用,人工智能的发展,人脸识别技术的识别率已经得到质的提升,通过反复开发试验,目前我司的人脸识别技术率已经达到99%.人脸识别技术与其他生物特征识别技术相吃比,在实际应用中具有天然独到的优势:通过摄像头直接获取,在非接触的方式完成识别过程.通过人脸识别与证件识别的比对,目前我司的人脸识别技术已应用在金融.教育.景区.旅运.社保等领域. 人脸识别技术简介 人脸识别技术主要分为两部分: 第一部为前端人脸活体检测技术,主要支持android.ios平台,在前端通过眨眼.张嘴.摇头.点

利用CoreImage进行人脸识别--iOS

来源:http://code4app.com/codesample/5195a56f6803fa4273000000 Licence:Zlib 作者:Chili小灰灰 http://code4app.com/member/4ffd0cec6803fa407a000000 介绍: 利用CoreImage进行人脸识别,可以判断人脸整体位置,以及两只眼睛和嘴巴的大概位置.并根据人脸范围,对图片进行剪切. 小编注:感谢作者@Chili小灰灰 分享代码于Code4App. 效果图: <ignore_js_

支持Android、iOS系统的人脸识别技术

随着深度学习方法的应用,支持Android.iOS系统的人脸识别技术的识别率已经得到质的提升,目前我司的支持Android.iOS系统的人脸识别技术率已经达到99%.支持Android.iOS系统的人脸识别技术与其他生物特征识别技术相比,在实际应用中具有天然独到的优势:通过摄像头直接获取,可以非接触的方式完成识别过程,方便快捷.目前我司的支持Android.iOS系统的人脸识别技术已应用在金融.教育.景区.旅运.社保等领域. 支持Android.iOS系统的人脸识别技术主要分为两部分: 第一部为

uniapp安卓ios百度人脸识别、活体检测、人脸采集APP原生插件

插件亮点 1 支持安卓平板(横竖屏均可),苹果的iPad.2 颜色图片均可更换. 特别提醒 此插件包含 android 端和 iOS 端,考虑到有些同学只做其中一个端的 app,特意分为 2 个插件,减小安装包体积.android 端请点击这里.iOS 端请点击这里. 1.前言 最近在使用 uniapp 开发项目,有刷脸实名认证的需求,最终使用百度人脸识别实现了需求.自己做了个 APP 原生插件,给大家介绍下用法.本插件主要功能是通过动作检测活体,采集人脸返回.其他功能需要自主实现,如刷脸登录,