1. 程式人生 > >人臉識別--活體檢測(眨眼檢測)

人臉識別--活體檢測(眨眼檢測)


人臉識別在現在很多的專案中都有應用,最常見的就屬此次315曝光的支付寶刷臉登入,當然支付寶也出來做了澄清,我們還是需要相信科技的.支付寶的刷臉可謂是相當成熟了.下面我們來簡單的分析一下支付寶的刷臉登入流程.

* 1.前端採集人臉*

前端採集人臉的過程其實就是採集一張帶有人臉的影象,然後我們對這個影象進行base64編碼之後傳給後臺服務,後臺服務去做人臉的識別,或者驗證,如果這樣的話,前端做起來其實是相對較複雜的,首先採集人臉的過程中,我們要做的是分析圖片中有人臉然後將此影象儲存,完成採集過程,當然這樣是不安全的,因為我可以隨便拿一個人的照片就可以騙過去前端採集的這一過程,所以如果僅僅如此做的話,還是比較簡單的,在iOS中有蘋果自帶的識別人臉的API,當然現在用的最多的是opencv 但是這樣做的話,那支付寶的產品和技術人員也就該捲鋪蓋回家了,所以我們需要在前端進行人臉採集的時候我們需要對識別到人臉進行活體檢測,現在的活體檢測技術有很多,有讓搖頭,有讓張嘴,有人眨眼,當然也有讓這些全部加起來的,(我的臆想..)就我自己的看法,出了眨眼都看起來有點奇怪,支付寶採用的就是眨眼來過濾掉靜態圖片的識別,但是我嘗試過,如果把眨眼的視訊拍下來來騙支付寶,是可以騙過去的哦,但是在後續的識別中卻是通不過的,這點咱們在下個階段再談(你如果開通了支付寶的刷臉登入,可以錄製一個自己的眨眼視訊來騙下支付寶).支付寶的具體的採集人臉過程大概就是這樣(個人理解,如果有人覺得不對的可以留言討論哦)

* 2.後臺服務驗證識別*

其實後臺的人臉識別驗證不屬於我們此篇文章要說的內容,在這兒我還是想大概的敘述一下,現在的後臺人臉識別驗證其實是有很好的第三方的,比較厲害的一個是”face++” 支付寶好像也有用face++ 的服務(face++ 的網站上有寫),有興趣的童鞋可以去網上搜一下,還有據我所知的訊飛,我有電聯過訊飛的客服,他們有說他們的服務是基於face++的,識別率還是蠻高的,iOS,安卓都有封裝好的對應的SDK,另外提一下face++人臉識別是基於介面的,當然如果自己公司想要開發自己的人臉識別服務也是可以的,但是就我知道的比較專業的好像就是opencv 了,不得不說opencv著實相當強大.

3.刷臉登入草圖

我也大致寫了下刷臉登入的流程草圖,裡面確實還有許多要優化的地方,也僅僅拋磚引玉了,希望可以幫助到需要的童鞋,(當初我做這塊兒的時候,資料可謂少之又少,希望能夠分享出來幫助一些正在迷茫的童鞋們)

4.劃重點

重點是人臉識別中的活體檢測 
可以存在兩種方式 
1)客戶端做人臉採集—本章重點 
2)服務端做人臉採集—不會講—類似於直播方式—服務端處理視訊幀—有興趣的童鞋可以嘗試下,不知道體驗好不好,沒有那麼強大的後臺,所以只能做前端的眨眼檢測了,但是即便伺服器做,原理都是一樣的吧.

5.檢測思路

人臉採集的過程其實是客戶端通過錄像裝置採集視訊,然後我們拿到視訊流,對視訊流的每一幀做處理,進而來檢測視訊中是否有人臉和視訊中的人臉是否—(再次感謝看遠的github社群,感謝里面的人才,我可以把他們的思路借鑑下來) 
(1)利用蘋果自帶的API(跟原生掃描二維碼的類一樣)來判斷每一幀中是否有人臉,裡面可以檢測到兩隻眼是否存在以及兩隻眼是否睜開,然後記錄上次睜開眼的時間,然後在下一次檢測到閉眼的時候比較一下與上一次睜眼的時間差,如果在正常範圍內則認為是一次正常的眨眼.—此方法,也還不錯,但是誤差較大,如果只是做一個眨鹽拍照的娛樂應用還好,但是做活體檢測就顯得有點力不從心了.

(2)利用opencv首先對每一幀進行人臉檢測,檢測到後,算出眼鏡的區域,擷取眼鏡區域再用opencv 對該影象中眼睛的數量進行檢測,用一個數組來對每次的眼鏡數量進行註冊,當陣列大小為3的時候,如果陣列中第一次眼睛數量大於0,第二次等於0,最後一次大於0,則證明是一次眨眼,此方法可能很蠢,有專門做眨眼檢測研究的可能會認為這種方法low到爆,可以利用閾值..大資料分析…反正那一堆堆高深的演算法我是看不懂,前期也做過相對應的學習,但是實現起來太多複雜,領導給的時間不允許,所以就只有採用這種比較low的第二種方法了,不得不說這種方法效果還是蠻不錯的,當然肯定比不上支付寶那種大牛寫出來的演算法,但是,至少可以信心滿滿的跟自己的領導交差了,可以半個小時之後,拿著demo去向領導邀功去了,然後坐上CEO,贏取白富美,從此走上人生巔峰的道路了,(沒事,盡情的做夢吧)

6.程式碼就是王道

其實對於這塊兒我已經封裝成了一個服務CaptureFaceService 
下面大概介紹一下這塊兒的使用方法

1.引入標頭檔案–湊字數* 
#import "CaptureFaceService.h"
2.建立物件 – 湊字數 (懶載入)*
@property(nonatomic,strong)CaptureFaceService * captureFaceService;

  - (CaptureFaceService *)captureFaceService{
    if (!_captureFaceService) {
        _captureFaceService = [CaptureFaceService new];
    }
    return _captureFaceService;
}

3.開始採集
- (void)startCaptureFace{
    __weak typeof(self)weakSelf = self;
    [self.captureFaceService startAutoCaptureFaceWithPreView:self.vidioView andCaptureFaceProgressBlock:^(float faceProgress, float eyeProgress, captureFaceStatus captureFaceStatus) {
        [weakSelf changeTipTextWithCaptureFaceStatus:captureFaceStatus];
    } andCompleteBlock:^(UIImage *resultImage, NSError *error) {
        if (error) {
            UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"檢測人臉失敗,請重試" message: nil preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:[UIAlertAction actionWithTitle:@"重試" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
                [weakSelf startCaptureFace];
            }]];
            [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {
            }]];
            [weakSelf presentViewController:alertController animated:YES completion:nil];
            return ;
        }
        //處理採集到的圖片
        [self handleResultImage:resultImage];
    }];
}

4.當然也可以中斷採集 
[self.captureFaceService stopCaptureFace];

7.深度剖析

說實話,我真的想做一下深度的剖析,活體檢測聽起來太過高大上,我褲子都脫了,竟然給我看這個.這個.好吧,簡答的做個介紹吧!—其實真的寫的很簡單,為了滿足你們,我就湊點字數吧

#import <Foundation/Foundation.h>
#import <opencv2/highgui/cap_ios.h>
typedef enum
{
    captureFaceStatus_NoFace,       //未檢測到臉
    captureFaceStatus_MoreFace,     //有多張臉
    captureFaceStatus_NoBlink,      //未眨眼
    captureFaceStatus_IllegalData,  //檢測非法
    captureFaceStatus_OK,           //檢測完成
    captureFaceStatus_NoCamare     //檢測完成

}captureFaceStatus;

typedef void (^captureFaceProgressBlock ) (float faceProgress,float eyeProgress,captureFaceStatus captureFaceStatus);
typedef void (^captureFaceCompleteResultBlock) (UIImage *resultImage,NSError * error);
@interface CaptureFaceService : NSObject <CvVideoCameraDelegate>


/**
 開啟智慧掃描人臉(包含活體檢測--眨眼)

 @param preView 視訊預覽區域
 @param captureFaceProgressBlock 過程回撥
 @param captureFaceCompleteResultBlock 完成回撥
 */
- (void)startAutoCaptureFaceWithPreView:(UIView *)preView andCaptureFaceProgressBlock:(captureFaceProgressBlock)captureFaceProgressBlock andCompleteBlock:(captureFaceCompleteResultBlock)captureFaceCompleteResultBlock;


/**
 停止採集
 */
- (void)stopCaptureFace;
@end

8.相信我了吧真的沒有什麼可以剖析的

什麼,你想看我裡面是怎麼實現的?裡面也總共200來行程式碼,貼出來浪費看官的流量,我就不再帖程式碼了,看到這裡,你就可以拿出來我這個類來使用了,demo我會放到github上,有需要的童鞋可以去下載研究實現哦.

9.有一大波重點來襲 – (重點)

demo下載下來是不可以直接使用的,對你沒有聽錯,會報錯,你根本跑不起來(你他麼是不是在逗我,我需要下載下來直接能跑的程式,…)看官切勿煩躁,因為opencv 這個SDK太大,150多兆,,,git真的上傳不上去啊,所以,按照以下步驟做,您所下載的程式就可以跑起來了

1.去opencv 官網,下載iOS的SDK,我demo中用的是2.4版本 
http://opencv.org/releases.html 
2.去度娘 (haarcascade_frontalface_alt2.xml) (haarcascade_eye.xml)這兩個級聯分類器並下載匯入到自己的專案中 
3.這下您就可以開心的跑起來體驗了….

10.重點中的重點

原始碼直通車

11.希望能幫助到需要的童鞋,如您喜歡,敬請留言
--------------------- 
作者:Mr.June 
來源:CSDN 
原文:https://blog.csdn.net/fanfan12341/article/details/73024345 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關推薦

人臉識別--活體檢測(眨眼檢測)

人臉識別在現在很多的專案中都有應用,最常見的就屬此次315曝光的支付寶刷臉登入,當然支付寶也出來做了澄清,我們還是需要相信科技的.支付寶的刷臉可謂是相當成熟了.下面我們來簡單的分析一下支付寶的刷臉登入流程. * 1.前端採集人臉* 前端採集人臉的過程其實就是採集一張帶有

Android 人臉識別 活體檢測 人臉對比

      人臉識別技術應用於支付、門禁、以及手機解鎖在當下已經非常成熟,作為一個Android 開發者,掌握人臉識別技術已經是必須做的事情了,市面上比較流行的人臉識別API主要有阿里雲(5000條以內免費)、騰訊雲(收費)、以及虹軟API(免費,活

人臉識別活體檢測的一些方法

人臉識別活體檢測     在生物識別系統中,為防止惡意者偽造和竊取他人的生物特徵用於身份認證,生物識別系統需具有活體檢測功能,即判斷提交的生物特徵是否來自有生命的個體。     一般生物特徵的活體檢測技術利用的是人們的生理特徵,例如活體指紋檢測可以基於手指的溫度、排汗

人臉識別活體檢測技術討論:基於背景人臉相對運動的活體判斷方法

討論 成像 情況下 技術 平臺 價值 研究 包括 公司 活體檢測是人臉識別安全性的重要保障,是人臉識別廠商將產品普及應用於各行業的重要競爭力。目前活體判斷的方法很多,但很難基於一種方法就能達到理想的效果,往往需要多種算法的交叉判斷,本文主要介紹一種簡單有效的活體判斷方法。在

Qt編寫百度離線版人臉識別+比對+活體檢測

在AI技術發展迅猛的今天,很多裝置都希望加上人臉識別功能,好像不加上點人臉識別功能感覺不夠高大上,都往人臉識別這邊靠,手機刷臉解鎖,刷臉支付,刷臉開門,刷臉金融,刷臉安防,是不是以後還可以刷臉匹配男女交友? 很多人認為人臉識別直接用opencv做,其實那只是極其基礎的識別個人

人臉識別中的活體檢測演算法綜述

1. 什麼是活體檢測? 判斷捕捉到的人臉是真實人臉,還是偽造的人臉攻擊(如:彩色紙張列印人臉圖,電子裝置螢幕中的人臉數字影象 以及 面具 等)2. 為什麼需要活體檢測? 在金融支付,門禁等應用場景,活體檢測一般是巢狀在人臉檢測與人臉識別or驗證中的模組,用來驗證是否使用者真實

人臉識別中的活體檢測演算法

人臉識別中的活體檢測演算法綜述   1. 什麼是活體檢測? 判斷捕捉到的人臉是真實人臉,還是偽造的人臉攻擊(如:彩色紙張列印人臉圖,電子裝置螢幕中的人臉數字影象 以及 面具 等) 2. 為什麼需要活體檢測? 在金融支付,門禁等應用場景,活體檢測一般

公安庫聯網人臉認證、人臉識別、人證合一、刷臉認證、活體檢測

輸入姓名、身份證號和人臉照片(base64格式字串),對姓名和身份證號實名認證,比對公安人口庫中照片和人臉照片得到相似度得分,用於風控,人證合一校驗 public static void main(String[] args) { String host =

JAVA實現人臉識別活體檢測之百度API

-----------------------8/16更新--------------------------- 有人問原始碼: 連結:https://pan.baidu.com/s/1WP37IBacu6VZwtNOUDbSYg 密碼:vdzm 在這 -------

人臉識別技術,基於移動端的人臉活體檢測技術

獲取 ima 圖像 身份認證 攝像頭 生物 基於 服務器端 提升 人臉識別技術,基於移動端的人臉活體檢測技術 背景 深度學習的算法和技術不斷成熟,人臉識別技術技術的識別率已經得到質的提升,目前我司的人臉識別技術率已經達到99%。人臉識別技術技術與其他生物特征識別技術相吃比

虹軟人臉識別 - faceId及IR活體檢測的介紹

虹軟人臉識別 - faceId及IR活體檢測的介紹 前幾天虹軟推出了 Android ArcFace 2.2版本的SDK,相比於2.1版本,2.2版本中的變化如下: VIDEO模式新增faceId(類似於之前文章中提到的trackId) 新增IR活體檢測功能 新增IR、RGB的活體閾值設定

[計算機視覺]人臉應用:人臉檢測人臉對比、五官檢測眨眼檢測活體檢測、疲勞檢測

人臉應用在計算機視覺體系中佔很大一塊,在深度學習火起來之前,基於傳統機器學習的人臉應用就已經很成熟了,有很多商用應用場景。本文用一個可以實際執行的Demo來說明人臉應用中常見的技術概念,包含‘人臉檢測’、‘人臉對比’、‘人臉表徵檢測(五官定位)&rs

騰訊技術工程 |騰訊AI Lab刷新人臉識別檢測兩大測評國際記錄,技術日調用超六億

smp 數據 ans mib idt 檢測平臺 eight 分享圖片 其他 2017年12月18日,深圳 - 騰訊AI Lab研發的Face R-FCN和FaceCNN算法分別在國際最大、最難的人臉檢測平臺WIDER FACE與最熱門權威的人臉識別平臺MegaFace多項評

opencv_人臉檢測、模型訓練、人臉識別

nbsp tro python3.6 pychar 入門 tex 幫助 family ext 人臉檢測、模型訓練、人臉識別 2018-08-15   今天給大家帶來一套人臉識別一個小案例,主要是幫助小夥伴們解決如何入門OpenCV人臉識別的問題,現在的AI行業比較火熱,

python實現人臉檢測識別(2)---- 利用keras庫訓練人臉識別模型

前面已經採集好資料集boss資料夾存放需要識別的物件照片,other存放其他人的訓練集照片,現在,我們終於可以嘗試訓練我們自己的卷積神經網路模型了。CNN擅長影象處理,keras庫的tensorflow版亦支援此種網路模型,萬事俱備,就放開手做吧。前面說過,我們需要通過大量的訓練資料訓練我們的模型,

基於OpenCV的人臉識別/人臉檢測

1:簡介 人臉檢測指從現實環境中識別出人臉的位置; 人臉識別基於人臉檢測,下一步才能辨析人臉的屬性,從而判別這個人是誰。 2:影象基本概念 幀:一張圖 幀數:一秒鐘重新整理多少張圖片 解析度:單位大小所能承載的畫素,能力為正相關 影象插值:提高影象解析度 OpenCV提供了5種插值方

TOP高校創新科技大賽【人像精細分割||人臉識別||人體關鍵點檢測

競賽資訊      任務與資料      競賽圈 提交結果 排行榜 參賽人員 參賽團隊 我的隊伍 任務 1

基於python3,百度AI實現人臉檢測人臉識別

我感覺百度是BAT三家裡面AI能力最強的了,在影象和語音的處理上面是很強的,很全面。百度AI裡面功能齊全,提供的語言也是很多。唯一不太好的是目前對python3不是很支援,還是支援python2。但也不表示python3做不了。 一下是程式碼 import urllib3,base64 fr

基於python、虹軟實現人臉檢測人臉識別

虹軟的人臉識別技術也是很強的,重要的是他免費提供了離線的sdk,還提供了例項,這個是目前幾家研究人臉識別的大公司裡面少有的。識別能力正常用還是可以的。我這個程式碼是呼叫的離線sdk實現的  from arcsoft import CLibrary, ASVL_COLOR_FORMAT,

基於python、face++實現人臉檢測人臉識別

face++做的人臉識別應該是我目前接觸到的效果最好的了。這家公司也是個獨角獸,專門做人臉識別這塊的,返回的照片的資訊很全,也好呼叫。不過只提供線上的,不提供離線sdk沒法做一些實時性的東西。 import requests from json import JSONDecoder import