全網(wǎng)首發(fā):Android Camera2 集成人臉識(shí)別算法
這可能是全網(wǎng)唯一一篇介紹Android Camera2接口集成人臉?biāo)惴ǖ奈恼铝藒
寫在前面:
說起人臉識(shí)別,相信大家都不會(huì)感到陌生,在我們平時(shí)的工作生活中,人臉打卡、刷臉支付等等已經(jīng)是應(yīng)用的非常廣泛了,人臉識(shí)別也給我們的生活帶來了極大的便利。
這篇文章的目的是讓大家了解熟悉Android平臺(tái)上人臉?biāo)惴傻幕玖鞒蹋ㄡ槍?duì)應(yīng)用層的集成)。相信讀完這篇文章后,大家會(huì)覺的,原來集成人臉識(shí)別算法也是so easy。

這篇文章將針對(duì)下面幾點(diǎn)展開介紹:
一、Android平臺(tái)人臉識(shí)別程圖
二、ArcSoft人臉識(shí)別算法sdk下載
三、Camera2 API 集成 ArcSoft人臉識(shí)別算法
一、Android平臺(tái)人臉識(shí)別流程圖
人臉識(shí)別流程圖基本如下圖所示,用一句話來說就是獲取camera數(shù)據(jù),送到算法中進(jìn)行識(shí)別,最后顯示識(shí)別結(jié)果。

二、ArcSoft人臉識(shí)別算法sdk下載
人臉識(shí)別算法很多,如果是高通平臺(tái),高通也是有一套人臉識(shí)別算法的。我這里選擇的是arcsoft的識(shí)別算法,這個(gè)目前是免費(fèi)的,而且相對(duì)來說算法效果也還不錯(cuò)。
接下來我們看下如何去獲取arcsoft的人臉識(shí)別sdk。
1)登錄arcsoft官網(wǎng)ai.arcsoft.com.cn/,選擇進(jìn)入開發(fā)者中心

2)注冊(cè)并登錄開發(fā)者中心后,在開發(fā)者中心界面,我們選擇“新建應(yīng)用”,然后勾選人臉識(shí)別功能。
如下圖所示,我創(chuàng)建的應(yīng)用是“CameraDemo”。這個(gè)界面的APP_ID 和SDK_KEY我們后面代碼里面需要用到。這個(gè)界面還有個(gè)“下載SDK”的按鈕,點(diǎn)擊就可以下載我們需要的sdk demo。

3)Demo下載下來后,我們先跑下arcsoft官方Demo看下效果。
我們選擇人臉檢測屬性(視頻)。 如下圖所示,效果還不錯(cuò),我們可以看到識(shí)別出來的信息里面包含了性別、年齡、是否是真人這些基本信息。


三、Camera2 API 集成
通過上面的2步,大家有沒覺的集成人臉識(shí)別還是蠻簡單的。介紹完了官方的demo,那接下來我們看下采用Android Camera2 的api,如何去集成arcsoft的人臉識(shí)別算法呢。
1、如下面代碼塊所示,arcsoft 官方demo采用的是Camera1的api接口,設(shè)置的預(yù)覽數(shù)據(jù)的回調(diào),回調(diào)的直接就是nv21的byte[]數(shù)據(jù),然后再把byte[]數(shù)據(jù)送進(jìn)去算法處理。
2、接下來我們要介紹的是使用Camera2接口,如何集成arcsoft的人臉識(shí)別算法。
我自己創(chuàng)建了個(gè)應(yīng)用工程,demo源碼地址也在文末會(huì)給出。 我們先來看下我自己寫的demo效果圖:

下面來講解下代碼實(shí)現(xiàn)的主要步驟: (不熟悉Camera2接口的同學(xué),建議先找一篇關(guān)于Camera2 API的文章先了解下,關(guān)于Camera2,我自己前面也寫過算是比較詳細(xì)的文章介紹,也歡迎大家閱讀)
i、初始化imageReader
ii、創(chuàng)建session的時(shí)候,把imagerReader的surface也add進(jìn)去。這樣我們就能拿到實(shí)時(shí)的視頻流。
iii、在imageReader的實(shí)時(shí)流回調(diào)里面,我們需要把接收到的YUV_420_888的數(shù)據(jù)先轉(zhuǎn)換成nv21格式,然后再送進(jìn)arcsoft的人臉檢測算法中進(jìn)行處理。 Camera1 接口上,設(shè)置預(yù)覽數(shù)據(jù)回調(diào)后,回調(diào)的直接就是nv21格式的數(shù)據(jù),相對(duì)來說會(huì)比Camera2上的處理會(huì)簡單很多。
不過Android 目前已經(jīng)不再對(duì)Camera舊的架構(gòu)進(jìn)行維護(hù),而且目前主流的手機(jī)采用的基本上也都是Camera2的接口。所以我們還是非常有必要熟悉掌握Camera2的各種使用。
Demo 代碼地址:pan.baidu.com/s/1z44mAtkJ…
這篇文件介紹的,是針對(duì)應(yīng)用層上的人臉?biāo)惴伞,F(xiàn)在很多手機(jī)廠商,人臉?biāo)惴ㄓ幸徊糠质窃趆al層完成的。比如美顏算法這些,直接就是在hal層完成的了,這樣處理效率會(huì)更高。針對(duì)hal層的算法集成,感興趣同學(xué)的歡迎留言,后面的文章我會(huì)進(jìn)行更新介紹。
*本人從事Android Camera相關(guān)開發(fā)已有5年,
*目前在深圳上班,
*歡迎關(guān)注我的微信公眾號(hào): 小馳筆記
*希望和更多的小伙伴一起交流學(xué)習(xí)~

---- 2021.04.17 深圳 16:21
