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

简介:

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

 

原始图片 & 打马后的图片

 

 

说明

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


目录
相关文章
|
1月前
三维手部关键点
三维手部关键点
|
8月前
|
计算机视觉 Python
OpenCV完成面部情绪识别
OpenCV完成面部情绪识别
123 0
|
4月前
|
计算机视觉 Python
OpenCV检测眼睛、猫脸、行人、车牌实战(附Python源码)
OpenCV检测眼睛、猫脸、行人、车牌实战(附Python源码)
76 0
|
8月前
|
机器学习/深度学习 人工智能 TensorFlow
用10行代码检测脸部情绪
用10行代码检测脸部情绪
用10行代码检测脸部情绪
|
9月前
|
人工智能
|
9月前
检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离
检测使用校准的立体摄像头拍摄的视频中的人物,并确定他们与摄像头的距离。
99 0
|
10月前
|
机器学习/深度学习 传感器 算法
【图像隐藏】基于DCT的数字图像水印防伪附matlab代码
【图像隐藏】基于DCT的数字图像水印防伪附matlab代码
|
10月前
|
机器学习/深度学习
识别手绘数字图像
识别手绘数字图像
61 0
|
12月前
|
C++
【opencv3】透视变换后帧差法检测运动物体C++
【opencv3】透视变换后帧差法检测运动物体C++
|
算法
通过光流法检测运动物体,得到图像运动场
通过光流法检测运动物体,得到图像运动场
327 0
通过光流法检测运动物体,得到图像运动场