- (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(, (sHeight-height/x)/, sWidth, height/x);
}else{
imageView.frame = CGRectMake((sWidth-width/y)/, , width/y, sHeight);
} // 压缩image
UIGraphicsBeginImageContext(CGSizeMake(imageView.bounds.size.width , imageView.bounds.size.height));
[imageView.image drawInRect:CGRectMake(, , imageView.bounds.size.width, imageView.bounds.size.height)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); imageView.image = scaledImage; //识别
dispatch_async(dispatch_get_global_queue(, ), ^{
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] == )
{
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];
});
});
}

关于图片压缩:imageview的大小与image的大小不一致,识别的时候,是按照image的大小进行计算,通过重绘,使imageview与image保持一致。

关于坐标Y轴翻转:屏幕的坐标原点即(0,0)点在左上角,识别图片的坐标原点在左下角。

运行结果

控制台输出结果

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

  1. 基于iOS用CoreImage实现人脸识别

    2018-09-04更新: 很久没有更新文章了,工作之余花时间看了之前写的这篇文章并运行了之前写的配套Demo,通过打印人脸特征CIFaceFeature的属性,发现识别的效果并不是很好,具体说明见文 ...

  2. 利用iOS原生系统进行人脸识别+自定义滤镜(GPUImage)

    人脸识别+滤镜效果(基于GPUImage实现的自定义滤镜) 最近碰到一个好玩的需求.说要客户端这边判定一下是否有人脸.在有的基础上.对相片做进一步的美化滤镜处理. 首先是人脸的识别判定; //将图片对 ...

  3. iOS 使用百度的人脸识别登录验证,解决认证失败不跳转界面连续认证,认证相似度对比

    在使用百度人脸识别出现的问题:小米6调用摄像机是黑白的一个情况,iOS上会出现识别准确性上的问题(多次代开认证,会通过) 人脸识别(活体验证): 1.芝麻认证 : 0.4元/次,需要企业企业认证.不能 ...

  4. 基于OpenCV的人脸识别[iOS开发笔记(2)]

    开始了OpenCV的试水工作了... 1.Get ready 在OpenCV中我们会使用函数cv::CascadeClassifier 来进行人脸检测.但是在使用本函数之前我们需要添加一个XML文件对 ...

  5. iOS人脸识别(CoreImage)

    1.从初始UIImage获取一个CIImage对象. 2.创建一个用于分析对象的CIContext. 3.通过type和options参数创建一个CIDetector实例. type参数指定了要识别的 ...

  6. 指纹识别人脸识别 iOS

    //1.判断iOS8及以后的版本 if([UIDevice currentDevice].systemVersion.doubleValue >= 8.0){ //从iPhone5S开始,出现指 ...

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

    插件亮点 1 支持安卓平板(横竖屏均可),苹果的iPad.2 颜色图片均可更换. 特别提醒 此插件包含 android 端和 iOS 端,考虑到有些同学只做其中一个端的 app,特意分为 2 个插件, ...

  8. 虹软人脸识别iOS SDK2.0

    最近公司要在APP上添加一个人脸识别功能,在网上搜了一圈,发现虹软的人脸识别SDK挺好用的,而且还免费,所以就下载了他们的SDK研究了一下.总的来看功能挺好用的,只是demo上面部分功能不是很完善,所 ...

  9. opencv 人脸识别

      背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

随机推荐

  1. AngularJS+RequireJs实现动态加载JS和页面的方案研究【下】

    about.js: [html] view plain copy 在CODE上查看代码片派生到我的代码片 define(['app'], function(app) { app.controller( ...

  2. CentOS6.5(2)----安装Tab键自动补全功能:bash-completion

    首先要确保网络畅通,因为该过程要通过网络下载相关的软件包. 在 root 用户下,使用 cd ~/Downloads 命令进入下载文件夹,然后依次输入如下三个命令: [root@prime:~/Doc ...

  3. MySQL数据库(13)----忘记root用户密码解决方案【转载】

    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...

  4. OllyDbg的基本使用

    注:内容整理自<逆向工程核心原理>,结合我的OllyDbg版本修改了一些内容 1. OllyDbg常用命令及其快捷键 指令 快捷键 含义 Restart Ctrl+F2 重新开始调试 St ...

  5. android studio新建项目时出现Error:Execution failed for task ':app:preDebugAndroidTestBuild'.

    android studio更新后创建新项目时出现以下错误 可以用Build->Rebuild Project解决,但这个方法只是临时的,重新打开项目还是会报错 所以用另一种方法: 在app下的 ...

  6. QTreeView/QTableView中利用QStandardItem实现复选框三种形态变化

    https://www.techieliang.com/2017/12/729/ 原文地址 using_checkbox_item.h /** * @file using_checkbox_item. ...

  7. centos7安装lua语言环境

    Linux 上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可. 官网地址:http://www.lua.org/download.html 我这里安装的是:lua-5.3.0.tar ...

  8. Windows10禁用update

    1.运行 gpedit.msc 或搜索 组策略 ,点 计算机配置—管理模板—Windows组件—Windows更新—配置自动更新 ,设置“已禁用”.2.点 控制面板—系统和安全—管理工具 ,点 服务 ...

  9. linux 下通过过 hbase 的Java api 操作hbase

    hbase版本:0.98.5 hadoop版本:1.2.1 使用自带的zk 本文的内容是在集群中创建java项目调用api来操作hbase,主要涉及对hbase的创建表格,删除表格,插入数据,删除数据 ...

  10. Python实例---三级菜单的实现[low]

    # version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 menu = { '陕西': { '西安': { '未名区': [ ...