Android人臉識別活體檢測開發(fā)入門--基于虹軟免費(fèi)SDK實(shí)現(xiàn)

引言

人工智能早已不是什么新鮮的事物,人臉識別是當(dāng)前比較熱門的技術(shù)足删,在國內(nèi)也越來越多的運(yùn)用,例如刷臉打卡锁右,刷臉APP失受,身份識別,人臉門禁等咏瑟。人臉識別技術(shù)為我們的生活帶來了一些便利拂到,但是也存在很明顯的缺陷,那就是活體的問題码泞。想象一下如果人臉門禁普及到家庭中兄旬,如果一個(gè)人拿著你的照片就能進(jìn)入你的房間,那門禁豈不是形同虛設(shè)余寥,因此活體檢測是一個(gè)必不可少的部分领铐。

那么如何在Android平臺上實(shí)現(xiàn)活體檢測這一功能呢,本文將借助虹軟提供的SDK進(jìn)行介紹宋舷。


項(xiàng)目的目標(biāo)

本文將實(shí)現(xiàn)視頻模式與圖像模式的人臉檢測绪撵。


準(zhǔn)備工作

1.進(jìn)入http://ai.arcsoft.com.cn/product/arcface.html網(wǎng)站,注冊賬號并登錄

2.選擇需要下載的SDK版本填寫下載申請祝蝠,并提交


點(diǎn)擊提交后獲得APPID和SDKKey音诈,點(diǎn)擊下載鏈接下載SDK壓縮包,AppID與SDKKey在后面激活時(shí)會用到绎狭,所以可以先保存下來细溅。


下載成功后我們拿到的包結(jié)構(gòu)應(yīng)該是如下所示,紅框標(biāo)出的三個(gè)庫為引擎庫儡嘶,也就是我們后面需要用到的庫喇聊。


項(xiàng)目實(shí)現(xiàn)

包和key都已經(jīng)到手,那么該如何使用這個(gè)包蹦狂,來實(shí)現(xiàn)我們想要的活體檢測呢承疲?我發(fā)現(xiàn)在下載的包中有一個(gè)samplecode邻耕,這個(gè)示例代碼雖然簡單,但是也能足夠?qū)崿F(xiàn)我想要的效果了燕鸽,因此在這里偷一下懶,直接使用虹軟提供的示例代碼來進(jìn)行本次項(xiàng)目的說明啼辣。

打開示例代碼的工程啊研,我們可以看到目錄結(jié)構(gòu)如下,lib目錄下存放jar包鸥拧,jnilibs下存放so包党远,后面如果我們自己要寫一個(gè)新的工程就要這樣做了。


說完了庫接下來說一下每個(gè)類的作用富弦,Constants是用來寫我們在官網(wǎng)獲得的SDKKey與APPID沟娱,首先我們將官網(wǎng)上得到的Key 根據(jù)名稱一個(gè)個(gè)的替換上去,注意一定要一一對應(yīng)腕柜。


DrawUtils是用來畫人臉框的工具類济似,ImageUtil是圖像的工具類,提供了NV21轉(zhuǎn)換以及YUV轉(zhuǎn)換的方法盏缤,挺好用的但是和我們的主題并不相關(guān)砰蠢,這里就不介紹了。接下來就是重頭戲了唉铜,我們開始使用虹軟的SDK台舱,我們在第一次使用引擎之前必須需要先激活引擎,在MainActivity我們可以找到潭流。具體的調(diào)用流程可以參照下圖竞惋。


如果提示激活失敗,可以根據(jù)提供的errorCode到開發(fā)文檔中對比錯(cuò)誤碼定位問題灰嫉,一般都是因?yàn)榧せ顣r(shí)沒聯(lián)網(wǎng)或者沒有給與權(quán)限的問題導(dǎo)致的拆宛,也有APPID與Key填反或者填錯(cuò)的大馬虎的存在。當(dāng)點(diǎn)擊激活按鈕時(shí)熬甫,界面toast提示活體引擎激活成功胰挑,說明我們填寫和調(diào)用都沒問題,接下來我們就可以開始使用引擎了椿肩。

先從圖片模式下的活體檢測開始瞻颂,首先我們要明確一個(gè)問題,既然是活體檢測郑象,那么圖片怎么樣檢測活體呢贡这?圖片模式下的活體(以下是我個(gè)人的理解,如果有問題歡迎指正)厂榛,就是指以圖片為輸入源盖矫,檢測圖片內(nèi)的人是否為真人丽惭。像圖片內(nèi)是相片或者拍攝的屏幕等方式的,都無法通過活體檢測辈双,為了說的更清晰一些责掏,下面給出三種情況的典型例子。?


圖一為活體湃望,圖二圖三均為非活體换衬,相信看到圖片說明后,會更清晰一些证芭。概念講完了我們該知道如何使用SDK瞳浦。在任何引擎使用之前,我們都要先進(jìn)行初始化废士,由于是以圖片形式進(jìn)行的活體檢測叫潦,我們要用到FD與Liveness兩個(gè)引擎,首先要進(jìn)行初始化官硝。


活體引擎初始化需要兩個(gè)參數(shù)矗蕊,第一個(gè)是上下文(即context),第二個(gè)是檢測的類型由于我們是用的圖片模式泛源,所以使用Image模式拔妥,如果初始化出錯(cuò),可以去對照錯(cuò)誤碼表上的錯(cuò)誤碼定位自己的問題达箍。引擎初始化的參數(shù)没龙,活體引擎只需要指定Image模式或者video模式即可。FD引擎稍微復(fù)雜一些缎玫,(第一個(gè)參數(shù)就是我們之前輸入的APPID(注意不是活體的AppID)硬纤,SDKKey,圖片的角度(默認(rèn)為0度我們上面的三張圖均為0度赃磨,逆時(shí)針為90度筝家,順時(shí)針為270度),最小人臉檢測大小邻辉,檢測的最多人臉數(shù)量)

初始化完成溪王,接下來我們要去調(diào)用活體的引擎了,首先看看活體檢測需要哪些參數(shù)值骇,


在官方文檔中有很詳盡的介紹莹菱,首先是傳入的圖像數(shù)據(jù),由于我們后面會選擇NV21吱瘩,所以要先用mageUtils.getNV21方法將圖像數(shù)據(jù)轉(zhuǎn)為NV21格式道伟,圖像寬度高度很簡單就不多說,顏色空間格式我選擇NV21,當(dāng)然官方也提供了BGR24的格式蜜徽,大家可根據(jù)需要選擇祝懂,接下來參數(shù)是使用FD引擎跟蹤的人臉信息格式,因此在活體檢測前我們要先使用FD引擎進(jìn)行人臉跟蹤拘鞋,才能進(jìn)行活體的檢測砚蓬,最后一個(gè)參數(shù)是用來保存活體檢測的信息。


這里就是FD進(jìn)行人臉檢測的代碼掐禁,參數(shù)大部分和活體檢測的差不多怜械,唯一一點(diǎn)不同的是最后的fdFaceList是作為輸出端保存檢測到的人臉位置等數(shù)據(jù),而活體部分是作為輸入端輸入人臉位置數(shù)據(jù)傅事。好了,到了這一步我們需要的參數(shù)都已經(jīng)齊全峡扩,總算可以進(jìn)行活體的檢測了蹭越。由于活體檢測目前只能支持單人臉,因此我們需要先清理一下FD跟蹤到的人臉數(shù)據(jù)教届,以實(shí)際情況來看响鹃,一般我們想檢測的都是最大的人臉,因此我們先找到FDlist中最大的人臉案训。


清理完成买置,我們可以開始進(jìn)行活體的檢測,參數(shù)上面都已經(jīng)講過了强霎,這里就不多贅述忿项,直接看代碼吧。


如果你的errorCode為0城舞,那么恭喜你轩触,起碼在所有參數(shù)上你都沒有問題了,之后只要從Liveneessinfo中拿到檢測的結(jié)果就可以了家夺,0代表非活體脱柱,1代表活體,2代表多余一張人臉(由于前面對數(shù)據(jù)已經(jīng)做了最大人臉的清理拉馋,因此不會出現(xiàn)榨为,看起來后續(xù)還會出多人臉的版本啊期待一下),其他均為未知煌茴。當(dāng)然不要高興的太早随闺,在使用完引擎后我們要進(jìn)行引擎的銷毀。


好了圖片模式的活體檢測已經(jīng)完成景馁,具體的效果這邊就不展示了板壮,大家自己可以去嘗試一下。接下來是視頻模式下的活體檢測合住,這才是我們?nèi)粘I钪凶畛E龅降膱鼍按戮畿浺矝]有吝嗇撒璧,給了它獨(dú)立的Activity,和圖片模式的待遇完全不一樣呢:)

其實(shí)Video模式下的人臉檢測與Image模式大同小異笨使,無非是一個(gè)使用相機(jī)實(shí)時(shí)傳回的數(shù)據(jù)源卿樱,另一個(gè)采用固定的數(shù)據(jù)源。稍微有所不同的是硫椰,我們的人臉跟蹤引擎由FD改為了FT繁调,F(xiàn)T相對于FD更快,更適合Video模式下的人臉實(shí)時(shí)跟蹤靶草。FT與FD的初始化參數(shù)一模一樣蹄胰,如果忘記的話可以往上翻一下∞认瑁活體引擎我們由剛才的Image 改為了Video裕寨。


之后就是怎么使用FT與活體了,首先我們要拿到相機(jī)的預(yù)覽數(shù)據(jù)派继,在preview的回調(diào)中我們可以拿到數(shù)據(jù)宾袜。


接下來的流程與Image模式一致,首先要找出數(shù)據(jù)源中的人臉驾窟,也就是調(diào)用FT尋找人臉庆猫。


與剛才不同的是我們要在視頻的預(yù)覽數(shù)據(jù)內(nèi)畫一個(gè)人臉框,讓我們能清除的知道人臉有沒有被檢測到绅络,檢測到的是哪一個(gè)人臉月培。


活體檢測的代碼與上面的Image模式的代碼一模一樣,這里就不多做贅述昨稼,有不清楚的可以往上翻一翻节视。好了我們來看一下Video模式下的活體檢測效果吧。



總結(jié)

總的來說假栓,在我自己測試的時(shí)感覺準(zhǔn)確率還是相當(dāng)?shù)母叩难靶校矅L試了各種各樣的方式去攻擊,但是還是無法通過活體檢測匾荆,證明虹軟的算法確實(shí)很不錯(cuò)拌蜘,更重要的是這些算法是免費(fèi)提供的,對于我這種想嘗嘗鮮的人來說真的是個(gè)好消息牙丽。而且上手也快简卧,官方的文檔寫的非常詳細(xì),對每個(gè)函數(shù)以及變量都有解釋烤芦,而且也有示例的代碼举娩,在我的使用過程中基本沒有碰到過什么阻礙,很輕松的就上手了,有些地方寫的有些拖沓或者不清還請大家多多包涵铜涉,有不明白的問題也歡迎大家和我多多交流智玻,后面的話等自己有時(shí)間可能會再寫一篇用虹軟的SDK進(jìn)行二次開發(fā)的完整應(yīng)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芙代,一起剝皮案震驚了整個(gè)濱河市吊奢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纹烹,老刑警劉巖页滚,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铺呵,居然都是意外死亡裹驰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門片挂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邦马,“玉大人,你說我怎么就攤上這事宴卖。” “怎么了邻悬?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵症昏,是天一觀的道長。 經(jīng)常有香客問我父丰,道長肝谭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任蛾扇,我火速辦了婚禮攘烛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镀首。我一直安慰自己坟漱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布更哄。 她就那樣靜靜地躺著芋齿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪成翩。 梳的紋絲不亂的頭發(fā)上觅捆,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音麻敌,去河邊找鬼栅炒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赢赊。 我是一名探鬼主播乙漓,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼域携!你這毒婦竟也來了簇秒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤秀鞭,失蹤者是張志新(化名)和其女友劉穎趋观,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锋边,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皱坛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豆巨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剩辟。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖往扔,靈堂內(nèi)的尸體忽然破棺而出贩猎,到底是詐尸還是另有隱情,我是刑警寧澤萍膛,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布吭服,位于F島的核電站,受9級特大地震影響蝗罗,放射性物質(zhì)發(fā)生泄漏艇棕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一串塑、第九天 我趴在偏房一處隱蔽的房頂上張望沼琉。 院中可真熱鬧,春花似錦桩匪、人聲如沸打瘪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑟慈。三九已至,卻和暖如春屋匕,著一層夾襖步出監(jiān)牢的瞬間葛碧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工过吻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留进泼,地道東北人蔗衡。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像乳绕,于是被迫代替她去往敵國和親绞惦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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