Android|基於Opecv+MTCNN+FaceNet的人臉識別實現

項目地址:
https://github.com/Monologuethl/Android_Facenet_Recognition
參考代碼:

  • https://github.com/vcvycy/Android_Facenet

  • https://github.com/jiangdongguo/OpenCV4Android
    在這裏插入圖片描述
    新增加功能:

  • 增加了 初始化(提取特徵得到特徵庫) 增加了 錄入照片功能 增加了 實時識別功能

  • 開發平臺: rk3399開發板,Android 7.1.2, IDE: Android Studio 3.1.2

  • 由於模型沒有做壓縮速度偏慢,模型也是用到其他人訓練好的,所以準確率感人。。

  • 人臉檢測用到opencv 直接用的檢測demo,得到臉部位置,送給facenet提取特徵,於特徵庫比較(歐式距離),得到相似度。

  • 錄入功能用到mtcnn捕捉人臉後,存入臉部照片,其實可以增加一個輸入照片信息的框和得到照片提取照片存入特徵庫。

  • 後續工作 優化識別的速度,模型壓縮,增加活體識別。

  • 導師是想讓我用ncnn或者tengine去實現,但是不會弄就用了tensorflow lite。

Android_Facenet

  • Facenet for Android.

  • 編譯環境:Android 3.1.2

  • 人臉檢測:MTCNN類用法 (MTCNN.Java)

  • 類實例化 MTCNN mtcnn=new MTCNN(getAssets())
    只有1個API:public Vector detectFaces(Bitmap bitmap,int minFaceSize)
    參數bitmap:要處理的圖片
    參數minFaceSize:最小的臉像素值,一般>=40。越大則檢測速度越快,但會忽略掉較小的臉
    返回值:所有的臉的Box,包括left/right/top/bottom/landmark(一共5個點,嘴巴鼻子眼)
    人臉識別:FACENET類用法

  • FACENET facenet=new FACENET(getAssets())
    只有一個API:public FaceFeature recognizeImage(Bitmap bitmap)
    參數bitmap:要提取特徵的人臉圖片(一般先通過MTCNN檢測人臉,然後crop出來)
    返回值:FaceFeature,人臉特徵,我簡單封裝了一下;其實就是512維的特徵向量(浮點數)

  • 人臉特徵比較:即人臉特徵向量的歐幾里得距離。見FaceFeature.compare() 主要移植自:https://github.com/davidsandberg/facenet

後續的工作就是加到opencv實時人臉檢測的代碼裏就可以了

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章