• iOS开发中使用CIDetector检测人脸


    在iOS5 系统中,苹果就已经有了检测人脸的api,能够检测人脸的位置,包括左右眼睛,以及嘴巴的位置,返回的信息是每个点位置。在 iOS7中,苹果又加入了检测是否微笑的功能。通过使用 CIDetector可以实现上述功能,一个小demo如下:

    #import <CoreImage/CoreImage.h>   //首先包含响应的头文件
    
    /**
     *  用来存储检测到的信息
     */
    @property (nonatomic,strong) NSArray *features;
    
    //正式代码如下:
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:self.imagePath];
        NSLog(@"imagePath = %@",self.imagePath);
        
        CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]];
        self.features = [faceDetector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
        for(CIFaceFeature *feature in self.features){
            if(feature.hasLeftEyePosition){
                CGPoint leftEyePos = feature.leftEyePosition;
                NSLog(@"leftX = %f  leftY = %f",leftEyePos.x,leftEyePos.y);
            }
            if(feature.hasRightEyePosition){
                CGPoint rightEyePos = feature.rightEyePosition;
                NSLog(@"rightX = %f  rightY = %f",rightEyePos.x,rightEyePos.y);
            }
            if(feature.hasMouthPosition){
                CGPoint mouthPos = feature.mouthPosition;
                NSLog(@"mouthX = %f mouthY = %f",mouthPos.x,mouthPos.y);
            }
        }

    可以看一下 CIFaceFeature 里面的信息,如下:

    @interface CIFaceFeature : CIFeature
    {
    	CGRect bounds;
    	BOOL hasLeftEyePosition;
    	CGPoint leftEyePosition;
    	BOOL hasRightEyePosition;
    	CGPoint rightEyePosition;
    	BOOL hasMouthPosition;
    	CGPoint mouthPosition;
    	
        
    	BOOL hasTrackingID;
    	int trackingID;
    	BOOL hasTrackingFrameCount;
    	int trackingFrameCount;
    	
    	BOOL hasFaceAngle;
    	float faceAngle;
    	
    	BOOL hasSmile;
    	BOOL leftEyeClosed;
    	BOOL rightEyeClosed;
    }
    

    可以看到,通过调用 hasSmile 即可得到图片是否微笑。

    最后有一点需要注意:

    得到的坐标点中,y值是从下开始的。比如说图片的高度为300,左眼的y值为100,说明左眼距离底部的高度为100,换成我们习惯的,距离顶部的距离就是200,这一点需要注意~  

  • 相关阅读:
    鸽巢原理
    springboot websocket sockjs 服务器推送 跨域问题 解决办法
    springboot打war包部署到外部Tomcat下
    springboot项目两种实现restful webservice的方法
    springboot扫描不到webservice
    JPA,Hibernate,ibatis(mybatis)如何选用?
    intellij自动生成实体类以及遇到的问题
    图片加载不出来时,设置默认默认图片
    图片上传预览
    利用layer实现表单完美验证
  • 原文地址:https://www.cnblogs.com/acBool/p/5070733.html
Copyright © 2020-2023  润新知