网上关于facenet以及Mtcnn原理的博客有很多,本文便不再赘述,如果有不明白的可以参考该博客http://www.uml.org.cn/ai/201806124.asp。

本文更多的是帮助大家使用facenet以及Mtcnn 实现人脸识别功能,这里我们利用的是Github上的一个开源项目,项目链接:https://github.com/davidsandberg/facenet

解压后得到facenet文件夹,我们把它放到主目录下,方便使用,如图:

值得注意的是如果单单git该项目的话,并不能实现功能我们还要下载其附带的预训练模型:

这里的资源是需要连接外网的,有篇博客提供了国内资源下载:https://pan.baidu.com/share/init?surl=LLPIitZhXVI_V3ifZ10XNg

密码:12mh。下载后我们会得到一个20170512-110547的压缩文件,解压后放入之前的facenet文件夹,这里我用到的是20180402-114759,不过并不影响。

到这里我们的一切项目准备工作就已经完成了,接下来我们按步骤进行。

1.给代识别的人脸建造数据库

在facenet文件夹中新建文件夹test_imgs,在文件夹下创建若干个文件夹存放若干个人的照片,形如:

每个文件夹下的照片具体是多少并没有严格要求,但是不能太少,10张以上是必须的,不然SVM分类的准确率会下降。

2.对已经建好的数据库的图片进行Mtcnn和剪裁处理

在运行之前我们要先配置python路径,在终端以此输入:

export PYTHONPATH=~/facenet/src/align

export PYTHONPATH=~/facenet/src

如果依然报缺少模块错误,就将二者顺序反一下输入,注意此处每打开一次终端就得重新输入一次,想要彻底解决,需要修改配置文件,具体见下文,接下来开始处理:

因为训练网络里所用到的图片的大小均为160x160像素,所以我们要将图片处理成对应像素,并利用Mtcnn将图片中的人脸剪裁出来。这里我们用到的代码是位于facenet/src/align中的align_dataset_mtcnn.py,具体使用方法如下。

1.进入align_dataset_mtcnn.py所在的文件夹。

2.执行上述指令,参数解析:(1).py文件(2)待处理的人脸数据库绝对路径(3)处理后的人脸数据库路径,此处给出就好,具体将由程序代码自动生成(4)--image_size 160 图像尺寸 (5)在Mtcnn检测得到的人脸的基础上缩小32像素。

执行后我们产生了如图所示的文件夹test_imgs_160:

3.利用处理好的数据库进行SVM分类,产生.pkl文件

此处我们用到了位于/facenet/src中的classifier.py文件具体使用如下图。

1.进入classifier.py所在的文件夹,已在则忽略

2.运行上述命令,参数解析(1).py文件 (2)模式选择,仔细看源码我们发现,有两种模式可供选择,这里我们选择TRAIN(训练模式)(3)待分类的人脸数据库(4)之前下载的模型,这里要替换成所下载的版本,我的是20180402-114759。(5)pkl文件所在的位置及名字,此处同样给出就好,代码会自动创建。

4.修改原项目自带的模型文件,以及.pkl文件

1.进入/facenet/contributed,打开face.py文件。

2.修改选中部分为自己的模型文件以及.pkl文件,并保存。

5.调用代码实现时实人脸识别

在facenet/contributed文件夹下运行real_time_face_recognization.py文件即可查看效果。

/----------------------------------------------------------------------------------------------------------------------------------------------------------------/

文章截止到这里就已经可以实现基本的人脸识别效果,以下内容为自己修改部分。

1.解决需要重复导入python路径问题:

回到主目录打开配置文件:

在文件最下面添加:

保存文件。

注意要根据自己的实际情况对路径作出修改!

2.原有的项目仅能对数据库中的人进行识别,而未在数据库中的人物也能识别,不符合我们的需求,所以我们对阈值做了修改

打开上文提到的face.py文件

添加a = unknow,修改阈值,如果分类的预测率 小于 设定阈值,则返回 a.

facenet + Mtcnn 实现人脸识别(实现步骤)相关推荐

  1. 人脸检测MTCNN和人脸识别Facenet(附源码)

    原文链接:人脸检测MTCNN和人脸识别Facenet(附源码) 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haa ...

  2. Centerface + Facenet实现视频人脸识别(附代码)

    Centerface + Facenet实现视频人脸识别 Facenet的pytorch版本:GitHub地址:https://github.com/timesler/facenet-pytorch ...

  3. 视觉识别入门之人脸识别——基于FACENET的高精度人脸识别

    视觉识别入门之人脸识别---- 基于FACENET的高精度人脸识别 一:项目展示: - 这是实时视频读取的展示,是可以读单张图片,或者本地视频流,抑或是实时人脸检测与分类的,至于我为什么不展示我的自拍 ...

  4. (转)第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)

    http://www.cnblogs.com/zyly/p/9703614.html 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第 ...

  5. 【项目实战】Python基于MTCNN+FaceNet+SVM进行人脸识别项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人脸识别的现代研究始于20世纪60年代末.在近20年,随着计算机 ...

  6. python人脸识别库_基于facenet的实时人脸识别系统

    facenet_facerecognition opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用o ...

  7. 基于FaceNet的实时人脸识别训练

    FaceNet人脸特征提取 FaceNet是一种用于提取人脸图像特征的深度神经网络.它由谷歌研究人员 Schroff 等人提出. 论文地址:https://arxiv.org/abs/1503.038 ...

  8. 人脸检测、人脸定位、人脸对齐、MTCNN、人脸识别(衡量人脸的相似或不同:softmax、三元组损失Triplet Loss、中心损失Center Loss、ArcFace)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) # ArcFace class ArcMarginProduc ...

  9. (转)如何应用MTCNN和FaceNet模型实现人脸检测及识别

    https://zhuanlan.zhihu.com/p/37705980 人脸检测与人脸识别 人脸检测是对人脸进行识别和处理的第一步,主要用于检测并定位图片中的人脸,返回高精度的人脸框坐标及人脸特征 ...

最新文章

  1. [Linux学习]Linux下进程通讯之共享内存
  2. GNU C之__attribute__
  3. android顶部横线动态导航
  4. Failed building wheel for netifaces
  5. git fatal: 拒绝合并无关的历史
  6. VTK:参数样条用法实战
  7. PCB设计中焊盘的种类,你都见过几种?
  8. 批量添加DNS的A记录和PTR记录
  9. python字母大小写排序_Python中sorted()排序与字母大小写的问题
  10. 产品经理学习---好产品需要用户有感知
  11. 【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
  12. 计算机组成原理(白中英)简答题复习
  13. MDM数据质量应用说明
  14. Android--设置显示大小导致APP crash
  15. Typora下载安装及使用方法
  16. 什么是时序数据?如何治理?
  17. 通达信l-2服务器文件,分享两个手机版通达信的指标源码(PC端也适用)
  18. win10系统安装到服务器失败怎么解决,windows10安装失败怎么办?解决win10安装失败的方法教程[多图]...
  19. python竖着展示诗_竖着写诗的格式
  20. Python语言零基础入门教程(一)

热门文章

  1. Knockoutjs 实践入门 (2) 绑定事件
  2. MongoDB应用篇
  3. why xml sucks
  4. [java]键盘录入数值到数组-根据数值获取角标-找出数据中最大数值-反转数组
  5. PowerSploit脚本
  6. Python之字典类型数据常见操作及排序
  7. Swift之深入解析内存管理的底层原理
  8. OpenGL ES之GLSL渲染图片显示的整体流程
  9. OpenGL之深入解析坐标系
  10. 9.Vue 表单输入绑定