iOS 开发技术之人脸识别

Demo源码:https://github.com/EmyWong/PersonalUITech

前言

作为一名iOS开发人员,我觉得第一步是能够基本模仿一个APP,完成别人APP的界面搭建;第二步,是尽量学会转载,学习别人的博客和技术;第三步,是学会原创,学着翻译官方文档,而不是一味汲取别人消化好的食粮。

而我,尚在第一层。学习是个艰难的过程,自制力是压力之一,爱好是催化剂,小有所成大概就是最好的鼓励吧。

今天想转载的技术是“人脸识别”···

说一下为什么想学习这个。

可能自己真的很喜欢“产品”这个词,出于一个iOS开发人员的基本素养,习惯去欣赏一个APP,习惯去剖析一个APP的基本构成和它最吸引人的一个或几个功能。

市场上很多美图类APP,大同小异,但是FaceU却使我眼前一亮,它的特色在于人脸识别方面,虽然美妆类APP能够识别人的五官进行美化,但是却是静态的,比如某秀出品的美妆相机,天天P图的”疯狂变装”功能都是静态的,需要照片出来之后后期加工上去的美瞳,妆面。

但是FaceU不同。

实时人脸识别,五官捕捉,然后加上动画效果,可以录小视频,可以拍照,最重要的是还支持美颜、滤镜,不用专业摄像头,就可以自己做“主播”。

我经常用这款软件哄小朋友,逗小孩子玩,以至于我的手机一大半都是小朋友照的美丽的或是帅气的照片,在他们眼中的乐趣大概就是这样:爱不释手,乐到捧腹。

我想说的

我自认为一款好的APP是很少需要打广告的,就像去别的地方旅行吃到那些苍蝇小馆的美食,会回来推荐给自己的朋友那种感觉一样,是靠口碑。这款APP我不管是推荐还是朋友圈的隐性宣传,数数也有很多人下载并使用了,一传十,十传百,就是这样火起来。这就是好APP的魅力。

在北京的时间,发现好多小型创业公司,如雨后春笋长势甚猛,可是互联网的浪潮是否能够推动创业者的成功还亟待观察,这其中不少创业公司倒闭,小企业破产,互联网的冬天似乎有点冷,但是还是有FaceU这样的公司势头崛起,我想,实力和口碑就是创业公司最大的王牌吧。

希望所有创业公司能够秉承最初的梦想,闯出一番自己的天地。

言归正传

因为FacuU的影响加之身边有朋友工作是人脸识别类的APP的,所以想了解一下这个技术。

写这篇博客的目的就是分享人脸识别这项技术,当然不能遗忘。按惯例,首先附上原文地址,然后臭不要脸的复制粘贴到自己的博客来。哈哈哈,没办法,我还是iOS开发段位的第一层。

博客正文

iOS的CoreImage已经内建了人脸检测的接口,检测准确率一般,尤其是侧脸,基本上就检测不到。不过跟其他同类产品比较,也还算是不相上下吧。用起来很简单:

CIImage* image = [CIImage imageWithCGImage:aImage.CGImage];  

NSDictionary  *opts = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh  
                                              forKey:CIDetectorAccuracy];  

CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace  
                                      context:nil  
                                      options:opts];  

//得到面部数据  
NSArray* features = [detector featuresInImage:image];  

最后的features中就是检测到的全部脸部数据,可以用如下方式计算位置:

for (CIFaceFeature *f in features)  
{  
CGRect aRect = f.bounds;         
 NSLog(@"%f, %f, %f, %f", aRect.origin.x, aRect.origin.y, aRect.size.width, aRect.size.height);  

 //眼睛和嘴的位置  
 if(f.hasLeftEyePosition) NSLog(@"Left eye %g %g\n", f.leftEyePosition.x, f.leftEyePosition.y);  
 if(f.hasRightEyePosition) NSLog(@"Right eye %g %g\n", f.rightEyePosition.x, f.rightEyePosition.y);  
 if(f.hasMouthPosition) NSLog(@"Mouth %g %g\n", f.mouthPosition.x, f.mouthPosition.y);  
 }  

iOS 开发技术之人脸识别_第1张图片

注意,检测到的位置是脸部数据在图片上的坐标(在UIImage上的,不是UIImageView上的),如果需要在视图上绘制范围,则需要进行坐标转换(y轴方向相反),并且也要注意图片在视图上的缩放等。

后话

之前做过滤镜的demo,所以知道CoreImage,我感觉很强大,建议想了解的朋友可以找一下官方文档。(ps:找完请分享给我么么哒)

你可能感兴趣的:(iOS)