ナガモト の blog

Full Cycle Developerを目指すエンジニアが有用そうな技術記事や、ポエムのようなよしなしごとを投稿するブログです。

Dlibで顔認識できるDockerコンテナを作る

ngmt83.hatenablog.com

Pythonに学ばされたこと、DockerでDlibの環境構築をしたこと、Falconの実装例なども近いうちに記事にしたいと思います。

こちらの記事に予告*1していた通り、Dockerコンテナ上でDlib(特にface_recognition)を使うための環境構築の記事です。

Dlibとは

DlibはC++のライブラリ(OSS)です。機械学習を行う際に必要なアルゴリズムやツール群を持っています。 また、Python用のAPIも用意されているため、機械学習関連では人気のライブラリです。 詳細は公式サイトを確認してください。

dlib.net

作成したdockerfile

FROM python:alpine

RUN apk add --no-cache make cmake gcc g++ zlib-dev jpeg-dev

ENV PROJECT_DIR="/app/"

ADD app/ $PROJECT_DIR

WORKDIR $PROJECT_DIR

RUN pip install -r requirements.txt

https://github.com/nagamoto/docker-sample/blob/master/dlib/dockerfile

解説

FROM python:alpine Pythonが使用できる公式イメージを利用しています。中でも軽量とされているalpineを採用しました。

RUN apk add --no-cache make cmake gcc g++ zlib-dev jpeg-dev 必要なパッケージをインストールしています。 Dlibを使用するためにビルドするmake cmake。 コンパイルのためにgcc, g++。 ビルド・コンパイル時に圧縮・展開するためzlib-dev。 画像を扱うためjpeg-dev。

ENV PROJECT_DIR="/app/" 便宜上dockerfileから下の階層にアプリに関するデータ置くためです。

ADD app/ $PROJECT_DIR appフォルダ内のファイルをコンテナに追加しています。

WORKDIR $PROJECT_DIR コンテナ内でのチェンジディレクトリです。

RUN pip install -r requirements.txt appフォルダ内にあるrequirements.txtに従ってPythonライブラリをインストールします。

face_recognition.pyにはdlibとnumpyをpip installする必要があると記載されていたので、requirements.txtにはdlibとnumpyを記述するといいでしょう。 http://dlib.net/face_recognition.py.html

最後に

できるだけ軽量に余計なものがないように構築したつもりですが、もっと軽量にする方法を知っていたら教えて欲しいです。

*1:近いうちという予告から4ヶ月以上経過しています…