Android FaceDetector實(shí)現(xiàn)人臉檢測(cè)功能
關(guān)于人臉檢測(cè)被折磨了半個(gè)月,前2周開(kāi)需求會(huì)時(shí)需要要做一個(gè)“人臉認(rèn)證上傳功能,具體是打開(kāi)前置攝像頭,識(shí)別出用戶的臉并且臉在一個(gè)指定的圓圈內(nèi)然后自動(dòng)保存這個(gè)狀態(tài)的圖像待用戶是否確定上傳”。聽(tīng)到這個(gè)需求我第一時(shí)間想到比較專業(yè)的圖形處理庫(kù)OpenCV。去github上面搜了一下關(guān)于openCV識(shí)別人臉的demo,樣例確實(shí)有點(diǎn)多,也確實(shí)是可以實(shí)現(xiàn) 但是OpenCV庫(kù)實(shí)在是有點(diǎn)大8M,用這個(gè)庫(kù)估計(jì)會(huì)被構(gòu)架師說(shuō)死。然后我還搜過(guò)其它的第三方庫(kù)(虹軟,face++,阿里云人臉檢測(cè))這幾款都不是省油的燈一款需要兼容android5.0以上,其它2款都是收費(fèi)版,至于阿里云更厲害了不支持離線檢測(cè)。
后來(lái)才選擇了google自帶api,網(wǎng)上一搜發(fā)現(xiàn)google 的一個(gè)類android.hardware.Camera里面有已經(jīng)幫你封裝好的人臉檢測(cè)的api有這方面了解的同學(xué)可以參考一下點(diǎn)擊打開(kāi)鏈接。我開(kāi)始也是使用這種方式實(shí)現(xiàn)的,磕磕碰碰的寫(xiě)完后最終發(fā)現(xiàn)合乎需求,后來(lái)自己打算測(cè)試一下機(jī)子兼容性,拿了一臺(tái)華為機(jī)子一測(cè)試,發(fā)現(xiàn)人臉的那個(gè)接口沒(méi)有任何回調(diào)(nexus6P調(diào)用還會(huì)發(fā)現(xiàn)閃退,打log發(fā)現(xiàn)是ndk層拋出來(lái)的),心馬上沉入谷底。
最后發(fā)現(xiàn)好像沒(méi)有啥捷徑可走了,只好老實(shí)實(shí)使用android.media.FaceDetector進(jìn)行開(kāi)發(fā)。這種方式的使用的思路是,使用Camera+TextureView(鑒于對(duì)開(kāi)發(fā)時(shí)間緊,對(duì)已過(guò)時(shí)有點(diǎn)了解就沒(méi)有使用Camera2)進(jìn)行預(yù)覽,通過(guò)設(shè)置PreviewCallback實(shí)時(shí)抓取每一幀圖像進(jìn)行檢測(cè)是否合格。圖像預(yù)覽本人推薦google關(guān)于Camera使用demo進(jìn)行修改,因?yàn)樵趯?shí)際中有很多機(jī)型未必都能合乎預(yù)想(本人也確實(shí)被坑過(guò),自己封裝的Camera發(fā)現(xiàn)跑在一些機(jī)子上圖像方向是反向的。當(dāng)然如果對(duì)Camera很熟悉那也是可以自己寫(xiě)的)。好了啰嗦了一大堆下面來(lái)看看正題
先看看集成到app里面的實(shí)際效果

這里說(shuō)明不是APP卡,我用的錄屏軟件共享桌面時(shí)一卡一卡的
首先圖像預(yù)覽改自google demo,demo拿過(guò)來(lái)是不能直接使用的,里面需要自己手動(dòng)添加每一幀的回調(diào),代碼如下(這里直接貼圖了,更直觀,稍后我會(huì)把demo發(fā)出來(lái))



google CameraDemo主要改了這么多,下面來(lái)看看在獲取到每一幀時(shí)對(duì)圖像的處理跟識(shí)別

再看看FaceThread做的Bitmap轉(zhuǎn)換,Bitmap旋轉(zhuǎn)及對(duì)Bitmap是否有人臉的識(shí)別


好了,主要邏輯就這些吧,關(guān)于FaceDetector具體使用,這是我寫(xiě)好的demo(上面演示是把demo驗(yàn)證沒(méi)問(wèn)題情況拷貝到項(xiàng)目中,最終實(shí)現(xiàn)需要按照你的需求來(lái)。演示地址)
最后給一個(gè)忠告,在開(kāi)發(fā)中遇到完全不熟悉的api最好去找google的實(shí)現(xiàn)的demo看效果,看代碼的實(shí)現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中TextView限制最大行數(shù)并在最后用顯示...全文
TextView在android開(kāi)發(fā)中是一個(gè)經(jīng)常用到的基礎(chǔ)控件,功能也很強(qiáng)大,限制輸入字符類型,字?jǐn)?shù)什么的,下面這篇文章主要給大家介紹了關(guān)于Android中TextView限制最大行數(shù)并在最后用顯示...全文的相關(guān)資料,需要的朋友可以參考下2022-04-04
Android DataBinding單向數(shù)據(jù)綁定深入探究
看了谷歌官方文章確實(shí)寫(xiě)的太簡(jiǎn)略了,甚至看完之后有很多地方還不知道怎么回事兒或者怎么用,那么接下來(lái)我將通過(guò)文章全面介紹一下DataBinding單向數(shù)據(jù)綁定2022-11-11
Android事件分發(fā)之View事件處理關(guān)鍵及示例分析
這篇文章主要為大家介紹了Android事件分發(fā)之View事件處理關(guān)鍵及示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實(shí)現(xiàn))
這篇文章主要介紹了Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實(shí)現(xiàn)),需要的朋友可以參考下2017-04-04
Android編程之在SD卡上進(jìn)行文件讀寫(xiě)操作實(shí)例詳解
這篇文章主要介紹了Android編程之在SD卡上進(jìn)行文件讀寫(xiě)操作的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android的文件操作及針對(duì)SD卡的存取操作相關(guān)技巧,需要的朋友可以參考下2015-12-12
Android自定義ViewGroup嵌套與交互實(shí)現(xiàn)幕布全屏滾動(dòng)
這篇文章主要為大家介紹了Android自定義ViewGroup嵌套與交互實(shí)現(xiàn)幕布全屏滾動(dòng)效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
ViewPager頂部導(dǎo)航欄聯(lián)動(dòng)效果(標(biāo)題欄條目多)
這篇文章主要介紹了ViewPager頂部導(dǎo)航欄聯(lián)動(dòng)效果,代碼簡(jiǎn)單易懂,感興趣的朋友參考下吧2016-08-08

