????????做了兩年的人臉識別領(lǐng)域的工作,一直沒有寫過關(guān)于這個(gè)領(lǐng)域的文章,想了想,還是寫一篇淺談一下。。。
????????現(xiàn)在隨著人工智能的發(fā)展越來越快,已經(jīng)有很多公司在做人臉識別技術(shù)了。在中國做算法比較好的比如說Face++、云從、商湯、大華等,而基于算法做這個(gè)領(lǐng)域的更多,百度AI、騰訊云、阿里云、訊飛等大公司都有了相應(yīng)提供的API。之前電聯(lián)過訊飛的客服,他們說他們就是基于face++的算法的,好像支付寶也是基于face++。而國外我了解的最多的就是OpenCV了,OpenCV不管是做人臉檢測還是活體檢測,對于開源框架都是比較好的了。
? ? ? ? 而從iOS 5之后蘋果也開發(fā)了人臉識別的庫,但是一直沒這么受重視,直到這兩年才好點(diǎn),這就是CoreImage庫,使用的方法相當(dāng)簡單:
1.首先要導(dǎo)入CoreImage.framework框架
2.引入頭文件#import <CoreImage/CoreImage.h>
3.創(chuàng)建個(gè)按鈕調(diào)用相冊或者相機(jī)(記得現(xiàn)在蘋果對于隱私權(quán)限很重視,一定要在info.plist中添加獲取攝像頭及相冊的參數(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:@"檢測到%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:@"檢測人臉失敗"delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil,nil];
? ? ? ? [alertshow];
? ? }
}
????????實(shí)現(xiàn)起來很簡單,經(jīng)過測試這中方法可以檢測多張人臉,但是相對專業(yè)算法識別失敗的概率還是較大,同時(shí),類人臉卡通圖片有很大的可能性識別成功,沒辦法篩選出來。
????????另外,現(xiàn)在很多時(shí)候單單的人臉檢測已經(jīng)滿足不了需求了,還需要加上活體檢測來提高安全性,活體檢測現(xiàn)在普遍用的是眨眼,張嘴,左右上下?lián)u頭等,來判斷是否是真人。但是,現(xiàn)在的小伙伴都是有才的人,這種方法怎么可能難住呢,于是錄個(gè)點(diǎn)頭搖頭或者眨眼的視頻就來騙這種活體檢測的方法,而且很多時(shí)候還成功了~~~所以,針對人臉活體檢測目前個(gè)人覺得最好的辦法是人臉檢測+隨機(jī)數(shù)字閱讀。
????????第三方的人臉活體檢測中,訊飛的活體檢測不是太穩(wěn)定,識別的坐標(biāo)點(diǎn)跳動偏差較大,同時(shí)CPU的使用率很高,我用了十來分鐘手機(jī)就開始發(fā)燙,而要是屏幕小的手機(jī)識別率又變的更低。。。
加上OpenCV地址:https://opencv.org/releases.html
未完待續(xù)~~~
沒有續(xù)了,第三方的不管了。如果有商務(wù)合作的話,第三方會把你當(dāng)上帝的。。。