怎么在iOS中使用CoreImage实现一个人脸识别功能

  

这篇文章给大家介绍怎么在iOS中使用CoreImage实现一个人脸识别功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言

CoreImage是Cocoa Touch中一个强大的API,也是iOS SDK中的关键部分,不过它经常被忽视。在本篇教程中,我会带大家一起验证CoreImage的人脸识别特性。在开始之前,我们先要简单了解下CoreImage framework 组成

CoreImage framework组成

Apple 已经帮我们把image的处理分类好,来看看它的结构:

怎么在iOS中使用CoreImage实现一个人脸识别功能

主要分为三个部分:

1、定义部分:CoreImage 和CoreImageDefines。见名思义,代表了CoreImage 这个框架和它的定义。

2、操作部分:

  • 滤镜(CIFliter):CIFilter 产生一个CIImage。典型的,接受一到多的图片作为输入,经过一些过滤操作,产生指定输出的图片。

  • 检测(CIDetector):CIDetector 检测处理图片的特性,如使用来检测图片中人脸的眼睛、嘴巴、等等。

  • 特征(CIFeature):CIFeature 代表由 detector处理后产生的特征。

3、图像部分:

  • 画布(CIContext):画布类可被用与处理Quartz 2D 或者 OpenGL。可以用它来关联CoreImage类。如滤镜、颜色等渲染处理。

  • 颜色(CIColor): 图片的关联与画布、图片像素颜色的处理。

  • 向量(CIVector): 图片的坐标向量等几何方法处理。

  • 图片(CIImage): 代表一个图像,可代表关联后输出的图像。

在了解上述基本知识后,我们开始通过创建一个工程来带大家一步步验证Core Image的人脸识别特性。

将要构建的应用

iOS的人脸识别从iOS 5(2011)就有了,不过一直没怎么被关注过。人脸识别API允许开发者不仅可以检测人脸,也可以检测到面部的一些特殊属性,比如说微笑或眨眼。

首先,为了了解Core Image的人脸识别技术我们会创建一个app来识别照片中的人脸并用一个方框来标记它。在第二个demo中,让用户拍摄一张照片,检测其中的人脸并检索人脸位置。这样一来,就充分掌握了iOS中的人脸识别,并且学会如何利用这个强大却总被忽略的API。

话不多说,开搞!

建立工程(我用的是Xcode8.0)

这里提供了初始工程,当然你也可以自己创建(主要是为了方便大家)点我下载 用Xcode打开下载后的工程,可以看到里面只有一个关联了IBOutlet和imageView的StoryBoard。

怎么在iOS中使用CoreImage实现一个人脸识别功能

使用CoreImage识别人脸

在开始工程中,故事板中的imageView组件与代码中的IBOutlet已关联,接下来要编写实现人脸识别的代码部分。在ViewController.斯威夫特文件中写下如下代码:

import  UIKit   import  CoreImage //,引入CoreImage   class  ViewController:, UIViewController  {   ,@IBOutlet  weak  var  personPic:, UIImageView !      ,override  func  viewDidLoad (), {   ,super.viewDidLoad ()=,personPic.image 用户界面图像(命名为:“face-1")   ,//调用检测   ,检测()      ,}   ,//马克:今天早上,识别面部   ,func 检测(),{   ,//创建personciImage变量保存从故事板中的UIImageView提取图像并将其转换为CIImage,使用Core 图像时需要用CIImage   ,guard  let  personciImage =, CIImage(图片:,personPic.image !), else  {   ,返回   ,}   ,//创建准确性变量并设为CIDetectorAccuracyHigh,可以在CIDetectorAccuracyHigh(较强的处理能力)与CIDetectorAccuracyLow(较弱的处理能力)中选择,因为想让准确度高一些在这里选择CIDetectorAccuracyHigh   ,let  accuracy =, [CIDetectorAccuracy: CIDetectorAccuracyHigh]   ,//这里定义了一个属于CIDetector类的faceDetector变量,并输入之前创建的准确性变量   ,let  faceDetector =, CIDetector(减低:CIDetectorTypeFace,,背景:,nil,,选择:,准确性)   ,//调用faceDetector的featuresInImage方法,识别器会找到所给图像中的人的脸,最后返回一个人脸数组   ,let  faces =, faceDetector ? feature (:, personciImage)   ,//循环面数组里的所有的脸,并将识别到的人脸强转为CIFaceFeature类型   ,for  face  faces 拷贝;作为!,[CIFaceFeature], {      打印才能(“Found  bounds 断开连接;\ (face.bounds)“)//,才能创建名为faceBox的UIView,框设为返回的faces.first的框架,绘制一个矩形框来标识识别到的人的脸   let 才能;faceBox =, UIView(框架:face.bounds)//才能,设置faceBox的边框宽度为3   时间=faceBox.layer.borderWidth 才能;3//才能,设置边框颜色为红色   faceBox.layer.borderColor 才能=UIColor.red.cgColor//才能,将背景色设为清晰、意味着这个视图没有可见的背景   faceBox.backgroundColor 才能=UIColor.clear//才能,最后,把这个视图添加到personPic  imageView上   personPic.addSubview才能(faceBox)//才能,API不仅可以帮助你识别人的脸,也可识别脸上的左右眼,我们不在图像中标识出眼睛,只是给你展示一下CIFaceFeature的相关属性   if 才能;face.hasLeftEyePosition  {   打印才能(“Left  eye  bounds 断开连接;\ (face.leftEyePosition)“)   ,,}      if 才能;face.hasRightEyePosition  {   打印才能(“Right  eye  bounds 断开连接;\ (face.rightEyePosition)“)   ,,}   ,}   ,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在iOS中使用CoreImage实现一个人脸识别功能