初めてOpenFaceを開いて人の顔の画像の対比をします

6318 ワード

一.pythonのインストール
二.gitのインストール
sudo apt-get install git

三.c++標準ライブラリのインストール
sudo apt-get install libboost-dev
sudo apt-get install libboost-python-dev

四.OpenFaceコードのダウンロード
git clone https://github.com/cmusatyalab/openface.git

五.OpenCVインストール
sudo apt-get install libopencv-dev
sudo apt-get install python-opencv

六.パッケージ管理ツールpipのインストール
sudo apt install python-pip

エラーが発生したらpipを更新します
pip install --upgrade pip

pipアップグレード後のImport Error:cannot import name main
方法1:
sudo gedit /usr/bin/pip

元のfrom pip import mainをfrom pip._に置き換えます.internal import main
方法2:
sudo gedit /usr/bin/pip

もとのfrom pip import main if __name__ == '__main__':   sys.exit(main())
置換:
from pip import __main__ if __name__ == '__main__':     sys.exit(__main__._main())
注意:それでもエラーが発生した場合はpipを再ロードします.
pip install pyopenssl

七.依存PYTHONライブラリのインストール
cd openface
sudo pip install -r requirements.txt
sudo pip install dlib
sudo pip install matplotlib

八.luarocks-Luaパッケージマネージャをインストールし、Luaパッケージ依存、サードパーティLuaパッケージのインストールなどの機能を管理するコマンドラインを提供します.
sudo apt-get install luarocks

九.TORCH-科学計算フレームワークをインストールし、機械学習アルゴリズムをサポートする
git clone https://github.com/torch/distro.git ~/torch --recursive
cd torch
bash install-deps
./install.sh

十.torch 7で設定した先ほどの環境変数を有効にします.
source ~/.bashrc

十一.依存LUAライブラリのインストール
luarocks install dpnn

次はオプションで、関数やメソッドが使用される場合があります.
luarocks install image
luarocks install nn
luarocks install graphicsmagick
luarocks install torchx
luarocks install csvigo

十二.OpenFaceコードのコンパイル
python setup.py build
sudo python setup.py install

十三事前トレーニング後のデータのダウンロード
cd openface
./models/get-models.sh

ここまでインストールすべてがうまくいけばインストールが完了しても
demo
コードlogpy
このコードは、別のpyコード呼び出しのために、端末が出力情報を印刷するように構成するために使用される.
import logging
import sys

#   logger  ,         root logger
logger = logging.getLogger('Test')
#   logger    
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
#     
# file_handler = logging.FileHandler("test.log")
# file_handler.setFormatter(formatter)  #     setFormatter      
#      
console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = formatter  #       formatter  
#  logger        
# logger.addHandler(file_handler)
logger.addHandler(console_handler)
#            ,   WARN  
logger.setLevel(logging.INFO)

face_compare.py
ここでは実際に顔をマッチングするコードです.
import time
start = time.time()

import cv2
import itertools
import os
import numpy as np
import openface
import argparse
from log import logger

dlib_model_dir = '/home/xhb/  /Packages/openface/models/dlib'
openface_model_dir = '/home/xhb/  /Packages/openface/models/openface'

parser = argparse.ArgumentParser()
parser.add_argument('imgs', type=str, nargs='+', help='Input images.')
parser.add_argument('--dlibFacePredictor', type=str, help="Path to dlib's face predictor.", default=os.path.join(dlib_model_dir, "shape_predictor_68_face_landmarks.dat"))
parser.add_argument('--networkModel', type=str, help="Path to Torch network model.", default=os.path.join(openface_model_dir, 'nn4.small2.v1.t7'))
parser.add_argument('--imgDim', type=int, help="Default image dimension.", default=96)
parser.add_argument('--verbose', action='store_true')

args = parser.parse_args()

if args.verbose:
    logger.info("Argument parsing and loading libraries took {} seconds.".format(time.time() - start))

start = time.time()
align = openface.AlignDlib(args.dlibFacePredictor)
net = openface.TorchNeuralNet(args.networkModel, args.imgDim)
if args.verbose:
    logger.info("Loading the dlib and OpenFace models took {} seconds.".format(
        time.time() - start))

def getRep(imgPath):
    if args.verbose:
        logger.info("Processing {}.".format(imgPath))
    bgrImg = cv2.imread(imgPath)
    if bgrImg is None:
            raise Exception("Unable to load image: {}".format(imgPath))
    rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB)

    if args.verbose:
            logger.info("Original size: {}".format(rgbImg.shape))   

    start = time.time()
    faceBoundingBox = align.getLargestFaceBoundingBox(rgbImg)
    if faceBoundingBox is None:
        raise Exception("Unable to find a face: {}".format(imgPath))
    if args.verbose:
        logger.info("Face detection took {} seconds.".format(tim.time() - start))

    start = time.time()
    alignedFace = align.align(args.imgDim, rgbImg, faceBoundingBox, landmarkIndices=openface.AlignDlib.OUTER_EYES_AND_NOSE)     
    if alignedFace is None:
        raise Exception("Unable to align image: {}".format(imgPath))
    if args.verbose:
        logger.info("Face alignment took {} seconds.".format(time.time() - start))

    start = time.time()
    rep = net.forward(alignedFace)  
    if args.verbose:
        logger.info("OpenFace forward pass took {} seconds.".format(time.time()-start))
        logger.info("Representation:")
        logger.info(rep)

    return rep

for (img1, img2) in itertools.combinations(args.imgs, 2):
    distance = getRep(img1) - getRep(img2)
    logger.info("Comparing {} with {}.".format(img1, img2))
    logger.info("Squared l2 distance between representations: {:0.3f}".format(np.dot(distance, distance)))

注:このコードでは、次のパラメータを変更します.
dlib_model_dir = '/home/xxx/openface/models/dlib' openface_model_dir = '/home/xxx/openface/models/openface'
十四:運転
2枚の図を比較します.
python ./demos/compare.py   test_images/3.jpg  test_images/4.jpg 

フォルダ内のすべての画像を比較します.
python ./face_compare.py test_images/*