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を用いたシステム作ってみようかな?