Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

OpenFaceをUbuntuで利用

皆さん。OpenFaceはご存知でしょうか?
OpenFaceとは、
「ディープニューラルネットワークにより顔認証を行うオープンソース
です。

AWS等にてクラウド上で人物認証や表情認識が実現できる時代ですが、、、
 ・自前のPCで簡単に顔認証が試せる
 ・クラウド環境が不要
の理由で、少し試してみようと思い立ちました。
、、、が思いのほかOpenFace導入に苦労したため、手順も併せてまとめられれば、と思っております。



①OpenFaceとは

Carnegie Mellon University.のBrandon Amos氏が作成している、
ディープニューラルネットワークを用いた顔認証に特化したオープンソースになります。
PythonおよびTorch実装であり、CVPR 2015に基づいているとのこと。
下記にアルゴリズムの概要やリリースノートがまとめられております。
https://cmusatyalab.github.io/openface/


OpenFaceのアルゴリズムですが、
 (1)dlibまたはOpenCVによる事前トレーニングされたモデルで顔を検出
 (2)OpenCVのアフィン変換とdlibのリアルタイムポーズ推定を利用して顔内の目と下唇の位置が同一となるように変換
 (3)ディープニューラルネットワークを用いて128次元のユニット超球上の顔を表現(または埋め込み)を行い、クラスタリング、類似性検出、および分類タスクにより顔認識を行う
とのことです。
む、、、難しい。。。理解が追い付かない。。。
一旦そういうものだと思って、、、まずはOpenFaceを使うことに注力したいと思います!!

②OpenFaceの導入

では、実際にOpenFaceをPCに入れて動作させてみましょう!!
まず、使用したPCスペックやOSですが、下記となります。
 ・CPU:Intel(R) Core(TM)i7-7500 CPU@2,70GHz 2.90GHz
 ・メモリ:8.00GB
 ・OS:Ubuntu 16.04.2 LTS (Windows Subsystem for Linuxを利用)

次にOpenFaceを導入するための環境をセットアップしていきます。
セットアップには下記手順を用いました。
blog.goo.ne.jp

基本的に本手順で導入出来たのですが、
Torch用のLUAパッケージをインストール時に下記エラーとなりインストール失敗。。。

Error: No results matching query were found.

色々試行錯誤したところ、そもそもluarocksがうまくインストールできていないことが分かったため、
次節にてluarocksのインストール~LUAパッケージインストールまでをまとめる。

③luarocksのインストール

Web上で調べまくったところ、どうやら

$ sudo apt-get install lua5.1
$ sudo apt-get install luarocks

でインストールできるとの記事を見つけたため実施。
nobu19800.github.io

そして、再度LUAパッケージインストール実行!!
。。。現象変わらず。。。
どうやら、 luarocksソースをダウンロードし自分でmakeする必要があった模様。
下記手順でluarocksのインストールまでを実施。

# luarocksをビルドするのにlua**が必要になるため事前にインストール.
$ sudo apt-get install lua5.3
$ sudo apt-get install lua5.3-dev

#luarocksをインストール
$ mkdir luarocks
$ cd luarocks
$ wget https://luarocks.org/releases/luarocks-3.3.1.tar.gz
$ tar -xf luarocks-3.3.1.tar.gz
$ cd luarocks-3.3.1
$ ./configure
$ make
$ make install

#LUAパッケージインストール
$ for NAME in dpnn nn optim optnet csvigo cutorch cunn fblualib torchx tds image nngraph; do sudo luarocks install $NAME; done

これでOpenFaceがインストール出来た!!
luarocksでかなりはまって苦労した。。。

④OpenFaceを実際に動かしてみる

今回はcompare.pyを用いて、2枚の写真で写っている人物が同一か別人物かを判定した。

#異なる写真で実行
$ cd openface/demos
$ python3 compare.py 写真1 写真2

#下記が出力結果
  + Squared l2 distance between representations: 1.134

#同一写真で実行
$ cd openface/demos
$ python3 compare.py 写真1 写真1

#下記が出力結果
  + Squared l2 distance between representations: 0.000

0に近いほど同一人物と判定しています。

以上、OpenFaceによる人物検知でした。
判定までに時間を要するけど、AWS等使用せずに顔認識できるので、顔認証システム作って遊ぶには便利!!
OpenFaceを用いたシステム作ってみようかな?