OpenBRをインストールしてみる


# 概要
ちょっと興味があったので[OpenBR](http://openbiometrics.org/)をビルドして動かしてみる。

# OpenBR
OpenBRはOSSの生体識別ライブラリで、顔写真から年齢や性別を判別したりできる。最近だとMicrosoftのProjectOxfordで公開された[デモ](http://www.projectoxford.ai/face)が話題になっていた。

# OpenBRのインストール
[installation](http://openbiometrics.org/doxygen/latest/installation.html)をみてみると現状ソースコードからビルドするしかないようだった。Macにインストールはしたくないので適当なUbuntu環境を用意してビルドする。

# DockerでUbuntu環境を用意
## boo2dockerを起動
boo2dockerのVMが起動していないなら起動

```bash
$ boot2docker up
```

## コンテナを起動

```bash
$ docker run --name openbr -i -t ubuntu /bin/bash
```

## Ubuntuのバージョンを確認

```bash
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"
```

# OpenBRをビルド

[installation](http://openbiometrics.org/doxygen/latest/linux_gcc.html)に沿って作業を進める。

## GCCのインストール

```bash
$ sudo apt-get update
$ sudo apt-get install build-essential
```

##  CMakeのインストール

```bash
$ sudo apt-get install cmake cmake-curses-gui
```

## OpenCVのインストール

ビデオのデコードに問題出たら[ここ](https://github.com/biometrics/openbr/wiki/Build-OpenCV-with-Video-Support-on-Ubuntu)参考にしてねとあるが、取り敢えず手順通りに進める。手順ではOpenCVのバージョンが2.4.5になってるが2.4.11で試す。

OpenCVは[ここ](http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.11/)からダウンロードしてきてコンテナにボリュームをマウントするなりして渡す。

```bash
$ sudo apt-get install unzip
$ unzip opencv-2.4.11.zip
$ cd opencv-2.4.11
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j4
$ sudo make install
$ cd ../..
$ rm -rf opencv-2.4.11
```

`/usr/local/lib`以下にインストールされた。

## Qtのインストール

```bash
$ sudo apt-get install qt5-default libqt5svg5-dev qtcreator
```

## OpenBRのビルド

```bash
$ git clone https://github.com/biometrics/openbr.git
$ cd openbr
$ git checkout 0.5
$ git submodule init
$ git submodule update
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
```

ここでなぜかOpenCVがインストールされて無いと言われたので、再度OpenCVをインストール後再度cmakeを実行。

```bash
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j4
$ sudo make install
```

バージョンを確認

```bash
$ br -version
0.5.0
```

インストールできた。

# 動かしてみる

OpenBRのトップページにあるAge Estimationを実行してみる。実行例だと写真を2枚使用しているが一枚でも問題ないようだった。(metadata.csvの中身を見る限る)

```bash
$ br -algorithm AgeEstimation -enroll me.jpg metadata.csv
```

metadata.csvに結果が出力されるので見てみる。

```bash
File,Affine_0_X,Affine_0_Y,Affine_1_X,Affine_1_Y,Age,Confidence,DFFS,FTE,First_Eye_X,First_Eye_Y,FrameNumber,FrontalFace_X,FrontalFace_Y,FrontalFace_Width,FrontalFace_Height,PossibleFTE,Second_Eye_X,Second_Eye_Y
me.jpg,88,74,116,73,35.2215,1,737.614,false,88,74,0,66,47,74,74,false,116,73
```

35.2215歳か・・

# Docker imageを作成
OpenBRをインストールできたのでimageを作成しておく。

```bash
$ docker commit -m 'OpenBRをインストール' <コンテナID> horie1024/openbr_0.5
```

作成されているか確認。

```bash
$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
horie1024/openbr_0.5   latest              12abc56def        About a minute ago   5.000 GB
```

作成できた。

# Docker Hubにimageを登録する

## Docker Hubに登録

[https://hub.docker.com/account/signup/](https://hub.docker.com/account/signup/)から登録する。

![dockerhub.png](https://qiita-image-store.s3.amazonaws.com/0/43438/0de285cb-57b3-0632-6c30-e2f345f313c4.png "dockerhub.png")


## コマンドラインからログイン

```bash
$ docker login
```

以下のようなエラーが出てdocker loginに失敗する場合、`boot2docker restart`すればok。

```bash
FATA[0034] Error response from daemon: Server Error: Post https://index.docker.io/v1/users/: dial tcp: lookup index.docker.io on 192.168.13.1:50: read udp 192.168.13.1:50: i/o timeout
```

## Docker Hubに作成したimageを登録

先ほど作成したimageをpush。

```bash
$ docker push horie1024/openbr_0.5
```

登録できた。[horie1024/openbr_0.5](https://registry.hub.docker.com/u/horie1024/openbr_0.5/)

## 登録したimageを元にコンテナを作成

`docker pull`後に`docker run`すればok。

# 追記
Node.jsのバインディングがあった。https://www.npmjs.com/package/openbr


# 参考
* http://openbiometrics.org/
* http://inokara.hateblo.jp/entry/2013/09/29/002159