无聊写了个小demo,虽然简单,就直接上代码人脸检测

#import "ViewController.h"

#import <CoreImage/CoreImage.h>

#import <ImageIO/ImageIO.h>

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

// 检测器 (从图片当中检测出内容)

@property (strong, nonatomic) CIDetector *detector;

// Core Image 图片处理的上下文, 在编译和运行滤镜内核时做出相关处理

// 创建context比较消耗资源, 多考虑复用

@property (strong, nonatomic) CIContext *context;

@end

@implementation ViewController

- (void)viewDidLoad

{

[super viewDidLoad];

// 实例化上下文

self.context = [CIContext contextWithOptions:nil];

/**

NSString* const CIDetectorTypeFace;        脸

NSString* const CIDetectorTypeRectangle;       矩形

NSString* const CIDetectorTypeQRCode;      二维码

NSString* const CIDetectorTypeText;        文本

*/

// 实例化检测器

self.detector = [CIDetector detectorOfType:CIDetectorTypeFace context:self.context options:@{

CIDetectorAccuracy : CIDetectorAccuracyHigh,

// 精确度高, 浪费时间多

}];

}

- (IBAction)btnAction:(id)sender

{

UIImage *image = [UIImage imageNamed:@"face"];

self.imageView.image = image;

// 注意: 直接通过imageNamed加载的图片,  .CIImage属性是空

//    NSLog(@"CGImage: %@, CIImage:  %@", image.CGImage, image.CIImage);

// 1. 得到对应的CIImage

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

// 关于图片检测, 需要知道图片的Origin

//    NSLog(@"%@",  inputImage.properties);

// kCGImagePropertyOrientation 需要导入ImageIO框架

NSNumber *number = [inputImage.properties valueForKey:(NSString *)kCGImagePropertyOrientation];

// 图片检测

NSArray <CIFeature *> *features = nil;

if (number) {

features = [self.detector featuresInImage:inputImage options:@{CIDetectorImageOrientation : number}];

} else {

features = [self.detector featuresInImage:inputImage];

}

// 由于检测的是CIDetectorTypeFace, 所以结果是CIFaceFeature类型

// CIFaceFeature 表示检测到的脸的特征信息

for (CIFaceFeature *feature in features) {

NSLog(@"%@", NSStringFromCGRect(feature.bounds));

// CIImage图片的坐标, 跟数学坐标一样, 相对UI的坐标来看是倒过来 (沿X轴旋转)

// 将脸的frame值调整成与UI坐标系一样

//  1. 纠正坐标系

CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, -1); // 沿X轴旋转

transform = CGAffineTransformTranslate(transform, 0, -inputImage.extent.size.height);   // 上移图片高度

CGRect faceRect = CGRectApplyAffineTransform(feature.bounds, transform);

// 2. 修正imageView对图片的压缩., scale图片的缩放比例

CGFloat scale = MIN(self.imageView.bounds.size.width / inputImage.extent.size.width, self.imageView.bounds.size.height / inputImage.extent.size.height);

faceRect = CGRectApplyAffineTransform(faceRect, CGAffineTransformMakeScale(scale, scale));

// 3. 修正imageView的边缘的间隙

CGFloat xDetail = (self.imageView.bounds.size.width - inputImage.extent.size.width * scale) / 2;

CGFloat yDetail = (self.imageView.bounds.size.height - inputImage.extent.size.height *scale) / 2;

NSLog(@"xDetail: %f,  yDetail: %f", xDetail, yDetail);

faceRect.origin.x += xDetail;

faceRect.origin.y += yDetail;

// 将边框画上去

UIView *view = [[UIView alloc] initWithFrame:faceRect];

view.layer.borderColor = [UIColor grayColor].CGColor;

view.layer.borderWidth = 2;

[self.imageView addSubview:view];

}

}

@end

iOS 照片人脸识别相关推荐

  1. iOS Face++人脸识别SDK的使用

    前言 1.注册一个Face++的帐号,创建应用,获取APPID和APPKEY: 2.下载人脸识别的SDK到本地: 一.将SDK导入工程 1.将下载的SDK解压,将FaceappSDK文件夹拖入工程中 ...

  2. iOS百度人脸识别打包上传AppStore报错

    遇到这种问题,解决方式如下: (1) 删除com.baidu.idl.face.faceSDK.bundle中的文件 A:com.baidu.idl.face.faceSDK B:Info.plist ...

  3. iOS之使用CoreImage进行人脸识别

    更新 :应各位朋友的需求,补上了OC版本的demo, OC版下载地址 另外附上 : swift版下载地址 CoreImage是Cocoa Touch中一个强大的API,也是iOS SDK中的关键部分, ...

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

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

  5. flutter 刷脸_GitHub - nnnggel/baidu_face_plugin: 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android)...

    baidu_face_plugin 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android) 使用方式 注册百度开发者账号 前往 百度开发者账号 进行注册. 申请并配置licen ...

  6. iOS黑科技之(CoreImage)静态人脸识别(一)

    iOS黑科技之(CoreImage)静态人脸识别(一) 人脸识别原理简介:每一张图片都是由每一个像素点组成,而每一个像素点中又有对应的颜色值(如RGB),人的面部特征中,不同的五官,颜色值肯定存在差异 ...

  7. iOS 开发技术之人脸识别

    Demo源码:https://github.com/EmyWong/PersonalUITech 前言 作为一名iOS开发人员,我觉得第一步是能够基本模仿一个APP,完成别人APP的界面搭建:第二步, ...

  8. ios识别人脸自动拍照_真的逆天?iOS 10相册识别人脸的秘密

    在今年的WWDC大会上,苹果正式发布了iOS 10系统,虽然其中诸多"新特性"我们早已在安卓系统中见识过了,但作为苹果用户依旧还是非常期待这些细节上的变化.根据大会上的演示,在iO ...

  9. iOS黑科技之(AVFoundation)动态人脸识别(二)

    iOS黑科技之(AVFoundation)动态人脸识别(二) 上一篇介绍了Core Image实现的静态人脸识别, 这里介绍AVFoundation的强大功能之一的动态人脸识别 一. 首先介绍一些人脸 ...

最新文章

  1. 智源发布:悟道 · 文汇 | 面向认知,超大规模新型预训练模型
  2. 你最喜欢的“程序员”卡通是什么?
  3. springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
  4. spring 入门 1
  5. Angular应用页面里appId的生成逻辑和位置
  6. [ios2] ios使用自带git respository管理项目 【转】
  7. 在Linux上使用logwatch分析监控日志文件
  8. 日产汽车宣布已关停日、英、美、南非、俄等地工厂
  9. python音频实时频谱分析_基于python的音频设计及频谱分析
  10. 更轻量级的Semaphore、AutoResetEvent、ThreadPool
  11. DupeString 与 StringOfChar 的区别 - 回复 鹰@长空
  12. atitit. orm mapping cfg 映射配置(3)-------hbnt one2maney cfg
  13. PAIP批量改名JS实现
  14. 你写的api接口代码真是_百度AI接口之JavaAPI方式调用示例代码[持续完善中]
  15. ACL'22 | 陈丹琦提出CoFi模型剪枝,加速10倍,精度几乎无损
  16. php控制表格颜色,php – 表格列的背景颜色
  17. 用python实现矩形图片转换正方形(防失真 + 文件批量可操作)
  18. Wrong namespace. Expected 'cn.itheima.dao.CustomerMapping' 错误
  19. 软件测试工程师简历要怎么写,才能让HR看到
  20. 宏碁暗影骑士设置u盘启动教程

热门文章

  1. 大数据必学Java基础(九十九):DAO模式介绍
  2. 必看!女生走路如何变得有气质
  3. VsCode官网快速下载
  4. 炫酷的空气净化器控件 - AirPurgeLayoutView
  5. js实现新浪微博评论
  6. Android Studio 查看db文件
  7. Ansys-静力学分析-圆轴扭转的学习体会
  8. HTML阻止textarea标签回车换行
  9. Python3.7 pytesseract+PIL+Tesseract-OCR识别中文
  10. 解决联想小新系统内存缩小2g问题