Android FaceDetector實(shí)現(xiàn)人臉檢測(cè)功能
關(guān)于人臉檢測(cè)被折磨了半個(gè)月,前2周開需求會(huì)時(shí)需要要做一個(gè)“人臉認(rèn)證上傳功能,具體是打開前置攝像頭,識(shí)別出用戶的臉并且臉在一個(gè)指定的圓圈內(nèi)然后自動(dòng)保存這個(gè)狀態(tài)的圖像待用戶是否確定上傳”。聽到這個(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)架師說死。然后我還搜過其它的第三方庫(kù)(虹軟,face++,阿里云人臉檢測(cè))這幾款都不是省油的燈一款需要兼容android5.0以上,其它2款都是收費(fèi)版,至于阿里云更厲害了不支持離線檢測(cè)。
后來才選擇了google自帶api,網(wǎng)上一搜發(fā)現(xiàn)google 的一個(gè)類android.hardware.Camera里面有已經(jīng)幫你封裝好的人臉檢測(cè)的api有這方面了解的同學(xué)可以參考一下點(diǎn)擊打開鏈接。我開始也是使用這種方式實(shí)現(xiàn)的,磕磕碰碰的寫完后最終發(fā)現(xiàn)合乎需求,后來自己打算測(cè)試一下機(jī)子兼容性,拿了一臺(tái)華為機(jī)子一測(cè)試,發(fā)現(xiàn)人臉的那個(gè)接口沒有任何回調(diào)(nexus6P調(diào)用還會(huì)發(fā)現(xiàn)閃退,打log發(fā)現(xiàn)是ndk層拋出來的),心馬上沉入谷底。
最后發(fā)現(xiàn)好像沒有啥捷徑可走了,只好老實(shí)實(shí)使用android.media.FaceDetector進(jìn)行開發(fā)。這種方式的使用的思路是,使用Camera+TextureView(鑒于對(duì)開發(fā)時(shí)間緊,對(duì)已過時(shí)有點(diǎn)了解就沒有使用Camera2)進(jìn)行預(yù)覽,通過設(shè)置PreviewCallback實(shí)時(shí)抓取每一幀圖像進(jìn)行檢測(cè)是否合格。圖像預(yù)覽本人推薦google關(guān)于Camera使用demo進(jìn)行修改,因?yàn)樵趯?shí)際中有很多機(jī)型未必都能合乎預(yù)想(本人也確實(shí)被坑過,自己封裝的Camera發(fā)現(xiàn)跑在一些機(jī)子上圖像方向是反向的。當(dāng)然如果對(duì)Camera很熟悉那也是可以自己寫的)。好了啰嗦了一大堆下面來看看正題
先看看集成到app里面的實(shí)際效果
這里說明不是APP卡,我用的錄屏軟件共享桌面時(shí)一卡一卡的
首先圖像預(yù)覽改自google demo,demo拿過來是不能直接使用的,里面需要自己手動(dòng)添加每一幀的回調(diào),代碼如下(這里直接貼圖了,更直觀,稍后我會(huì)把demo發(fā)出來)
google CameraDemo主要改了這么多,下面來看看在獲取到每一幀時(shí)對(duì)圖像的處理跟識(shí)別
再看看FaceThread做的Bitmap轉(zhuǎn)換,Bitmap旋轉(zhuǎn)及對(duì)Bitmap是否有人臉的識(shí)別
好了,主要邏輯就這些吧,關(guān)于FaceDetector具體使用,這是我寫好的demo(上面演示是把demo驗(yàn)證沒問題情況拷貝到項(xiàng)目中,最終實(shí)現(xiàn)需要按照你的需求來。演示地址)
最后給一個(gè)忠告,在開發(fā)中遇到完全不熟悉的api最好去找google的實(shí)現(xiàn)的demo看效果,看代碼的實(shí)現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中SeekBar拖動(dòng)條使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android中SeekBar拖動(dòng)條使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03Android開發(fā) -- 狀態(tài)欄通知Notification、NotificationManager詳解
本文主要講解狀態(tài)欄通知Notification、NotificationManager,小編覺得非常詳細(xì),給大家一個(gè)參考,希望對(duì)大家學(xué)習(xí)有所幫助。2016-06-06談?wù)凙ndroid開發(fā)之RecyclerView的使用全解
這篇文章主要介紹了談?wù)凙ndroid開發(fā)之RecyclerView的使用全解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12Android自定義StickinessView粘性滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義StickinessView粘性滑動(dòng)效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android 實(shí)現(xiàn)釘釘自動(dòng)打卡功能
這篇文章主要介紹了Android 實(shí)現(xiàn)釘釘自動(dòng)打卡功能的步驟,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03