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

前言

CIDetectorCore Image框架中提供的一個(gè)識(shí)別類任柜,包括對人臉、形狀沛厨、條碼宙地、文本的識(shí)別,本文主要介紹人臉特征識(shí)別逆皮。

人臉識(shí)別功能不單單可以對人臉進(jìn)行獲取宅粥,還可以獲取眼睛和嘴等面部特征信息。但是CIDetector不包括面紋編碼提取电谣,也就是說CIDetector只能判斷是不是人臉粹胯,而不能判斷這張人臉是誰的,比如說面部打卡這種功能是實(shí)現(xiàn)不了的辰企。

創(chuàng)建

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

我們先來看看識(shí)別器的類型都有哪些,這里我們設(shè)置的是CIDetectorTypeFace况鸣,人臉識(shí)別探測器類型牢贸。

// 人臉識(shí)別探測器類型
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í)別器的參數(shù)設(shè)置镐捧。識(shí)別器參數(shù)的設(shè)置是以一個(gè)字典形式的參數(shù)傳入的潜索。這里的NSDictionary * param就是我們要設(shè)置的參數(shù)字典。

  • 我們這里設(shè)置了一個(gè)識(shí)別精度CIDetectorAccuracy懂酱,識(shí)別精度的值有:
// 識(shí)別精度低竹习,但識(shí)別速度快、性能高
CORE_IMAGE_EXPORT NSString* const CIDetectorAccuracyLow NS_AVAILABLE(10_7, 5_0); 
// 識(shí)別精度高列牺,但識(shí)別速度慢整陌、性能低
CORE_IMAGE_EXPORT NSString* const CIDetectorAccuracyHigh NS_AVAILABLE(10_7, 5_0); 
  • 除了精度的設(shè)置,還有CIDetectorTracking瞎领,指定使用特征跟蹤泌辫,這個(gè)功能就像相機(jī)中的人臉跟蹤功能。
  • CIDetectorMinFeatureSize用于設(shè)置將要識(shí)別的特征的最小尺寸九默,也就是說小于這個(gè)尺寸的特征將不識(shí)別震放。
    @ 對于人臉檢測器,這個(gè)關(guān)鍵字的值是從0.0 ~ 1.0NSNumber值驼修,這個(gè)值表示:基于輸入圖像短邊長度的百分比殿遂。有效值范圍:0.01 <= CIDetectorMinFeatureSize <= 0.5诈铛。為這個(gè)參數(shù)設(shè)定更高值僅用于提高性能。默認(rèn)值是0.15墨礁。
    @ 對于矩形探測器幢竹,這個(gè)關(guān)鍵字的值是從0.0 ~ 1.0NSNumber值,這個(gè)值表示:基于輸入圖像短邊長度的百分比饵溅。有效值范圍:0.2 <= CIDetectorMinFeatureSize <= 1.0的默認(rèn)值是0.2妨退。
    @ 對于文本探測器简卧,這個(gè)關(guān)鍵字的值是一個(gè)范圍從0.0 ~ 1.0NSNumber值芭挽,這個(gè)值表示:基于輸入圖像高度的百分比。有效值范圍:0.0 <= CIDetectorMinFeatureSize <= 1.0迷捧。默認(rèn)值是10/(輸入圖像的高度)轻掩。

  • CIDetectorMaxFeatureCount是針對矩形探測器的幸乒,用于設(shè)置返回矩形特征的最多個(gè)數(shù)。這個(gè)關(guān)鍵字的值是一個(gè)1~...NSNumber值唇牧。有效范圍1 < = CIDetectorMaxFeatureCount < = 256罕扎。默認(rèn)值為1

  • CIDetectorNumberOfAngles用于設(shè)置角度的個(gè)數(shù)丐重,值是1腔召、3、5扮惦、7臀蛛、9、11中的一個(gè)值崖蜜。

  • CIDetectorImageOrientation用于設(shè)置識(shí)別方向浊仆,值是一個(gè)從1 ~ 8的整型的NSNumber。如果值存在豫领,檢測將會(huì)基于這個(gè)方向進(jìn)行抡柿,但返回的特征仍然是基于這些圖像的。

  • CIDetectorEyeBlink如果設(shè)置這個(gè)參數(shù)為true(bool類型的NSNumber)等恐,識(shí)別器將提取眨眼特征洲劣。

  • CIDetectorSmile如果設(shè)置這個(gè)參數(shù)為ture(bool類型的NSNumber),識(shí)別器將提取微笑特征鼠锈。

  • CIDetectorFocalLength用于設(shè)置每幀焦距闪檬,值得類型為floot類型NSNumber

  • CIDetectorAspectRatio用于設(shè)置矩形的長寬比购笆,值得類型為floot類型NSNumber粗悯。

  • CIDetectorReturnSubFeatures控制文本檢測器是否應(yīng)該檢測子特征。默認(rèn)值是否同欠,值的類型為bool類型NSNumber样傍。

使用實(shí)例

進(jìn)行識(shí)別的函數(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);

實(shí)例
這是一個(gè)在圖像上標(biāo)注眼睛和嘴的代碼片段

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];
    }
}


在以上的代碼中
NSArray * detectResult = [faceDetector featuresInImage:image];
detectResult是識(shí)別后返回的一個(gè)結(jié)果數(shù)組横缔,元素類型為CIFaceFeature,這是一個(gè)人臉特征類衫哥,其中包括了的面部上的一些特征屬性茎刚,大家可以去這個(gè)類的頭文件中看一下,都是一些淺顯易懂的屬性撤逢,這里不再介紹膛锭。

實(shí)例代碼

這里是一個(gè)關(guān)于人臉識(shí)別的Demo:
https://github.com/MajorLMJ/LMJFaceRecognition

再多說一句其實(shí)我們可以通過人臉識(shí)別的功能實(shí)現(xiàn)像微信等應(yīng)用的頭像自動(dòng)識(shí)別剪裁功能。

上一篇iOS圖像處理(三)CIFilter濾鏡介紹

版權(quán)聲明:出自MajorLMJ技術(shù)博客的原創(chuàng)作品 蚊荣,轉(zhuǎn)載時(shí)必須注明出處及相應(yīng)鏈接初狰!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市互例,隨后出現(xiàn)的幾起案子奢入,更是在濱河造成了極大的恐慌,老刑警劉巖媳叨,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腥光,死亡現(xiàn)場離奇詭異,居然都是意外死亡糊秆,警方通過查閱死者的電腦和手機(jī)武福,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痘番,“玉大人艘儒,你說我怎么就攤上這事》蚺迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵觉增,是天一觀的道長兵拢。 經(jīng)常有香客問我,道長逾礁,這世上最難降的妖魔是什么说铃? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嘹履,結(jié)果婚禮上腻扇,老公的妹妹穿的比我還像新娘。我一直安慰自己砾嫉,他們只是感情好幼苛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焕刮,像睡著了一般舶沿。 火紅的嫁衣襯著肌膚如雪墙杯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天括荡,我揣著相機(jī)與錄音高镐,去河邊找鬼。 笑死畸冲,一個(gè)胖子當(dāng)著我的面吹牛嫉髓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邑闲,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼算行,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了监憎?” 一聲冷哼從身側(cè)響起纱意,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鲸阔,沒想到半個(gè)月后偷霉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褐筛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年类少,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渔扎。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硫狞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晃痴,到底是詐尸還是另有隱情残吩,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布倘核,位于F島的核電站泣侮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏紧唱。R本人自食惡果不足惜活尊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漏益。 院中可真熱鬧蛹锰,春花似錦、人聲如沸绰疤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翎苫,卻和暖如春权埠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煎谍。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工攘蔽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呐粘。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓满俗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親作岖。 傳聞我的和親對象是個(gè)殘疾皇子唆垃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)痘儡,斷路器辕万,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,970評論 6 13
  • Tutorial - 1 (a) 為什么e時(shí)代需要生物特征識(shí)別我們在信息時(shí)代面臨諸多問題,如病毒沉删、黑客渐尿、計(jì)算機(jī)盜竊...
    ShellyWhen閱讀 2,210評論 0 4
  • 這些年計(jì)算機(jī)視覺識(shí)別和搜索這個(gè)領(lǐng)域非常熱鬧,后期出現(xiàn)了很多的創(chuàng)業(yè)公司矾瑰,大公司也在這方面也花了很多力氣在做砖茸。做視覺搜...
    方弟閱讀 6,496評論 6 24
  • iOS圖像處理(四)CIDetector特征識(shí)別(人臉識(shí)別) 前言 CIDetecror是Core Image框架...
    xiari1991閱讀 558評論 0 1