Dlib C++ Library に付属のサンプルプログラムで顔検出を行う(Ubuntu 上)

サイト内の関連ページ

用語説明

Ubuntu を使うとして手順を説明する.

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行.

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に確実に反映させるために再起動
sudo shutdown -r now

いくつかのパッケージのインストール

sudo apt install libx11-dev

DLib のインストール(Ubuntu 上)

DLib のインストール(Ubuntu 上): 別ページ »で説明

画像ファイルの準備

謝辞:このページでは,画像ファイルは Dlib 付属の画像ファイルを使用します.感謝します.

次で公開されている顔画像ファイル 2007_007763.jpg をダウンロードして使用する.

https://github.com/davisking/dlib/tree/master/examples/faces

検出された顔領域の矩形領域を標準出力に表示

dlib C++ Library を用いて、静止画から顔検出を行う。このプログラムは、画像内の顔を検出し、その矩形領域の座標を標準出力に表示する。第1引数が0以外の場合は、検出結果を画像ウィンドウに赤枠で表示する。

#include<dlib/image_processing/frontal_face_detector.h>
#include<dlib/gui_widgets.h>
#include<dlib/image_io.h>
#include<iostream>

using namespace dlib;
using namespace std;

int main(int argc, char** argv)
{
  frontal_face_detector detector = get_frontal_face_detector();
  array2d<unsigned char> img;
  load_image(img, argv[2]);
  pyramid_up(img);
  std::vector<rectangle> dets = detector(img);
  std::vector<rectangle>::iterator it;
  for( it = dets.begin(); it != dets.end(); it++ )
    cout << *it << endl;

  if ( atoi(argv[1]) != 0 ) {
    image_window win;
    win.clear_overlay();
    win.set_image(img);
    win.add_overlay(dets, rgb_pixel(255,0,0));
    cin.get();
  }
}

上のソースコードを,a.cppのようなファイル名で保存し, 次の手順でビルドして実行

g++ -I/usr/local/include a.cpp -L/usr/local/lib -ldlib -lpthread -lX11
./a.out 0 2007_007763.jpg
./a.out 1 2007_007763.jpg

第1引数は画像ウィンドウの表示制御(0: 非表示、0以外: 表示)、第2引数は入力画像ファイルのパスである。