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