人脸识别FaceNet+TensorFlow
一、本文目标
利用facenet源码实现从摄像头读取视频,实时检测并识别视频中的人脸。换句话说:把facenet源码中contributed目录下的real_time_face_recognition.py运行起来。
二、需要具备的条件
1、准备好的Tensorflow环境
2、摄像头(可用视频文件替代)
3、准备好的facenet源码并安装依赖包
4、训练好的人脸检测模型
5、训练好的人脸识别分类模型
三、准备工作
1、搭建Tensorflow环境
如何编译搭建见《Ubuntu16.04+TensorFlowr1.12环境搭建指南》。
2、准备摄像头
如果使用虚拟机,首先确保摄像头连接的虚拟机,连接方式见下图:

摄像头连接的虚拟机成功后,在/dev目录下会看到video0文件,需要确保当前用户有摄像头的访问权限:
sudo chown jack:jack /dev/video0
如果没有摄像头,可用视频文件替代,只需将real_time_face_recognition.py中
video_capture = cv2.VideoCapture(0)
这行代码替换为:
video_capture = cv2.VideoCapture(VIDEOPATH)
事实上,在虚拟上使用摄像头做实时视频流的人脸识别,很可能会出现“select timeout”错误,这是由于CPU的处理能力不知导致,这时也可以用视频来替代摄像头来进行实验。
建议在HOST上安装xshell+xmanager来访问虚拟机,显示人脸检查的视频窗口建议xmanager配合xshell使用(具体安装方式不再赘述,使用XShell建立连接时,设置连接属性,在 SSH --> tunneling 选项下勾选 Forward X11 connections to: Xmanager)。也可以直接在虚拟机的terminal中运行real_time_face_recognition.py,而无需安装xmanager。
3、准备好的facenet源码并安装依赖包
(1)下载源码
cd /data
git clone https://github.com/davidsandberg/facenet.git
cd facenet
(2)设置PYTHONPATH
sudo vi ~/.bashrc
在文件最后添加:
export PYTHONPATH =/data/facenet/src
source ~/.bashrc
(3)安装依赖包
workon tfenv
pip install -U –-upgrade pip
pip install -U h5py matplotlib==2.2.3 Pillow requests psutil opencv-python
(4)准备源码
为了跟tensorflow r1.12兼容,需要需要facenet.py源码中
create_input_pipeline函数,在函数的第一行添加
with tf.name_scope("tempscope"):
添加后,别忘了后面的代码缩进哦。
4、准备人脸检测模型
直接从https://drive.google.com/file/d/1EXPBSXwTaqrSC0OhUdXNmKSh9qJUQ55-/view下载已经训练好的模型20180402-114759,国内需要FQ才能下载,不FQ大概率可以搜索从国内某些网盘上下载。文件大约4GB,建议用迅雷等工具下载。文件解压到/data/models目录,解压后文件如下:
20180402-114759.pb
model-20180402-114759.ckpt-275.data-00000-of-00001
model-20180402-114759.ckpt-275.index
model-20180402-114759.meta
5、训练人脸识别分类模型
(1)从http://vis-www.cs.umass.edu/lfw/lfw.tgz下载LFW数据集到/data/datasets目录
cd /data/datasets
mkdir -p lfw/raw
tar xvf lfw.tgz -C lfw/raw --strip-components=1
(2) 训练分类模型
对齐LFW 数据集:
workon tfenv
cd /data/facenet
for N in {1..4}; do \
python src/align/align_dataset_mtcnn.py \
/data/datasets/lfw/raw \
/data/datasets/lfw/lfw_mtcnnpy_160 \
--image_size 160 \
--margin 32 \
--random_order \
--gpu_memory_fraction 0.25 \
& done
训练分类模型:
python src/classifier.py TRAIN \
/data/datasets/lfw/lfw_mtcnnpy_160 \
/data/models/20180402-114759/20180402-114759.pb \
/data/models/lfw_classifier.pkl \
--batch_size 1000 \
--min_nrof_images_per_class 40 \
--nrof_train_images_per_class 35 \
--use_split_dataset
四、运行人脸识别
配置检测模型和分类模型,修改face.py文件
facenet_model_checkpoint = os.path.dirname(__file__) + "/../model_checkpoints/20170512-110547"
classifier_model = os.path.dirname(__file__) + "/../model_checkpoints/my_classifier_1.pkl"
为:
facenet_model_checkpoint = "/data/models/20180402-114759"
classifier_model ="/data/models/lfw_classifier.pkl"
运行人脸识别代码了!祝你好运!
workon tfenv
cd /data/facenet/contributed
python real_time_face_recognition.py
如果顺利的话,应该看到小视频窗口了,人脸会被框出来,并在旁边显示识别的人名。
到这里,FaceNet人脸识别的“hello world”算是实现了,对于人脸检测、人脸识别、性别识别、情感识别、年龄识别、embedding提取、landmark提取,人脸对齐,并在生产实践中应用,这仅仅是第一步。
上面识别出的人名肯定是不准确的,这是为什么呢?算是留下的思考题,大家自己动手试试,让上面的人脸识别准确。推荐研读facenet的源码和wifi:
https://github.com/davidsandberg/facenet/
https://github.com/davidsandberg/facenet/wiki
人脸识别FaceNet+TensorFlow的更多相关文章
- TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集
TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集 前提是TensorFlow环境以及相关的依赖环境已经安装,可以正常运行. 一.下载FaceNet源代码工程 git clone ...
- 第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)
在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐 ...
- olivettifaces数据集实现人脸识别代码
数据集: # -*- coding: utf-8 -*- """ Created on Wed Apr 24 18:21:21 2019 @author: 92958 & ...
- facenet 进行人脸识别测试
1.简介:facenet 是基于 TensorFlow 的人脸识别开源库,有兴趣的同学可以扒扒源代码:https://github.com/davidsandberg/facenet 2.安装和配置 ...
- facenet 人脸识别(一)
前言 已完成TensorFlow Object Detection API环境搭建,具体搭建过程请参照: 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系 ...
- TensorFlow人脸识别
TensorFlow框架做实时人脸识别小项目(一)https://blog.csdn.net/Goerge_L/article/details/80208297 TensorFlow框架做实时人脸识别 ...
- facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...
- 学习笔记TF058:人脸识别
人脸识别,基于人脸部特征信息识别身份的生物识别技术.摄像机.摄像头采集人脸图像或视频流,自动检测.跟踪图像中人脸,做脸部相关技术处理,人脸检测.人脸关键点检测.人脸验证等.<麻省理工科技评论&g ...
- 项目总结二:人脸识别项目(Face Recognition for the Happy House)
一.人脸验证问题(face verification)与人脸识别问题(face recognition) 1.人脸验证问题(face verification): 输入 ...
随机推荐
- VCFtools
The C++ executable module examples This page provides usage examples for the executable module. Exte ...
- sqlserver 实时同步(发布订阅)
配置发布订阅手册 不同版本须知:https://www.sqlmanager.net/en/articles/1548 向后兼容性:参考https://docs.microsoft.com/zh-cn ...
- bzoj 1101 zap 莫比乌斯
1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给 ...
- js命令模式
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 从命令模式的结构图可以看出,它涉及到五个角色,它们分别是 ...
- Struts2学习(2)
1.结果嗯配置 (1)全局结果页面 (2)局部结果页面 (3)result标签type属性 2.在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletAc ...
- review33
当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称为“主线程”(main线程),该线程负责执行main方法.那么在main方法执行中再创建的其他线程就称为程序中的其他线程. 如果ma ...
- ipconfig | find /i "ipv4"
C:\Users\Bob>ipconfig|find /i "IPv" 本地链接 IPv6 地址. . . . . . . . : fe80::d495:6e3:6368 ...
- 奔跑吧,OpenStack现场分享:超融合架构如何抹平物理硬件差异?
转自:https://www.ustack.com/blog/moping/ “通过引入OpenStack这一中间层,实现了云平台统一的管理调度支配向上交付,解决了业务的灵活性问题.但是在抹平下层物理 ...
- Python - 批量改变文件名
import osimport sysimport datetime path = "E:\python_test"datename = '2016-02-11'a = datet ...
- IDEA+testng,输出没有test-output目录
参考:http://www.cnblogs.com/veitch-623/p/6192601.html 在Edit Configurations里 使用默认报告就行