Dlib入門

Dlib入門

1 概要

  • お手軽に顔のパーツを検出出来る素晴らしいライブラリ
  • 画像認識他多数の機能あり

3 インストール

  • Pythonをインストールしてから、pip install dlibで、自動でコンパイルして、Pythonから使えるようになる(Linux,Windows,Mac等)

3.1 以下の操作を行っている動画


3.2 2021/02/05時点で最新のdlibをUbuntu20.04にコンパイルインストールする 手順

  • 作業用のディレクトリに移動してから以下の操作を行う

3.2.1 Python用のパッケージインストール(Ubuntu20.04)

  • Ubuntu20.04以外(WindowsやMac)はPythonをインストールして、pip install dlibでコンパイルインストール出来るはず
    • Windowsの場合はコンパイラも必要かも
    • DockerでUbuntuを動かして、そこに入れる方法なら、同じ手順でいける
  • DockerのUbuntu:20.04で確認したところ、以下をいれておけば、Dlibをコンパイル、インストール可能(もっと入れておけば良いのあるかも)
sudo apt update
apt install git clang cmake make sudo python3-virtualenv python3-dev libpng-dev lldb python3-pip python-numpy libboost-dev python3-scipy python3-opencv

3.2.2 Python用のパッケージインストール

  • 以下のコマンドで自動でダウンロードしてコンパイルし、Pythonから使えるようになる
  • virtualenv環境でやる方が良いかも(私はそうした)
pip3 install dlib
or
pip install dlib

3.2.3 virtualenv 作成コマンド例(名前がkivy_buildozerなら)

virtualenv kivy_buildozer
  • 作成したvirtualenvに入る
source kivy_buildozer/bin/activate

3.2.4 githubからゲットしてコンパイル

  • 作業用のディレクトリに移動して以下を実行(静的ライブラリ)
git clone https://github.com/davisking/dlib
cd dlib
mkdir build
cd build
cmake .. 
make
  • cmake .. を以下にすると、動的ライブラリ
cmake -DBUILD_SHARED_LIBS=1 .. 
  1. pybind11(python用の動的ライブラリをコンパイルする手順)
    • python setup.py build でもコンパイルできる(これで、どのようなコマンドでコンパイル可能か調べた)
    • virtualenvの場合は/usr/bin/python3 ではなく、which pythonとかwhich python3で確認したpythonにした方がよさげ(未確認)
    git clone https://github.com/davisking/dlib
    cd dlib
    cmake tools/python -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=build/lib.linux-x86_64-3.8 -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release
    make 
    

3.3 この章のまとめ

  • Pythonから使えるようにインストールする手順を紹介
  • GitHubからソースゲットしてコンパイルする手順も紹介

4 画像ファイルの読み込みと表示

4.1 以下の操作を行っている動画


4.2 画像ファイルの読み込みと表示手順

4.2.1 画像ファイルの読み込み

  • これで読み込める
dlib.load_rgb_image(ファイル名)
  1. 画像の表示
    win = dlib.image_window() # window作成
    win.set_image(画像)       # 画像表示
    
  2. サンプルプログラム
    • 顔の画像はパブリックドメインの福沢諭吉さんの画像”Yukichi_Fukuzawa_1891.png”を使ってます。他の顔画像でもOK
    import dlib
    img=dlib.load_rgb_image("Yukichi_Fukuzawa_1891.png")
    win = dlib.image_window()
    win.set_image(img)
    

4.3 この章のまとめ

  • dlibの機能をつかって、ファイルの読み込みと、表示を行った。

5 顔認識

5.2 以下の操作を行っている動画


5.3 顔認識の手順

5.3.1 顔認識

detector = dlib.get_frontal_face_detector()
dets = detector(画像データ, 1)

5.3.2 プログラム例

import dlib
img=dlib.load_rgb_image("Yukichi_Fukuzawa_1891.png")
detector = dlib.get_frontal_face_detector()
dets = detector(img, 1)
win = dlib.image_window()
win.set_image(img)
win.add_overlay(dets)

5.4 この章のまとめ

  • dlibの機能をつかって、顔認識と、認識箇所の描画を行った。

6 顔のランドマーク検出

6.2 以下の操作を行っている動画


6.3 顔のランドマーク検出 の手順

6.3.1 検出器に必要なファイルダウンロード

wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
  • 解凍(ここではこのコマンドつかってるけど、他のツールで解凍してもOK)
bzcat shape_predictor_68_face_landmarks.dat.bz2 > shape_predictor_68_face_landmarks.dat

6.3.2 Dlibでの顔のランドマーク検出のやりかた

  • predictorの作成
predictor = dlib.shape_predictor(ランドマーク検出用datファイル)
  • 検出
    • 顔のある場所はrectangleで渡す
shape = predictor(画像データ, 顔のある場所)

6.3.3 プログラム例

  • 顔の画像はパブリックドメインの福沢諭吉さんの画像”Yukichi_Fukuzawa_1891.png”を使ってます。他の顔画像でもOK
import dlib
img=dlib.load_rgb_image("Yukichi_Fukuzawa_1891.png")
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
detector = dlib.get_frontal_face_detector()
dets = detector(img, 1)
win = dlib.image_window()
win.set_image(img)
win.add_overlay(dets)
shapes=[]
for k, d in enumerate(dets):
  shapes.append(predictor(img, d))
  win.add_overlay(shapes[k])

6.4 この章のまとめ

  • dlibの機能をつかって、顔のランドマーク検出を行って、結果を表示した。

7 次のまだ書いてない章

7.0.1 追加パッケージインストール

pip install immutils opencv-python Pillow ipython matplotlib

8 今後

  • 今後も文書追加していきます。

9 この文書のチェンジログ

  • 2021/02/06 初版
  • 2021/02/16 画像ファイルの読み込みと表示, 顔認識, 顔のランドマーク検出 の章追加

著者: NM Max

Created: 2021-02-16 火 14:07

Validate

カテゴリーDlib

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です