`
473687880
  • 浏览: 535903 次
文章分类
社区版块
存档分类
最新评论

Core Image人脸检测(iOS5新特性学习之三)

 
阅读更多
此次iOS5的一个新特性就是提供了人脸检测的API,这也是被媒体关注的一个功能,基本上,我看到的报道都是说iOS5提供了人脸识别的功能,然后又是设想要通过人脸来实现解锁屏幕等等,如何如何的。一开始,我也以为iOS5确实提供了这样的功能,这意味着可能不用opencv等静态库来实现了,免去了一旦OS版本升级要重新编译静态库的麻烦。研究了几天,发现并不是这么回事:


首先,此次iOS5提供的人脸检测API是Core Image这个Framework中,Core Image实际上在Mac OS下早就有了,只不过这次才引入到iOS5中。但是,apple还是比较谨慎的,并没有引入Core Image所有的功能到iOS下,只是提供了少数的API而已,而且可以看出基本都是对系统性能要求不怎么高的功能,可能apple对手机上做图像处理的性能问题还是有些顾虑的。例如,Core Image下图形处理的上百个filter,到了iOS下就只剩下20来个了,关键的轮廓提取,高斯模糊等filter都没有提供,很多复杂的处理都无法直接用Core Image来实现。但我相信随着iOS设备硬件性能的不断提上,开放所有的功能应该是迟早的事。


其次,谈谈人脸识别。严格的说,此次提供的API并不能叫人脸识别(face recognition),只能叫人脸检测(face detection),这二者在图像处理领域是有很大差别的,作用和实现难度都是天差地别。简单的说,人脸检测就是检测出图像中是否包含人脸,此次apple提供的API就是这个功能,可以给你指出图像中每一个人脸的位置,还有人脸中眼见、嘴巴的位置。而人脸识别则是更加高级的技术,可以告诉你几张照片中的人是不是同一人。是不是觉得在哪见过,没错,就是iPhoto里提供的功能。对apple来说,这样的技术也应该不是什么难事,关键是什么时候可以开放给开发者的问题了。


最后,当然要谈谈怎么用了。具体的使用,其实很简单,看看后面的代码你就明白了,如果要实现一些高级的应用,目前来说可能还得结合opencv或image-processing等开源的处理库来用。但如果只是简单的人脸检测,Core Image的效率就我个人感觉来说,还是很不错的,不比opencv的差。


人脸检测代码(大部分代码都是参考国外2篇文章的,在此特别指出)


  1. -(void)DetectFace{
  2. UIImage*image=[UIImageimageNamed:@"face.png"];
  3. UIImageViewtestImage=[[UIImageViewalloc]initWithImage:image];
  4. [testImagesetTransform:CGAffineTransformMakeScale(1,-1)];
  5. [[[UIApplicationsharedApplication]delegate].windowsetTransform:
  6. CGAffineTransformMakeScale(1,-1)];
  7. [testImagesetFrame:CGRectMake(0,0,testImage.image.size.width,
  8. testImage.image.size.height)];
  9. [self.viewaddSubview:testImage];
  10. CIImage*ciimage=[CIImageimageWithCGImage:image.CGImage];
  11. NSDictionary*opts=[NSDictionarydictionaryWithObject:
  12. CIDetectorAccuracyHighforKey:CIDetectorAccuracy];
  13. CIDetector*detector=[CIDetectordetectorOfType:CIDetectorTypeFace
  14. context:niloptions:opts];
  15. NSArray*features=[detectorfeaturesInImage:ciimage];
  16. for(CIFaceFeature*faceFeatureinfeatures){
  17. CGFloatfaceWidth=faceFeature.bounds.size.width;
  18. //createaUIViewusingtheboundsoftheface
  19. UIView*faceView=[[UIViewalloc]initWithFrame:faceFeature.bounds];
  20. //addaborderaroundthenewlycreatedUIView
  21. faceView.layer.borderWidth=1;
  22. faceView.layer.borderColor=[[UIColorredColor]CGColor];
  23. [self.viewaddSubview:faceView];
  24. if(faceFeature.hasLeftEyePosition)
  25. {
  26. //createaUIViewwithasizebasedonthewidthoftheface
  27. UIView*leftEyeView=[[UIViewalloc]initWithFrame:
  28. CGRectMake(faceFeature.leftEyePosition.x-faceWidth*0.15,
  29. faceFeature.leftEyePosition.y-faceWidth*0.15,faceWidth*0.3,faceWidth*0.3)];
  30. //changethebackgroundcoloroftheeyeview
  31. [leftEyeViewsetBackgroundColor:[[UIColorblueColor]
  32. colorWithAlphaComponent:0.3]];
  33. //setthepositionoftheleftEyeViewbasedontheface
  34. [leftEyeViewsetCenter:faceFeature.leftEyePosition];
  35. //roundthecorners
  36. leftEyeView.layer.cornerRadius=faceWidth*0.15;
  37. //addtheviewtothewindow
  38. [self.viewaddSubview:leftEyeView];
  39. }
  40. if(faceFeature.hasRightEyePosition)
  41. {
  42. //createaUIViewwithasizebasedonthewidthoftheface
  43. UIView*leftEye=[[UIViewalloc]initWithFrame:
  44. CGRectMake(faceFeature.rightEyePosition.x-faceWidth*0.15,
  45. faceFeature.rightEyePosition.y-faceWidth*0.15,faceWidth*0.3,faceWidth*0.3)];
  46. //changethebackgroundcoloroftheeyeview
  47. [leftEyesetBackgroundColor:[[UIColorblueColor]
  48. colorWithAlphaComponent:0.3]];
  49. //setthepositionoftherightEyeViewbasedontheface
  50. [leftEyesetCenter:faceFeature.rightEyePosition];
  51. //roundthecorners
  52. leftEye.layer.cornerRadius=faceWidth*0.15;
  53. //addthenewviewtothewindow
  54. [self.viewaddSubview:leftEye];
  55. }
  56. if(faceFeature.hasMouthPosition)
  57. {
  58. //createaUIViewwithasizebasedonthewidthoftheface
  59. UIView*mouth=[[UIViewalloc]initWithFrame:
  60. CGRectMake(faceFeature.mouthPosition.x-faceWidth*0.2,
  61. faceFeature.mouthPosition.y-faceWidth*0.2,faceWidth*0.4,faceWidth*0.4)];
  62. //changethebackgroundcolorforthemouthtogreen
  63. [mouthsetBackgroundColor:[[UIColorgreenColor]
  64. colorWithAlphaComponent:0.3]];
  65. //setthepositionofthemouthViewbasedontheface
  66. [mouthsetCenter:faceFeature.mouthPosition];
  67. //roundthecorners
  68. mouth.layer.cornerRadius=faceWidth*0.2;
  69. //addthenewviewtothewindow
  70. [self.viewaddSubview:mouth];
  71. }
  72. }
  73. }
分享到:
评论

相关推荐

    利用CoreImage的人脸检测

    本知识点将深入探讨如何利用Core Image进行人脸检测,以及在人脸识别过程中可能需要结合的其他库。 首先,Core Image是苹果的图形处理框架,它包含了一系列预定义的滤镜和算法,可以处理图像和视频数据。其中,人脸...

    ios 活体检测、人脸识别 Objective-C.zip

    在iOS开发中,活体检测和人脸识别是两个关键的技术领域,尤其在安全验证、社交应用以及智能安防等场景中有着广泛的应用。Objective-C是苹果官方推荐的开发iOS应用的编程语言之一,它提供了丰富的框架和工具来实现...

    iOS5.1 CoreImage 人脸识别 Demo

    总之,"iOS5.1 CoreImage 人脸识别 Demo"是一个很好的学习资源,它揭示了如何在iOS应用中集成和利用CoreImage的高级功能。通过深入理解这个Demo,开发者可以更好地掌握iOS图像处理技术,并将其应用到自己的项目中,...

    IOS基于CoreImage框架的矩形检测和人脸识别

    在iOS 8及以上版本中,CoreImage引入了对矩形检测和人脸识别的支持,使得开发者能够轻松地在应用中集成这些功能。本文将详细讲解如何利用CoreImage框架进行矩形检测和人脸识别。 首先,矩形检测是计算机视觉领域的...

    iOS平台OpenCV人脸检测代码实现

    在iOS平台上实现人脸检测功能,通常开发者会借助强大的计算机视觉库OpenCV。OpenCV是一个开源的库,提供了丰富的图像处理和计算机视觉算法,包括人脸识别。在这个项目中,我们看到一个名为"OpenCVFaceDetectDemo"的...

    IOS应用源码之利用CoreImage进行人脸识别.zip

    CoreImage人脸检测基于机器学习模型,能够快速准确地在图像中定位人脸,并识别出关键特征点,如眼睛、鼻子和嘴巴的位置。这项技术的实现主要涉及以下几个关键知识点: 1. **CoreImage框架**: CoreImage是iOS和macOS...

    基于Face++ios版的源码.zip_face ios_face+ 开源_ios 人脸_ios开发_开源人脸识别

    在iOS平台上进行人脸识别开发,需要了解UIKit框架,用于显示和处理图像,以及CoreImage框架,它提供了丰富的图像处理功能,可以与Face++ SDK结合使用,增强应用的图像处理能力。同时,开发者还需要熟悉多线程编程,...

    IOS应用源码之【应用】-iOS 人脸检测Demo.rar

    总结,这个"iOS 人脸检测Demo"源码提供了iOS应用中实现人脸检测的实例,涵盖了Core Image和AVFoundation框架的使用,以及人脸检测和处理的关键步骤。开发者可以通过研究这个Demo,学习如何在自己的应用中实现类似的...

    swift-CoreImage之人脸识别OC版

    在本项目"swift-CoreImage之人脸识别OC版"中,我们将探讨如何使用Objective-C(OC)实现基于CoreImage的人脸检测。 首先,理解CoreImage中的CIDetector类是关键。CIDetector负责检测图像中的特征,如人脸、条形码或...

    swift-CoreImage之人脸识别

    在本主题"swift-CoreImage之人脸识别"中,我们将深入探讨如何利用Core Image进行人脸识别。 一、Core Image简介 Core Image是Apple的图形处理框架,它提供了大量的图像滤镜和处理功能。通过使用Core Image,开发者...

    利用CoreImage进行人脸识别Demo

    CoreImage人脸识别功能主要依赖于`CIDetector`类,这是一个能够检测图像特征的对象,其中就包括了人脸识别。它使用机器学习算法来识别图像中的人脸,并提供人脸的边界框信息,以及眼睛和嘴巴等关键特征的位置。 ...

    人脸识别 ios下

    总结来说,iOS下的人脸识别技术主要依赖Core Image进行检测和Vision进行识别,这两个框架结合使用,可以实现高效且安全的用户体验。通过分析和理解“nassersala-CIDemo-fcd9b71”这个项目的源码,开发者可以更好地...

    iOS利用CoreImage实现人脸识别详解

    在本篇教程中,我会带大家一起验证CoreImage的人脸识别特性。在开始之前,我们先要简单了解下CoreImage framework 组成 CoreImage framework组成 Apple 已经帮我们把image的处理分类好,来看看它的结构: 主要分为...

    iOS原生人脸识别

    总结,iOS原生人脸识别利用Core Image框架中的CIDetector类,能有效地在图像和视频中检测和识别脸部特征。通过合理地使用该技术,开发者可以构建出各种有趣且实用的应用,例如自拍应用、社交应用、安全验证系统等。

    IOS应用源码Demo-PictureMe(iPhone人脸检测APP)-毕设学习.zip

    PictureMe 是一款基于 iPhone 设备的人脸检测应用程序,它的源码是 iOS 开发者学习的好材料,特别是对于那些正在进行毕业设计或希望深入理解移动应用开发的学生。这个项目可以帮助你掌握 iOS 开发的基本技能,了解...

    ios-人脸识别.zip

    然而,这里的描述提到使用了第三方SDK,这可能是因为Core Image虽然功能强大,但其人脸检测功能相对基础,可能无法满足复杂的人脸识别需求,比如识别特定个体或进行活体检测。 第三方SDK如旷视Face++、商汤...

    iOS 人脸检测 MDFaceDetector.zip

    在iOS开发中,人脸检测是一项重要的技术,常用于照片编辑、增强现实应用或者安全认证等领域。本项目"iOS 人脸检测 MDFaceDetector"提供了一个使用`CIFaceFeature`的示例,帮助开发者理解并实现类似功能。`...

    Core Image

    - 使用Core Image的面部检测功能,可能包括识别并调整人脸特征。 - 实现动态滤镜切换,让用户可以在界面上实时预览不同滤镜效果。 - 调整滤镜参数,如强度、饱和度等,以实现更个性化的图像效果。 - 将处理后的图像...

Global site tag (gtag.js) - Google Analytics