人脸识别

来源:互联网 发布:javascript启示录云盘 编辑:程序博客网 时间:2024/06/02 10:29

这里写图片描述

#import "ViewController.h"#define imageName [NSString stringWithFormat:@"%ld", _imageTag]@interface ViewController ()@property (nonatomic,assign) NSInteger imageTag;@property (nonatomic,strong) UIImageView* imageView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    _imageTag = 2;    //自动获取本地图片的宽高    CGSize size = [UIImage imageNamed:imageName].size;    _imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 20, size.width, size.height)];    _imageView.backgroundColor = [UIColor grayColor];    _imageView.image = [UIImage imageNamed:imageName];    [self.view addSubview:_imageView];    [self faceDetectWithImage:[UIImage imageNamed:imageName]];}#pragma mark - 识别人脸- (void)faceDetectWithImage:(UIImage *)image {    for (UIView *view in _imageView.subviews) {        [view removeFromSuperview];    }    // 图像识别能力:可以在CIDetectorAccuracyHigh(较强的处理能力)与CIDetectorAccuracyLow(较弱的处理能力)中选择,因为想让准确度高一些在这里选择CIDetectorAccuracyHigh    NSDictionary *opts = [NSDictionary dictionaryWithObject:                          CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];    // 将图像转换为CIImage    CIImage *faceImage = [CIImage imageWithCGImage:image.CGImage];    CIDetector *faceDetector=[CIDetector detectorOfType:CIDetectorTypeFace context:nil options:opts];    // 识别出人脸数组    NSArray *features = [faceDetector featuresInImage:faceImage];    // 得到图片的尺寸    CGSize inputImageSize = [faceImage extent].size;    //将image沿y轴对称    CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, -1);    //将图片上移    transform = CGAffineTransformTranslate(transform, 0, -inputImageSize.height);    // 取出所有人脸    for (CIFaceFeature *faceFeature in features){        //获取人脸的frame        CGRect faceViewBounds = CGRectApplyAffineTransform(faceFeature.bounds, transform);        CGSize viewSize = _imageView.bounds.size;        CGFloat scale = MIN(viewSize.width / inputImageSize.width,                            viewSize.height / inputImageSize.height);        CGFloat offsetX = (viewSize.width - inputImageSize.width * scale) / 2;        CGFloat offsetY = (viewSize.height - inputImageSize.height * scale) / 2;        // 缩放        CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scale, scale);        // 修正        faceViewBounds = CGRectApplyAffineTransform(faceViewBounds,scaleTransform);        faceViewBounds.origin.x += offsetX;        faceViewBounds.origin.y += offsetY;        //描绘人脸区域        UIView* faceView = [[UIView alloc] initWithFrame:faceViewBounds];        faceView.layer.borderWidth = 2;        faceView.layer.borderColor = [[UIColor redColor] CGColor];        [_imageView addSubview:faceView];        // 判断是否有左眼位置        if(faceFeature.hasLeftEyePosition){}        // 判断是否有右眼位置        if(faceFeature.hasRightEyePosition){}        // 判断是否有嘴位置        if(faceFeature.hasMouthPosition){}    }}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end
原创粉丝点击