淺談iOS中的人臉識別及活體檢測

????????做了兩年的人臉識別領(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)上帝的。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容