dlibライブラリのCNNベースの顔抽出、顔比較機能を使って、同じ顔の人を探す。
# 依存ライブラリをインストールする
$ pip3 install -r requirements.txt
# 顔検出の機械学習モデルをダウンロード (get_faces.pyで使用する)
$ curl -O http://dlib.net/files/mmod_human_face_detector.dat.bz2
$ bunzip2 mmod_human_face_detector.dat.bz2
# 顔の特徴抽出の機械学習モデルをダウンロード (image_to_vector.pyで使用する)
$ curl -O http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
$ bunzip2 shape_predictor_68_face_landmarks.dat.bz2
# 顔認識の機械学習モデルをダウンロード (image_to_vector.pyで使用する)
$ curl -O http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2
$ bunzip2 dlib_face_recognition_resnet_model_v1.dat.bz2
モデルデータのURLは、 https://dlib.net/python/ を参照
準備として、カレントディレクトリ以下にimage_original
ディレクトリを作って、そこに画像を置くこと。
$ python3 resize_image.py
このプログラムはimage_small
ディレクトリに縮小された画像を生成する。
TODO : いま0.2倍になっているので、元画像の大きさがいくつかに合わせて縮小倍率を変える
$ python3 get_faces.py
このプログラムはimage_small
ディレクトリの画像から抽出された顔を、96x96ピクセルのJPEG画像としてfaces
ディレクトリに生成する。
ファイル名は、以下の形式:
[元のファイル名 (拡張子なし)]/[顔番号3桁ゼロ埋め0開始].jpg
$ python3 image_to_vector.py
このプログラムはfaces
ディレクトリにある全ての顔が128次元ベクトルに変換し、.npy
形式 (NumPyバイナリ) でvecs
ディレクトリに生成する。
このプログラムはvecs
ディレクトリの顔を総当りして同じ顔を探す。抽出された同じ顔のリストは、カレントディレクトリのface_list.txt
にCSV形式で1行ごとに同じ顔のファイル名が列挙される。
$ python3 match_faces.py
このプログラムは実行時間がかかるかわりに、多くの画像を大きな分類にまとめてくれる。実行時間はMacbook Pro 2018で1.5時間ほど。
このプログラムは乱数シードを固定しているため、プログラムを変更しない限りにおいて、何度実行しても同じ結果となる。
$ python3 clustering_faces.py
このプログラムは実行時間が短いかわりに、分類が細かい単位となる。実行時間はMacbook Pro 2018で5秒程度。
$ python3 visualize_face_list.py
このプログラムはface_list.txt
をもとに、同じ顔の人物を最大6x6枚並べた画像を生成する。