Are you sure you want to delete this access key?
このファイルは 英語(オリジナル) in English、 中国語 简体中文版 、 韓国語 한국어で読むこともできます。
世界で最もシンプルな顔認識ライブラリを使って、Pythonやコマンドラインで顔を認識・操作することができるライブラリです。
dlibのディープラーニングを用いた最先端の顔認識を使用して構築されており、このモデルはLabeled Faces in the Wildベンチマークにて99.38%の正解率を記録しています。
シンプルなface_recognition
コマンドラインツールも用意しており、コマンドラインでフォルダ内の画像を顔認識することもできます。
画像に写っているすべての顔を探します。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
画像の中の顔から目、鼻、口、あごの場所と輪郭を得ることができます。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
顔の特徴を見つけることは多くの重要なことに役立ちますが、デジタルメイクアップ のようにさほど重要ではないことにも使うことができます。
それぞれの画像に写っている人物を認識します。
import face_recognition
known_image = face_recognition.load_image_file("biden.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")
biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
他のPythonライブラリと一緒に用いてリアルタイムに顔認識することも可能です。
試す場合はこちらのサンプルコード を参照してください。
ユーザーがコントリビュートした共有のJupyter notebookのデモがあります。(公式なサポートはありません)
はじめに、dlibをインストールします。(Pythonの拡張機能も有効にします)
次に、このモジュールをpypiからpip3
(Python2の場合はpip2
)を使ってインストールします。
pip3 install face_recognition
あるいは、Dockerでこのライブラリを試すこともできます。詳しくは こちらのセクションを参照してください。
もし、インストールが上手くいかない場合は、すでに用意されているVMイメージで試すこともできます。詳しくは事前構成済みのVMを参照してください。(VMware Player もしくは VirtualBoxが対象)
Windowsは公式サポートされていませんが、役立つインストール手順が投稿されています。
face_recognition
をインストールすると、2つのシンプルなコマンドラインがついてきます。
face_recognition
- 画像もしくはフォルダの中の複数の画像から顔を認識します
face_detection
- 画像もしくはフォルダの中の複数の画像から顔を検出します
face_recognition
コマンドラインツールface_recognition
コマンドによって、画像もしくはフォルダの中の複数の画像から顔を認識することができます。
まずは、フォルダに知っている人たちの画像を一枚ずつ入れます。一人につき1枚の画像ファイルを用意し、画像のファイル名はその画像に写っている人物の名前にします。
次に、2つ目のフォルダに特定したい画像を入れます。
そして、face_recognition
コマンドを実行し、知っている人の画像を入れたフォルダのパスと特定したい画像のフォルダ(もしくは画像ファイル)のパスを渡すと、それぞれの画像に誰がいるのかが分かります。
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
一つの顔につき一行が出力され、ファイル名と特定した人物の名前がカンマ区切りで表示されます。
unknown_person
は知っている人の画像の中の誰ともマッチしなかった顔です。
face_detection
コマンドラインツールface_detection
コマンドによって、画像の中にある顔の位置(ピクセル座標)を検出することができます。
face_detection
コマンドを実行し、顔を検出したい画像を入れたフォルダ(もしくは画像ファイル)のパスを渡してあげるだけです。
$ face_detection ./folder_with_pictures/
examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792
検出された顔一つにつき一行が出力され、顔の上・右・下・左の座標(ピクセル単位)が表示されます。
もし同一人物に対して複数の一致があった場合、画像の中に写っている人たちの顔が非常に似ている可能性があるので、顔の比較をより厳しくするために許容誤差の値を下げる必要があります。
--tolerance
コマンドによってそれが可能になります。デフォルトの許容誤差の値(tolerance value)を0.6よりも低くすると、より厳密に顔の比較をすることができます。
$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
もし許容誤差の設定を調整するために一致した顔の距離値(face distance)を確認したい場合は --show-distance true
を使ってください。
$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None
ファイル名は出力せずに人物の名前だけを表示することもできます。
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2
Barack Obama
unknown_person
マルチコア搭載コンピューターの場合は並列で実行することも可能です。例えば4CPUコアの場合、同じ時間で約4倍の画像を処理することができます。
Python 3.4 以上を使っている場合は--cpus <number_of_cpu_cores_to_use>
パラメータを渡します。
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
--cpus -1
のパラメータを渡すことで、システムのすべてのCPUコアを使うことも可能です。
face_recognition
モジュールをインポートすると、数行のコードでとても簡単に操作を行うことができます。
API Docs: https://face-recognition.readthedocs.io.
import face_recognition
image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)
# face_locations is now an array listing the co-ordinates of each face!
試す場合はこちらのサンプルコードを参照してください。
さらに正確でディープラーニングをもとにした顔検出モデルを選択することも可能です。
注意:このモデルで良いパフォーマンスを出すにはGPUアクセラレーション(NVidiaのCUDAライブラリ経由)が必要です。また、dlib
をコンパイルする際にCUDAサポートを有効にする必要あります。
import face_recognition
image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")
# face_locations is now an array listing the co-ordinates of each face!
試す場合はこちらのサンプルコードを参照してください。
大量の画像をGPUを使って処理する場合は、こちらのサンプルコードのようにバッチ処理することも可能です。
import face_recognition
image = face_recognition.load_image_file("my_picture.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.
試す場合はこちらのサンプルコードを参照してください。
import face_recognition
picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]
# my_face_encoding now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face!
unknown_picture = face_recognition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]
# Now we can see the two face encodings are of the same person with `compare_faces`!
results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)
if results[0] == True:
print("It's a picture of me!")
else:
print("It's not a picture of me!")
試す場合はこちらのサンプルコードを参照してください。
すべてのサンプルはこちらで見ることができます。
python
や face_recognition
のインストールをせずに実行することができるスタンドアロンの実行ファイルを作る場合は、PyInstallerを使います。しかし、このライブラリを使用するにはカスタム設定が必要です。
face_recognition
をカバーする記事とガイドブラックボックスライブラリに依存せず、顔の位置や認識の仕組みを知りたい方はこちらの記事を読んでください。
この顔認識モデルは大人でトレーニングされており、子どもではあまり上手く機能しません。比較する閾値をデフォルト(0.6)のままで使用すると子どもを混同しやすくなります。
精度は民族グループによって異なる可能性があります。詳しくはこちらのwikiページを参照してください。
face_recognition
はC++で書かれたdlib
に依存しているため、HerokuやAWSのようなクラウドサーバにこれらを使ったアプリをデプロイするのは難しい場合があります。
それを簡単にするために、このレポジトリにはDockerコンテナ内でface_recognition
のビルドされたアプリを実行する方法を示したサンプルDockerfileがあります。これによって、Dockerイメージをサポートしているすべてのサービスにデプロイできるようになるはずです。
コマンドを実行し、ローカルでDockerイメージを試すことができます。: docker-compose up --build
GPU (drivers >= 384.81) および Nvidia-Docker がインストールされているLinuxユーザーはGPUでサンプルを実行することができます。docker-compose.yml を開き、dockerfile: Dockerfile.gpu
とruntime: nvidia
の行をコメントアウトしてください。
もし問題が発生した場合はGitHubにIssueをあげる前に、まずはwikiのよくあるエラーをお読みください
dlibを作り、このライブラリで使っているトレーニングされた顔の特徴検出とフェイスエンコーディングモデルを提供してくれたDavis King (@nulhom)、本当にありがとうございます。 フェイスエンコーディングを動かしているResNetについての情報は彼のブログを見てください。
このようなライブラリがPythonで簡単に楽しくできるためのnumpy, scipy, scikit-image, pillow など全ての素晴らしいPythonデータサイエンスライブラリに取り組んでいる人たちに感謝しています。
Pythonプロジェクトのパッケージングをより易しくするCookiecutterとaudreyr/cookiecutter-pypackageに感謝しています。
Press p or to see the previous file or, n or to see the next file
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?