iOS 照片人脸识别
无聊写了个小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 照片人脸识别相关推荐
- iOS Face++人脸识别SDK的使用
前言 1.注册一个Face++的帐号,创建应用,获取APPID和APPKEY: 2.下载人脸识别的SDK到本地: 一.将SDK导入工程 1.将下载的SDK解压,将FaceappSDK文件夹拖入工程中 ...
- iOS百度人脸识别打包上传AppStore报错
遇到这种问题,解决方式如下: (1) 删除com.baidu.idl.face.faceSDK.bundle中的文件 A:com.baidu.idl.face.faceSDK B:Info.plist ...
- iOS之使用CoreImage进行人脸识别
更新 :应各位朋友的需求,补上了OC版本的demo, OC版下载地址 另外附上 : swift版下载地址 CoreImage是Cocoa Touch中一个强大的API,也是iOS SDK中的关键部分, ...
- 基于iOS用CoreImage实现人脸识别
2018-09-04更新: 很久没有更新文章了,工作之余花时间看了之前写的这篇文章并运行了之前写的配套Demo,通过打印人脸特征CIFaceFeature的属性,发现识别的效果并不是很好,具体说明见文 ...
- flutter 刷脸_GitHub - nnnggel/baidu_face_plugin: 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android)...
baidu_face_plugin 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android) 使用方式 注册百度开发者账号 前往 百度开发者账号 进行注册. 申请并配置licen ...
- iOS黑科技之(CoreImage)静态人脸识别(一)
iOS黑科技之(CoreImage)静态人脸识别(一) 人脸识别原理简介:每一张图片都是由每一个像素点组成,而每一个像素点中又有对应的颜色值(如RGB),人的面部特征中,不同的五官,颜色值肯定存在差异 ...
- iOS 开发技术之人脸识别
Demo源码:https://github.com/EmyWong/PersonalUITech 前言 作为一名iOS开发人员,我觉得第一步是能够基本模仿一个APP,完成别人APP的界面搭建:第二步, ...
- ios识别人脸自动拍照_真的逆天?iOS 10相册识别人脸的秘密
在今年的WWDC大会上,苹果正式发布了iOS 10系统,虽然其中诸多"新特性"我们早已在安卓系统中见识过了,但作为苹果用户依旧还是非常期待这些细节上的变化.根据大会上的演示,在iO ...
- iOS黑科技之(AVFoundation)动态人脸识别(二)
iOS黑科技之(AVFoundation)动态人脸识别(二) 上一篇介绍了Core Image实现的静态人脸识别, 这里介绍AVFoundation的强大功能之一的动态人脸识别 一. 首先介绍一些人脸 ...
最新文章
- 智源发布:悟道 · 文汇 | 面向认知,超大规模新型预训练模型
- 你最喜欢的“程序员”卡通是什么?
- springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
- spring 入门 1
- Angular应用页面里appId的生成逻辑和位置
- [ios2] ios使用自带git respository管理项目 【转】
- 在Linux上使用logwatch分析监控日志文件
- 日产汽车宣布已关停日、英、美、南非、俄等地工厂
- python音频实时频谱分析_基于python的音频设计及频谱分析
- 更轻量级的Semaphore、AutoResetEvent、ThreadPool
- DupeString 与 StringOfChar 的区别 - 回复 鹰@长空
- atitit. orm mapping cfg 映射配置(3)-------hbnt one2maney cfg
- PAIP批量改名JS实现
- 你写的api接口代码真是_百度AI接口之JavaAPI方式调用示例代码[持续完善中]
- ACL'22 | 陈丹琦提出CoFi模型剪枝,加速10倍,精度几乎无损
- php控制表格颜色,php – 表格列的背景颜色
- 用python实现矩形图片转换正方形(防失真 + 文件批量可操作)
- Wrong namespace. Expected 'cn.itheima.dao.CustomerMapping' 错误
- 软件测试工程师简历要怎么写,才能让HR看到
- 宏碁暗影骑士设置u盘启动教程