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

原始图片 & 打马后的图片

 

说明

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];// 获取CIImageCIImage* image                 = [CIImage imageWithCGImage:self.image.CGImage];// 创建脸部识别器CIDetector* detector           = [CIDetector detectorOfType:CIDetectorTypeFacecontext:niloptions:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHighforKey: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"];// 加载ImageViewUIImageView *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++) {// 获取脸部的rectNSValue *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. android开发期间使用真机调试但系统无法识别出真机

    前言 前些天重装了系统,好不容易把所有的软件装好,结果发现打开android studio真机调试却出了问题. 一.症状: 1.手机端设置完全没问题(打开了调试模式......) 2.电脑端右下角不出 ...

  2. java写出http数据包_java用jpcap怎么识别出http和https的数据包?

    问题简述: 利用java的第三方库jpcap写抓包程序,求解怎么识别出http和https的数据包(就只要能判断出是http协议或https协议即可). 测试的解法: 1.在tcp包(jpcap自带T ...

  3. 并且确定已经识别出了主要的HTML5技术风险

    他们完成了哈德逊湾式启动,并且确定已经识别出了主要的HTML5技术风险.他将风险和日程安排告诉了他的上司诺姆.你就不能再早点完成项目了吗?诺姆的一句话将克里夫送回了团队,步履蹒跚.克里夫与团队又花了一 ...

  4. java 检测表情符号_一个能在字符串中识别出 Emoji 的简单工具 (支持JavaScript和Java)...

    一个能在字符串中识别出 Emoji 的简单工具 特性 支持 Unicode12 规范 基于 EBNF 状态机的 Emoji 判断,比正则表达式更易维护 准确判断含有 Emoji 的字符串长度 准确切割 ...

  5. 查询手机号段对应地区编码_Elasticsearch实战 | 如何从数千万手机号中识别出情侣号?...

    1.问题描述 您好,请教个问题.我现在有2千多万的手机号码信息保存在es里.5个分片,3个节点. 现在的需求是将后八位相同的号码匹配到一起,重新放到一个index里.组成情侣号.方便后续查询情侣号列表 ...

  6. 语音识别怎么最终识别出字?

    非算法,只能从业务流和原理上作解释 语音识别原理 回顾人类发展史,不难看出,随着人的不断进化,从最初通过手掌.肢体使用简单工具.传递简单信息,发展到控制发声并通过耳朵接收,形成了一个以语音为载体的快速 ...

  7. 语音识别是如何识别出各地方言的?

    语音对于人机交互的重要性毋庸置疑,无论是国内外企业,都在 语音识别 的速度.准确度以及多语种方面持续创新,但是当机器面对那些有 口音 的人来说,似乎就没有那么灵敏了:不仅注意力会不集中,反应迟钝,甚至 ...

  8. 【自制小工具】快速批量查询IP归属地(自动去重、按国内外汇总,并智能识别出错误IP)

    作者:Eason_LYC 不放弃,不为别的,只想活成自己心中的样子~ 领域:WEB安全.网络攻防 关注WEB安全.网络攻防.我的专栏文章知识点全面细致,逻辑清晰.结合实战,让你在学习路上事半功倍,少走 ...

  9. nRF52840-DK通过USB接电脑,不能识别出Jlink

    正常现象:接上USB,电脑识别出一个名称为JLINK的盘,并且设备管理器-端口-Jlink CDC UART port 经过排查,发现有问题时候,电脑识别出截图这个驱动,这个不对.并且,此时电脑接键盘 ...

最新文章

  1. vim 忽略大小写查找字符串
  2. python画代码-python画樱花树代码 具体代码介绍
  3. C++中运算符重载的方法
  4. MySql 数据操作类
  5. 【嵌入式】嵌入式天地博客汇总
  6. 学习——JavaWeb05:JSP入门
  7. 2019/4/17 Linux学习
  8. vueh5调用摄像头拍照_潜望式拍照5G手机盘点:售价相差数千元 究竟怎么选?
  9. Java类加载机制的理解
  10. Ⅴ0还有别的方法设置图案吗_定制汽车硅胶按键你知道厂家是怎么给汽车按键镭雕的吗...
  11. 这就是八成女性不爱用刷脸支付的原因!支付宝:一周内给安排上
  12. IOS高级开发之多线程(五)NSOperation 2
  13. mysql启动报错解决-1
  14. 第一次做socket的一些心得
  15. 文字转语音(Python pyttsx3)
  16. Windows系统怎么换硬盘图标
  17. Android流量统计分析
  18. 关于QT出现“error: undefined reference to XXXX”问题
  19. 学习Vue3 第二十七章(自定义指令directive)
  20. 一个创业者的自白:假如重回华为怎么做?

热门文章

  1. Learning to rank 特征抽取
  2. 谨防 ActiveSupport::Cache::Store 缓存 nil 值
  3. BrnShop开源网上商城第一讲:架构设计
  4. RDIFramework.NET(.NET快速信息化系统开发框架) Web版介绍
  5. python画饼图存在的问题_python_使用matplotlib画饼状图(pie)
  6. Android 几种解析XML文件方式的区别
  7. android 将.txt文件转化为.db并使用raw下的数据文件
  8. VIVADO时序约束及STA基础
  9. 你知道defer的坑吗?
  10. 如何在Kubernetes容器环境下部署Spinnaker?