zoukankan      html  css  js  c++  java
  • 人脸识别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

     

  • 相关阅读:
    Codeforces Round #603 (Div. 2) E. Editor(线段树)
    Codeforces Round #603 (Div. 2) D. Secret Passwords(并查集)
    Java的DAO设计模式
    js实现本地时间同步
    循环播放
    正则表达式(2)
    正则表达式(1)
    第十八个知识点:画一个描述ECB,CBC,CTR模式的操作
    第十七个知识点:描述和比较DES和AES的轮结构
    第四十一个知识点 所有的侧信道分析都是能量分析吗
  • 原文地址:https://www.cnblogs.com/dskit/p/9941079.html
Copyright © 2011-2022 走看看