一、本文目标

利用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的更多相关文章

  1. TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集

    TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集 前提是TensorFlow环境以及相关的依赖环境已经安装,可以正常运行. 一.下载FaceNet源代码工程 git clone ...

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

    在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐 ...

  3. olivettifaces数据集实现人脸识别代码

    数据集: # -*- coding: utf-8 -*- """ Created on Wed Apr 24 18:21:21 2019 @author: 92958 & ...

  4. facenet 进行人脸识别测试

    1.简介:facenet 是基于 TensorFlow 的人脸识别开源库,有兴趣的同学可以扒扒源代码:https://github.com/davidsandberg/facenet 2.安装和配置 ...

  5. facenet 人脸识别(一)

    前言 已完成TensorFlow Object Detection API环境搭建,具体搭建过程请参照: 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系 ...

  6. TensorFlow人脸识别

    TensorFlow框架做实时人脸识别小项目(一)https://blog.csdn.net/Goerge_L/article/details/80208297 TensorFlow框架做实时人脸识别 ...

  7. facenet 人脸识别(二)——创建人脸库搭建人脸识别系统

    搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...

  8. 学习笔记TF058:人脸识别

    人脸识别,基于人脸部特征信息识别身份的生物识别技术.摄像机.摄像头采集人脸图像或视频流,自动检测.跟踪图像中人脸,做脸部相关技术处理,人脸检测.人脸关键点检测.人脸验证等.<麻省理工科技评论&g ...

  9. 项目总结二:人脸识别项目(Face Recognition for the Happy House)

    一.人脸验证问题(face verification)与人脸识别问题(face recognition) 1.人脸验证问题(face verification):           输入       ...

随机推荐

  1. Python安装setuptools时报Compression requires the (missing) zlib

    装机员为您提供Python安装setuptools时报Compression requires the (missing) zlib的文章咨询供您阅读,如何使用Python安装setuptools时报 ...

  2. 【P3957】跳房子(单调队列+DP+二分)

    终于把这个题缸出来了,话说这题也不是想的那么难... 因为最小的最大,所以二分,因为由前面推出后面,所以DP,因为输入单调,朴素DP会T,所以单调队列.要注意的是,这个题数据很大,要开LL,然后DP数 ...

  3. jquery事件优化---事件委托

    假如你有一个表格,里面有大量的td 而你需要做的事就是,给td绑定点击事件函数, 那么多的td,遍历单元格和为每一个单元格绑定事件处理函数将会大大降低代码的性能, 如果让单元格的父元素监听事件,只要判 ...

  4. 第一个Python程序hello.py提示出现File "<stdin>",line 1错误

    写第一个Python程序hello.py,内容仅有一句,print 'hello world', 运行 Python hello.py 出错,提示: File "<stdin>& ...

  5. Redis学习路线

    [http://www.cnblogs.com/zhenjing/archive/2012/11/15/redis_research.html] Redis: A persistent key-val ...

  6. 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它

    dpkg应用程序被占用 错误提示: E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他 ...

  7. 机器学习(六)—随机森林Random Forest

    1.什么是随机采样? Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归): Bagging的弱学习器之间没有boosting那样的联系,不存在强依赖关系,基学习器之间属于并列 ...

  8. 1009 失恋的小 T(后缀数组¥)

    1009: 失恋的小 T 时间限制: 1 Sec  内存限制: 128 MB提交: 160  解决: 76[提交][状态][讨论版] 题目描述 小 T 最近失恋了,开始怀疑人生和爱情,他想知道在这世界 ...

  9. oracle 索引(3)

    位图索引 位图索引非常适合于决策支持系统(Decision Support System,DSS)和数据仓库,它们不应该用于通过事务处理应用程序访问的表.它们可以使用较少到中等基数(不同值的数量)的列 ...

  10. Linux_总结_02_最小化安装后需要安装和更新的命令

    一.前言 二.安装命令 1.配置yum源 2.更新yum sudo yum -y update 3.安装ifconfig 最小化安装后,是无法使用ifconfig命令的. 可参见:CentOS7下解决 ...