????????做了兩年的人臉識(shí)別領(lǐng)域的工作起趾,一直沒(méi)有寫過(guò)關(guān)于這個(gè)領(lǐng)域的文章诗舰,想了想,還是寫一篇淺談一下训裆。眶根。。
????????現(xiàn)在隨著人工智能的發(fā)展越來(lái)越快边琉,已經(jīng)有很多公司在做人臉識(shí)別技術(shù)了属百。在中國(guó)做算法比較好的比如說(shuō)Face++、云從变姨、商湯族扰、大華等,而基于算法做這個(gè)領(lǐng)域的更多定欧,百度AI渔呵、騰訊云、阿里云砍鸠、訊飛等大公司都有了相應(yīng)提供的API扩氢。之前電聯(lián)過(guò)訊飛的客服,他們說(shuō)他們就是基于face++的算法的睦番,好像支付寶也是基于face++类茂。而國(guó)外我了解的最多的就是OpenCV了,OpenCV不管是做人臉檢測(cè)還是活體檢測(cè)托嚣,對(duì)于開(kāi)源框架都是比較好的了巩检。
? ? ? ? 而從iOS 5之后蘋果也開(kāi)發(fā)了人臉識(shí)別的庫(kù),但是一直沒(méi)這么受重視示启,直到這兩年才好點(diǎn)兢哭,這就是CoreImage庫(kù),使用的方法相當(dāng)簡(jiǎn)單:
1.首先要導(dǎo)入CoreImage.framework框架
2.引入頭文件#import <CoreImage/CoreImage.h>
3.創(chuàng)建個(gè)按鈕調(diào)用相冊(cè)或者相機(jī)(記得現(xiàn)在蘋果對(duì)于隱私權(quán)限很重視夫嗓,一定要在info.plist中添加獲取攝像頭及相冊(cè)的參數(shù))
4.提示框加個(gè)UIAlertViewDelegate
5.直接上代碼
#pragma mark --判斷是否是人臉
-(void)camerImage:(UIImage*)image{
? ? CIImage* ciimage = [CIImageimageWithCGImage:image.CGImage];
? ? NSDictionary* opts = [NSDictionary dictionaryWithObject:
? ? ? ? ? ? ? ? ? ? ? ? ? CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
? ? CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? context:niloptions:opts];
? ? //所有的人臉數(shù)據(jù)
? ? NSArray* features = [detectorfeaturesInImage:ciimage];
? ? if(features.count>0) {
? ? ? ?UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:[NSStringstringWithFormat:@"檢測(cè)到%lu張人臉",(unsignedlong)features.count] delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil,nil];
? ? ? ? [alertshow];
? ? ? ? CIFaceFeature*face=[featuresfirstObject];
? ? ? ? if(face.hasSmile)
? ? ? ? ? ? NSLog(@"有微笑");
? ? ? ? if(face.leftEyeClosed)
? ? ? ? ? ? NSLog(@"左眼閉著的");
? ? ? ? if(face.rightEyeClosed)
? ? ? ? ? ? NSLog(@"右眼閉著的");
? ? ? ? if(face.hasLeftEyePosition)
? ? ? ? ? ? NSLog(@"左眼位置:%@",NSStringFromCGPoint(face.leftEyePosition));
? ? ? ? if(face.hasRightEyePosition)
? ? ? ? ? ? NSLog(@"右眼位置:%@",NSStringFromCGPoint(face.rightEyePosition));
? ? ? ? if(face.hasMouthPosition)
? ? ? ? ? ? NSLog(@"嘴巴位置:%@",NSStringFromCGPoint(face.mouthPosition));
? ? ? ? NSLog(@"臉部區(qū)域:%@",NSStringFromCGRect(face.bounds));
? ? ? ? if(face.bounds.size.width==face.bounds.size.height)
? ? ? ? ? ? NSLog(@"臉蛋是圓的");
? ? }else{
? ? ? ? UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"檢測(cè)人臉失敗"delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil,nil];
? ? ? ? [alertshow];
? ? }
}
????????實(shí)現(xiàn)起來(lái)很簡(jiǎn)單迟螺,經(jīng)過(guò)測(cè)試這中方法可以檢測(cè)多張人臉,但是相對(duì)專業(yè)算法識(shí)別失敗的概率還是較大舍咖,同時(shí)矩父,類人臉卡通圖片有很大的可能性識(shí)別成功,沒(méi)辦法篩選出來(lái)排霉。
????????另外窍株,現(xiàn)在很多時(shí)候單單的人臉檢測(cè)已經(jīng)滿足不了需求了,還需要加上活體檢測(cè)來(lái)提高安全性,活體檢測(cè)現(xiàn)在普遍用的是眨眼球订,張嘴后裸,左右上下?lián)u頭等,來(lái)判斷是否是真人冒滩。但是微驶,現(xiàn)在的小伙伴都是有才的人,這種方法怎么可能難住呢开睡,于是錄個(gè)點(diǎn)頭搖頭或者眨眼的視頻就來(lái)騙這種活體檢測(cè)的方法因苹,而且很多時(shí)候還成功了~~~所以,針對(duì)人臉活體檢測(cè)目前個(gè)人覺(jué)得最好的辦法是人臉檢測(cè)+隨機(jī)數(shù)字閱讀士八。
????????第三方的人臉活體檢測(cè)中容燕,訊飛的活體檢測(cè)不是太穩(wěn)定,識(shí)別的坐標(biāo)點(diǎn)跳動(dòng)偏差較大婚度,同時(shí)CPU的使用率很高蘸秘,我用了十來(lái)分鐘手機(jī)就開(kāi)始發(fā)燙,而要是屏幕小的手機(jī)識(shí)別率又變的更低蝗茁。醋虏。。
加上OpenCV地址:https://opencv.org/releases.html
未完待續(xù)~~~
沒(méi)有續(xù)了哮翘,第三方的不管了颈嚼。如果有商務(wù)合作的話,第三方會(huì)把你當(dāng)上帝的饭寺。阻课。。