Android|基于Opecv+MTCNN+FaceNet的人脸识别实现
项目地址:
https://github.com/Monologuethl/Android_Facenet_Recognition
参考代码:
-
增加了 初始化(提取特征得到特征库) 增加了 录入照片功能 增加了 实时识别功能
-
开发平台: 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实时人脸检测的代码里就可以了
- https://github.com/jiangdongguo/OpenCV4Android
- http://blog.****.net/andrexpert/article/details/78992490