ubuntu16.04環境下安裝配置openface人臉識別程序


參考http://blog.csdn.net/weixinhum/article/details/77046873

最近項目需要用到人臉訓練和檢測的東西,選用了OpenFace進行,因而有此文。

  本人主要參考了下面的這兩篇博客:

  《ubuntu 16.04 LTS使用開源面部識別庫Openface》

  《ubuntu 16.04 LTS上安裝Torch7》

  如有雷同,絕非偶然。

  1.python

   Ubuntu 16.04桌面版自帶python

  2.git

$ sudo apt-get install git
  • 1

  3.編譯工具CMake

$ sudo apt-get install cmake
  • 1

  4.C++標准庫安裝

$ sudo apt-get install libboost-dev $ sudo apt-get install libboost-python-dev
  • 1
  • 2

  5.下載OpenFace代碼

$ git clone https://github.com/cmusatyalab/openface.git
  • 1

  6.OpenCV安裝

$ sudo apt-get install libopencv-dev $ sudo apt-get install python-opencv
  • 1
  • 2

  7.安裝包管理工具pip

$ sudo apt install python-pip
  • 1

   更新pip,按上面安裝不知道為什么是舊的版本,可能影響下面的操作

$ pip install --upgrade pip
  • 1

  8.安裝依賴的 PYTHON庫

$ cd openface $ sudo pip install -r requirements.txt $ sudo pip install dlib $ sudo pip install matplotlib 
  • 1
  • 2
  • 3
  • 4
  • 5

  9.安裝 luarocks—Lua 包管理器,提供一個命令行的方式來管理 Lua 包依賴、安裝第三方 Lua 包等功能

$ sudo apt-get install luarocks
  • 1

  10.安裝 TORCH—科學計算框架,支持機器學習算法 

$ git clone https://github.com/torch/distro.git ~/torch --recursive $ cd torch $ bash install-deps $ ./install.sh
  • 1
  • 2
  • 3
  • 4

   使 torch7 設置的剛剛的環境變量生效

$ source ~/.bashrc
  • 1

  這里只安裝了CPU版本,后面如果需要再更新CUDA的使用方法

  11.安裝依賴的 LUA庫 

$ luarocks install dpnn
  • 1

   下面的為選裝,有些函數或方法可能會用到

$ luarocks install image $ luarocks install nn $ luarocks install graphicsmagick $ luarocks install torchx $ luarocks install csvigo
  • 1
  • 2
  • 3
  • 4
  • 5

  12.編譯OpenFace代碼

$ python setup.py build $ sudo python setup.py install
  • 1
  • 2

  13.下載預訓練后的數據

$ sh models/get-models.sh $ wget https://storage.cmusatyalab.org/openface-models/nn4.v1.t7 -O models/openface/nn4.v1.t7
  • 1
  • 2

 ————————-到此配置完成,下面是簡單的例子————————-

  可以用compare.py(demo文件夾中)給出的示例檢測兩張臉的相近程度。

$ python demos/compare.py {3.jpg*,4.jpg*}
  • 1

  1.jpg

這里寫圖片描述

  2.jpg

這里寫圖片描述

  3.jpg

這里寫圖片描述

  4.jpg

這里寫圖片描述

  結果如下

這里寫圖片描述

  可以看到,相同人物之間的距離明顯比不同人物要小。

注:在運行時,最好加上圖片路徑(將需要測試的圖片上傳到images文件夾)

python demos/compare.py ./images/{1.jpeg*,2.jpeg*}

上傳命令:

scp 1.jpeg yanjieliu@192.168.1.139:/home/yanjieliu/opt/openface/images/

 

  另外也可以像開始提到的參考文章中一樣,寫一個檢測人臉的程序進行檢測,名稱為face_detect.py,代碼如下:

import argparse
import cv2
import os
import dlib

import numpy as np
np.set_printoptions(precision=2)
import openface

from matplotlib import cm

fileDir = os.path.dirname(os.path.realpath(__file__))
modelDir = os.path.join(fileDir, '..', 'models')
dlibModelDir = os.path.join(modelDir, 'dlib')

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--dlibFacePredictor',
        type=str,
        help="Path to dlib's face predictor.",
        default=os.path.join(
            dlibModelDir,
            "shape_predictor_68_face_landmarks.dat"))
    parser.add_argument(
        '--networkModel',
        type=str,
        help="Path to Torch network model.",
        default='models/openface/nn4.v1.t7')
    # Download model from:
    # https://storage.cmusatyalab.org/openface-models/nn4.v1.t7
    parser.add_argument('--imgDim', type=int,
                        help="Default image dimension.", default=96)
    # parser.add_argument('--width', type=int, default=640)
    # parser.add_argument('--height', type=int, default=480)
    parser.add_argument('--width', type=int, default=1280)
    parser.add_argument('--height', type=int, default=800)
    parser.add_argument('--scale', type=int, default=1.0)
    parser.add_argument('--cuda', action='store_true')
    parser.add_argument('--image', type=str,help='Path of image to recognition')

    args = parser.parse_args()
    if (None == args.image) or (not os.path.exists(args.image)):
    print '--image not set or image file not exists'
    exit()

    align = openface.AlignDlib(args.dlibFacePredictor)
    net = openface.TorchNeuralNet(
        args.networkModel,
        imgDim=args.imgDim,
        cuda=args.cuda)

    cv2.namedWindow('video', cv2.WINDOW_NORMAL)

    frame = cv2.imread(args.image)  
    bbs = align.getAllFaceBoundingBoxes(frame)
    for i, bb in enumerate(bbs):
    # landmarkIndices set  "https://cmusatyalab.github.io/openface/models-and-accuracies/"
        alignedFace = align.align(96, frame, bb,
                                      landmarkIndices=openface.AlignDlib.OUTER_EYES_AND_NOSE)
        rep = net.forward(alignedFace)

        center = bb.center()
        centerI = 0.7 * center.x * center.y / \
                (args.scale * args.scale * args.width * args.height)
        color_np = cm.Set1(centerI)
        color_cv = list(np.multiply(color_np[:3], 255))

        bl = (int(bb.left() / args.scale), int(bb.bottom() / args.scale))
        tr = (int(bb.right() / args.scale), int(bb.top() / args.scale))
        cv2.rectangle(frame, bl, tr, color=color_cv, thickness=3)

    cv2.imshow('video', frame)

    cv2.waitKey (0)  

    cv2.destroyAllWindows()
View Code

 

2019.1101更新

在安裝torch時遇到問題,未安裝成功,按照教程https://blog.csdn.net/jainszhang/article/details/82777762

使用如下命令安裝

sudo su
export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
bash install-deps
yes | bash ./install.sh

然后運行th命令,發現安裝成功。

最后運行openface demo時報錯:/usr/bin/env: "th": 沒有那個文件或目錄

根據教程https://blog.csdn.net/MONKEY3233/article/details/71083699

應該是通過su安裝的torch無法在openface中使用,待解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM