【Python】dlibのインストール

【Python】dlibのインストール プログラミング

「dlibのインストールに失敗してしまう・・」

このような場合には、この記事の内容が参考になります。
この記事では、dlibをインストールする方法を解説しています。

本記事の内容

  • dlibとは?
  • dlibのシステム要件
  • dlibのインストール
  • dlibの動作確認

それでは、上記に沿って解説していきます。

dlibとは?

Dlibとは、機械学習・データ解析アプリケーションを作成するためのツールキットのことです。
Dlib自体は、C++で開発されています。

そして、Dlibは以下の二つの言語に対応しています。

  • C++
  • Python

C++は当然として、Pythonにも対応しています。
Python用に公開しているライブラリは、本体のDlibと区別してdlibと呼びましょう。

機械学習と言えば、Pythonですよね。
その影響からか、「Dlib」とGitHubで検索すると次のような結果になっています。
(2022年10月16日現在)

Jypyter Notebookは、Pythonに含めるべきでしょうね。

タグで調べた結果としても、Pythonの方がリポジトリ数が多くなっています。

これほどまでに、DlibはPythonで利用されています。
その際に必要となるライブラリが、dlibということです。

以上、dlibについて説明しました。
次は、dlibのシステム要件を説明します。

dlibのシステム要件

現時点(2022年10月)でのdlibの最新バージョンは、19.24.0となります。
この最新バージョンは、2022年5月8日にリリースされています。

dlibのシステム要件では、以下がポイントになります。

  • OS
  • Pythonバージョン
  • CMake

それぞれを以下で説明します。

OS

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

基本的には、OSは問わないと言えます。

Pythonバージョン

サポート対象となるPythonのバージョンは、以下。

  • Python 2.6
  • Python 2.7
  • Python 3.4
  • Python 3.5
  • Python 3.6

正直言って、このサポート状況は滅茶苦茶です。
今時、Python 2.6対応なんてなかなか見られません。

Python 3.4対応も、2020年以降では初めて見たかもしれません。
それぐらい、上記のサポートバージョンはあり得ないということです。

救いは、Python 3.6が含まれていることでしょう。
Python 3.6に対応していれば、それ以降のPythonでも基本的には動きます。

一応、Python公式開発サイクルでは次のようになっています。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Python公式開発サイクルに従うと、Python 3.7以降じゃないとダメということになります。
そういうことで、ここではPython 3.7以降を推奨しておきます。

CMake

dlibのインストール時に、cmakeコマンドが動く必要があります。
ビルドをその際に行っているということでしょうね。

そのため、CMakeを事前にインストールしておく必要があります。
CMakeのインストールは、OS毎に異なります。

Ubuntuであれば、以下のコマンドでサクッとインストールできます。

sudo apt install cmake

WindowsへのCMakeのインストールは、次の記事で解説しています。

「cmake –version」を実行して、CMakeのバージョンが表示されればOKです。

以上、dlibのシステム要件を説明しました。
次は、dlibのインストールを説明します。

dlibのインストール

検証は、次のバージョンのPythonで行います。

> python -V   
Python 3.10.4

まずは、現状のインストール済みパッケージを確認しておきます。

> pip list                                                                                            
Package    Version 
---------- ------- 
pip        22.3 
setuptools 65.5.0 
wheel      0.37.1

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、dlibのインストールです。
dlibのインストールは、以下のコマンドとなります。

pip install dlib

dlibのインストールは、しばらく時間がかかります。
次の表示で止まったままの状態が、数分ほど続きます。

Building wheels for collected packages: dlib 
  Building wheel for dlib (setup.py) ... \ 

cmakeコマンドで何かしらビルドでもしているのでしょう。
処理が終了したら、どんなパッケージがインストールされたのかを確認します。

> pip list         
Package    Version 
---------- ------- 
dlib       19.24.0 
pip        22.3 
setuptools 65.5.0 
wheel      0.37.1

dlibには、依存するパッケージがありません。
CMakeさえインストールできれば、dlibの導入は容易にできそうです。

以上、dlibのインストールを説明しました。
次は、dlibの動作確認を説明します。

dlibの動作確認

dlibの動作確認は、以下のコードで行います。
dlibの公式ページにあるサンプルコードをそのまま拝借しています。

#!/usr/bin/python
# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
#
#
# This is an example illustrating the use of a binary SVM classifier tool from
# the dlib C++ Library.  In this example, we will create a simple test dataset
# and show how to learn a classifier from it.
#
#
# COMPILING/INSTALLING THE DLIB PYTHON INTERFACE
#   You can install dlib using the command:
#       pip install dlib
#
#   Alternatively, if you want to compile dlib yourself then go into the dlib
#   root folder and run:
#       python setup.py install
#
#   Compiling dlib should work on any operating system so long as you have
#   CMake installed.  On Ubuntu, this can be done easily by running the
#   command:
#       sudo apt-get install cmake
#

import dlib
try:
    import cPickle as pickle
except ImportError:
    import pickle

x = dlib.vectors()
y = dlib.array()

# Make a training dataset.  Here we have just two training examples.  Normally
# you would use a much larger training dataset, but for the purpose of example
# this is plenty.  For binary classification, the y labels should all be either +1 or -1.
x.append(dlib.vector([1, 2, 3, -1, -2, -3]))
y.append(+1)

x.append(dlib.vector([-1, -2, -3, 1, 2, 3]))
y.append(-1)


# Now make a training object.  This object is responsible for turning a
# training dataset into a prediction model.  This one here is a SVM trainer
# that uses a linear kernel.  If you wanted to use a RBF kernel or histogram
# intersection kernel you could change it to one of these lines:
#  svm = dlib.svm_c_trainer_histogram_intersection()
#  svm = dlib.svm_c_trainer_radial_basis()
svm = dlib.svm_c_trainer_linear()
svm.be_verbose()
svm.set_c(10)

# Now train the model.  The return value is the trained model capable of making predictions.
classifier = svm.train(x, y)

# Now run the model on our data and look at the results.
print("prediction for first sample:  {}".format(classifier(x[0])))
print("prediction for second sample: {}".format(classifier(x[1])))


# classifier models can also be pickled in the same was as any other python object.
with open('saved_model.pickle', 'wb') as handle:
    pickle.dump(classifier, handle, 2)

上記コードを実行します。
実行後、「saved_model.pickle」が作成されていれば問題ありません。

以上、dlibの動作確認を説明しました。

タイトルとURLをコピーしました