Dlib --- 環境準備

DlibはC++で記述された機械学習用のライブラリです。

SVMやDeep Learning等、よく聞くアルゴリズムのものは一通り準備されています。

ドキュメントやサンプルが整っているのが一番嬉しい点だと思います。

Dlibダウンロード

下記サイトよりファイル一式をダウンロードし、好きな場所に解凍してください。

dlib C++ Library
f:id:any-programming:20170317171903p:plain

ビルドせずに利用

一般的にはCMakeを利用してlibファイルを作成し、それをリンクして利用します。

他の方法として、cppをそのままプロジェクトに追加して利用することも可能です。

ビルド自体は10秒程度で終わりますので、libのVC++のバージョン管理が面倒な場合はcpp追加で利用するのもいいと思います。

今回はcppを利用する方法で進めていきます。

プロジェクトの準備

VC++のWin32コンソールプロジェクトを想定しています。

ソースに、既存のファイルの追加で、dlib解凍先/dlib/all/source.cpp を追加します。
f:id:any-programming:20170319121011p:plain

プリコンパイルのエラー回避のため、source.cppの先頭に #include "stdafx.h" を追加します。

また今回はGUIを利用しないため、#define DLIB_NO_GUI_SUPPORT も追加しておきます。

#include "stdafx.h"
#define DLIB_NO_GUI_SUPPORT

// Copyright (C) 2006  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
#ifndef DLIB_ALL_SOURCe_
#define DLIB_ALL_SOURCe_
...


最後にinclude参照先として、dlib解凍先を指定します。
f:id:any-programming:20170319121605p:plain

アプリケーションコード

今回はdlibのサンプル画像で顔認識をしてみます。

frontal_face_detectorを利用して、顔のrectangleを取得しています。

今回はdlibのjpeg読み込みをONにしていないため、bmpに変換して読み込んでいます。

source.cppに #define DLIB_JPEG_SUPPORT を追加して、さらに dlib解凍先/dlib/external/libjpeg の全cppファイルをプロジェクトに追加すればjpegを読み込めるようになりますが、ここまでくればCMakeでlibを作成する方が楽だと思います。

#include "stdafx.h"

#include "dlib\image_processing\frontal_face_detector.h"
#include "dlib\image_io.h"

int main()
{
    dlib::array2d<dlib::rgb_pixel> image;
    dlib::load_bmp(image, "C:\\lib\\dlib-19.4\\examples\\faces\\2008_001322.bmp");

    auto detector = dlib::get_frontal_face_detector();
    auto rectangles = detector(image);

    for (auto& rect : rectangles)
       dlib::draw_rectangle(image, rect, dlib::rgb_pixel(255, 0, 0), 3);

    dlib::save_bmp(image, "output.bmp");

    return 0;
}
f:id:any-programming:20170319121911j:plain f:id:any-programming:20170319121920j:plain