のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

dlibと呼ばれる画像処理ライブラリを使ってみた

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

日本ではあまり見られないdlibと呼ばれるライブラリの画像処理ライブラリを
使ってみたいと思います。

dlibについて

dlibとは

公式サイト:dlib C++ Library

Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. It is used in both industry and academia in a wide range of domains including robotics, embedded devices, mobile phones, and large high performance computing environments. Dlib's open source licensing allows you to use it in any application, free of charge.

Dlibは現実世界の問題を解決するための複雑なソフトウェアを作るためのC++機械学習アルゴリズムやツールであり、
産業や学術の広いドメインに適用でき、オープンソースで、無料である。

実はコンピュータビジョン勉強会に参加するまではこのライブラリの存在を知らず、
そういえばあったなぁと今から使ってみる次第です。

因みにPythonのパッケージもありますが、Macでは動かなかったので諦めてC++にします。
Ubuntuだと動くらしいです。

Install方法

boostなどのその他ライブラリは入っている前提です。

git clone https://github.com/davisking/dlib
cd dlib
cd examples
mkdir build
cd build
cmake ..
cmake --build . --config Release

因みにXQuartzがないと、動作しません。そのため、ない人は以下のページからXQuartzを入れましょう。
https://www.xquartz.org/

インストール後に、シンボリックリンクを貼りましょう。

ln -s /opt/X11/include/X11 /usr/local/include/X11

そして最初のコマンドを実行するとpipを使ったインストールができます。

因みにこのライブラリ何ができるのか?

公式ホームページから引っ張ってきました。

Algorithms
API Wrappers
Bayesian Nets
Compression
Containers
Graph Tools
Image Processing
Linear Algebra
Machine Learning
Metaprogramming
Miscellaneous
Networking
Optimization
Parsing

実際にニューラルネットワークSVRなどの機械学習、画像処理、ベイジアンネットワークなど
計算、機械学習系のサポートが強力です。
SVMのCross Validationの例、ResNetの実行例などもあり、サンプルを見ると使い方はかなり見えるのではないでしょうか。

dlibの画像処理ライブラリ紹介

では、何ができるかを見てみましょう。
ソースコードの解説とかは次回以降にします。

顔の輪郭検出

顔の輪郭検出用のコードは、face_landmark_detection_exを使います。

wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
/face_landmark_detection_ex ./shape_predictor_68_face_landmarks.dat ../faces/2008_004176.jpg

f:id:tereka:20160707235319p:plain

顔検出

./face_detection_ex ../faces/2008_002470.jpg

f:id:tereka:20160707235202p:plain

Hog特徴量の計算

./fhog_ex ../faces/2008_002079.jpg

f:id:tereka:20160707235416p:plain

画像の表示

./image_ex ../faces/2008_002506.jpg

f:id:tereka:20160707235123p:plain

感想

様々なライブラリがあってC++で書く場合は
色々と楽しいことができそうな気がします。

内部的にはC++11ベースっぽいです。詳しい使い方はまた次回