识别出脸部以及给脸部打马赛克

简介:

识别出脸部以及给脸部打马赛克

 

原始图片 & 打马后的图片

 

 

说明

1. 通过CIDetector来识别出脸部获取相关数据

2. 将CoreImage坐标转换为UIKit坐标

3. 将脸部区域进行截图

4. 将截图进行打马处理(各位喜闻乐见^_^)

 

核心源码

https://github.com/YouXianMing/FaceDetection




//
//  UIImageView+FaceDetect.h
//  FaceDetectionExample
//
//  Created by YouXianMing on 15/5/29.
//  Copyright (c) 2015年 JID Marketing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIImageView (FaceDetect)

- (NSArray *)faceRects;

@end


//
//  UIImageView+FaceDetect.m
//  FaceDetectionExample
//
//  Created by YouXianMing on 15/5/29.
//  Copyright (c) 2015年 JID Marketing. All rights reserved.
//

#import "UIImageView+FaceDetect.h"

@implementation UIImageView (FaceDetect)

- (NSArray *)faceRects {
    
    if (self.image == nil) {
        return nil;
    }
    
    // 初始化数组
    NSMutableArray *faceRectsArray = [NSMutableArray array];
    
    // 获取CIImage
    CIImage* image                 = [CIImage imageWithCGImage:self.image.CGImage];
    
    // 创建脸部识别器
    CIDetector* detector           = [CIDetector detectorOfType:CIDetectorTypeFace
                                                        context:nil
                                                        options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh
                                                                                            forKey:CIDetectorAccuracy]];
    
    // 获取侦测到的数据
    NSArray* features              = [detector featuresInImage:image];
    
    
    // CoreImage坐标转换为UIKit坐标
    CGAffineTransform transform    = CGAffineTransformMakeScale(1, -1);
    transform                      = CGAffineTransformTranslate(transform, 0, -self.bounds.size.height);
    
    // 处理
    for(CIFaceFeature* faceFeature in features)
    {
        // 转换坐标系统
        const CGRect faceRect = CGRectApplyAffineTransform(faceFeature.bounds, transform);
        
        // 添加rect
        [faceRectsArray addObject:[NSValue valueWithCGRect:faceRect]];
    }
    
    return faceRectsArray;
}

@end


//
//  ViewController.m
//  CoreImageMask
//
//  Created by YouXianMing on 15/5/29.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "UIImageView+FaceDetect.h"
#import "CIFilter+Utility.h"
#import "UIImage+Crop.h"


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImage *image = [UIImage imageNamed:@"demo.png"];
    
    
    // 加载ImageView
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.center       = self.view.center;
    [self.view addSubview:imageView];
    
    
    NSArray *faceRectArray = [imageView faceRects];
    for (int i = 0; i < faceRectArray.count; i++) {
    
        // 获取脸部的rect
        NSValue *value  = faceRectArray[i];
        CGRect faceRect = value.CGRectValue;
        
        // 截取脸部的图片
        UIImage *faceImage = [image cropAtRect:faceRect];
        
        
        // 添加脸部的图片
        UIImageView *faceImageView = [[UIImageView alloc] initWithImage:[self CIPixellateImage:faceImage]];
        faceImageView.frame        = faceRect;
        [imageView addSubview:faceImageView];
    }
}

- (UIImage *)CIPixellateImage:(UIImage *)image {
    
    CIImage *ciImage  = [[CIImage alloc] initWithImage:image];
    CIFilter *filter  = [CIFilter filterWithName:@"CIPixellate"];
    filter.inputImage = ciImage;
    filter.inputScale = @(5.f);
    
    return [filter outputUIImage];
}


@end


目录
相关文章
|
8月前
|
机器学习/深度学习 算法 Shell
【实操:人脸矫正】两次定位操作解决人脸矫正问题
【实操:人脸矫正】两次定位操作解决人脸矫正问题
263 0
|
5月前
|
分布式计算 vr&ar Spark
人脸口罩识别——人脸添加口罩方法masked_faces
人脸口罩识别——人脸添加口罩方法masked_faces
60 1
|
8月前
|
算法 数据处理 vr&ar
GaussianObject用4张照片生成高质量3D物体
【2月更文挑战第17天】GaussianObject用4张照片生成高质量3D物体
191 2
GaussianObject用4张照片生成高质量3D物体
|
8月前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
115 0
|
8月前
|
计算机视觉 Python
OpenCV检测眼睛、猫脸、行人、车牌实战(附Python源码)
OpenCV检测眼睛、猫脸、行人、车牌实战(附Python源码)
349 0
|
机器学习/深度学习 人工智能 TensorFlow
用10行代码检测脸部情绪
用10行代码检测脸部情绪
用10行代码检测脸部情绪
|
机器学习/深度学习 计算机视觉 Python
使用OpenCV实现人脸图像卡通化
使用OpenCV实现人脸图像卡通化
检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离
检测使用校准的立体摄像头拍摄的视频中的人物,并确定他们与摄像头的距离。
154 0
|
机器学习/深度学习
识别手绘数字图像
识别手绘数字图像
94 0