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实时人脸检测的代码里就可以了

在这里插入图片描述

Python是一种高级编程语言,并且非常适合进行人工智能领域的开发。MTCNN (多任务级联卷积神经网络) 是一种用于人脸检测、对齐和识别的深度学习模型。Facenet是一种基于卷积神经网络的人脸识别模型,该模型可以将两张不同的人脸图片转换为同一向量空间中的两个不同点。SVM(Support Vector Machine)是一种监督式学习算法,它的主要目标是将训练集中的不同类别数据分隔开来,以便将来被识别的新的样本能够被正确分类。 在这个项目中,我们使用Python编程语言和上述技术来实现人脸识别系统。首先,我们使用MTCNN对输入图像进行了人脸检测和对齐,即找到并将人脸图像转换为标准大小,然后使用Facenet来将图像转换为向量表示。 接下来,我们使用支持向量机 (SVM)算法对向量进行分类并预测所属人脸的标签。如果已知标签,则可以将标签与输出进行比对,从而确认识别结果是否正确。 在实际项目中,我们面对的是不同的人脸照片,这些照片具有各种不同的外观和表情。为了提高识别准确性,我们引入了数据增强技术,例如旋转、缩放、剪切等操作,从而增加了机器学习模型的训练数据量。此外,我们还通过t-SNE降维可视化技术来研究不同人脸图像在高维特征空间的不同分布,从而更好地理解人脸识别模型的工作原理。 总的来说,Python基于MTCNNFacenet、SVM等算法进行人脸识别项目实战,是一项非常有挑战性的任务。然而,随着深度学习技术的不断进步,越来越多的人脸识别项目可以得到解决。从这个意义上说,这项任务带给我们的启示是,通过深度学习算法和多种技术手段的结合,我们可以构建更加高效和智能的人脸识别系统。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值