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