人臉識別

iOS圖像處理(四)CIDetector特征識別(人臉識別)

前言

CIDetecrorCore Image框架中提供的一個識別類,包括對人臉乡括、形狀蚀浆、條碼、文本的識別香追,本文主要介紹人臉特征識別合瓢。

人臉識別功能不單單可以對人臉進行獲取,還可以獲取眼睛和嘴等面部特征信息透典。但是CIDetector不包括面紋編碼提取晴楔,也就是說CIDetector只能判斷是不是人臉,而不能判斷這張人臉是誰的峭咒,比如說面部打卡這種功能是實現(xiàn)不了的税弃。

創(chuàng)建

// 創(chuàng)建圖形上下文
CIContext * context = [CIContext contextWithOptions:nil];
// 創(chuàng)建自定義參數(shù)字典
NSDictionary * param = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
// 創(chuàng)建識別器對象
CIDetector * faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:context options:param];

我們先來看看識別器的類型都有哪些,這里我們設置的是CIDetectorTypeFace凑队,人臉識別探測器類型则果。

// 人臉識別探測器類型
CORE_IMAGE_EXPORT NSString* const CIDetectorTypeFace NS_AVAILABLE(10_7, 5_0);
// 矩形檢測探測器類型
CORE_IMAGE_EXPORT NSString* const CIDetectorTypeRectangle NS_AVAILABLE(10_10, 8_0);
// 條碼檢測探測器類型
CORE_IMAGE_EXPORT NSString* const CIDetectorTypeQRCode NS_AVAILABLE(10_10, 8_0);
// 文本檢測探測器類型
#if __OBJC2__
CORE_IMAGE_EXPORT NSString* const CIDetectorTypeText NS_AVAILABLE(10_11, 9_0);
#endif

參數(shù)設置

說完識別器的類型我們再來看看,識別器的參數(shù)設置。識別器參數(shù)的設置是以一個字典形式的參數(shù)傳入的西壮。這里的NSDictionary * param就是我們要設置的參數(shù)字典遗增。

  • 我們這里設置了一個識別精度CIDetectorAccuracy,識別精度的值有:
// 識別精度低款青,但識別速度快做修、性能高
CORE_IMAGE_EXPORT NSString* const CIDetectorAccuracyLow NS_AVAILABLE(10_7, 5_0); 
// 識別精度高,但識別速度慢可都、性能低
CORE_IMAGE_EXPORT NSString* const CIDetectorAccuracyHigh NS_AVAILABLE(10_7, 5_0);
  • 除了精度的設置缓待,還有CIDetectorTracking蚓耽,指定使用特種跟蹤渠牲,這個功能就像相機中的人臉跟蹤功能。

  • CIDetectorMinFeatureSize用于設置將要識別的特征的最小范圍步悠,也就是說小于這個范圍的特征將不識別签杈。

  • @ 對于人臉檢測器,這個關鍵字的值是一個范圍從0.0……1.0的NSNumber值鼎兽,這個值表示基于輸入圖像短邊的百分比答姥。有效值范圍:0.01 <= CIDetectorMinFeatureSize<= 0.5。為這個參數(shù)設定更高值僅用于提高性能谚咬。默認值是0.15鹦付。
    @ 對于矩形探測器,這個關鍵字的值是一個范圍從0.0……1.0的NSNumber值择卦,這個值表示基于輸入圖像短邊的百分比敲长。有效值范圍:0.2 <= CIDetectorMinFeatureSize <= 1.0的默認值是0.2。

  • @ 對于文本探測器秉继,這個關鍵字的值是一個范圍從0.0……1.0的NSNumber值祈噪,這個值表示基于輸入圖像的高度的百分比。有效值范圍:0.0 <= CIDetectorMinFeatureSize <= 1.0尚辑。默認值是10/(輸入圖像的高度)辑鲤。

  • CIDetectorNumberOfAngles用于設置角度的個數(shù),值是1杠茬、3月褥、5、7瓢喉、9宁赤、11中的一個值。

  • CIDetectorImageOrientation 用于設置識別方向灯荧,值是一個從1 . .8的整型的NSNumber礁击。如果值存在,檢測將會基于這個方向進行,但返回的特征仍然是基于這些圖像的哆窿。

  • CIDetectorEyeBlink如果設置這個參數(shù)為true(bool類型的NSNumber)链烈,識別器將提取眨眼特征。

  • DetectorSmile如果設置這個參數(shù)為ture(bool類型的NSNumber)挚躯,識別器將提取微笑特征强衡。

  • CIDetectorFocalLength用于設置每幀焦距,值得類型為floot類型的NSNumber

  • CIDetectorAspectRatio用于設置矩形的長寬比码荔,值得類型為floot類型的NSNumber

  • CIDetectorReturnSubFeatures 控制文本檢測器是否應該檢測子特征漩勤。默認值是否,值的類型為bool類型的NSNumber

使用實例

進行識別的函數(shù)如下:

- (CI_ARRAY(CIFeature*) *)featuresInImage:(CIImage *)image
    NS_AVAILABLE(10_7, 5_0);
- (CI_ARRAY(CIFeature*) *)featuresInImage:(CIImage *)image
                                  options:(nullable CI_DICTIONARY(NSString*,id) *)options
    NS_AVAILABLE(10_8, 5_0);
//options可以設置笑容等
實例

這是一個在圖像上標注眼睛和嘴的代碼片段

UIImage * imageInput = [_inputImgView image];
CIImage * image = [CIImage imageWithCGImage:imageInput.CGImage];

CIContext * context = [CIContext contextWithOptions:nil];
NSDictionary * param = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
CIDetector * faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:context options:param];

NSArray * detectResult = [faceDetector featuresInImage:image];

UIView * resultView = [[UIView alloc] initWithFrame:_inputImgView.frame];
[self.view addSubview:resultView];

for (CIFaceFeature * faceFeature in detectResult) {
    UIView *faceView = [[UIView alloc] initWithFrame:faceFeature.bounds];
    faceView.layer.borderColor = [UIColor redColor].CGColor;
    faceView.layer.borderWidth = 1;
    [resultView addSubview:faceView];


    if (faceFeature.hasLeftEyePosition) {
        UIView * leftEyeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];
        [leftEyeView setCenter:faceFeature.leftEyePosition];
        leftEyeView.layer.borderWidth = 1;
        leftEyeView.layer.borderColor = [UIColor redColor].CGColor;
        [resultView addSubview:leftEyeView];
    }


    if (faceFeature.hasRightEyePosition) {
        UIView * rightEyeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];
        [rightEyeView setCenter:faceFeature.rightEyePosition];
        rightEyeView.layer.borderWidth = 1;
        rightEyeView.layer.borderColor = [UIColor redColor].CGColor;
        [resultView addSubview:rightEyeView];
    }

    if (faceFeature.hasMouthPosition) {
        UIView * mouthView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 5)];
        [mouthView setCenter:faceFeature.mouthPosition];
        mouthView.layer.borderWidth = 1;
        mouthView.layer.borderColor = [UIColor redColor].CGColor;
        [resultView addSubview:mouthView];
    }
}
1208202-6437a1a7404e7d12.png

在以上的代碼中
NSArray * detectResult = [faceDetector featuresInImage:image];
detectResult是識別后返回的一個結果數(shù)組缩搅,元素類型為CIFaceFeature越败,這是一個人臉特征類,其中包括了的面部上的一些特征屬性硼瓣,大家可以去這個類的頭文件中看一下究飞,都是一些淺顯易懂的屬性,這里不再介紹堂鲤。

實例代碼

這里是一個關于人臉識別的Demo:
https://github.com/MajorLMJ/LMJFaceRecognition

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亿傅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘟栖,更是在濱河造成了極大的恐慌葵擎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件半哟,死亡現(xiàn)場離奇詭異殖氏,居然都是意外死亡畏纲,警方通過查閱死者的電腦和手機磷瘤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門桨吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缅茉,你說我怎么就攤上這事嘴脾。” “怎么了蔬墩?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵译打,是天一觀的道長。 經(jīng)常有香客問我拇颅,道長奏司,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任樟插,我火速辦了婚禮韵洋,結果婚禮上竿刁,老公的妹妹穿的比我還像新娘。我一直安慰自己搪缨,他們只是感情好食拜,可當我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著副编,像睡著了一般负甸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痹届,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天呻待,我揣著相機與錄音,去河邊找鬼队腐。 笑死蚕捉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的香到。 我是一名探鬼主播鱼冀,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼报破,長吁一口氣:“原來是場噩夢啊……” “哼悠就!你這毒婦竟也來了?” 一聲冷哼從身側響起充易,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梗脾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盹靴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炸茧,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年稿静,在試婚紗的時候發(fā)現(xiàn)自己被綠了梭冠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡改备,死狀恐怖控漠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悬钳,我是刑警寧澤盐捷,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站默勾,受9級特大地震影響碉渡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜母剥,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一滞诺、第九天 我趴在偏房一處隱蔽的房頂上張望形导。 院中可真熱鬧,春花似錦习霹、人聲如沸骤宣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憔披。三九已至,卻和暖如春爸吮,著一層夾襖步出監(jiān)牢的瞬間芬膝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工形娇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锰霜,地道東北人。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓桐早,卻偏偏與公主長得像癣缅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哄酝,可洞房花燭夜當晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容