GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

ageitgey

face_recognition – 世界で最も単純なPython用の顔認識APIとコマンドライン

投稿日:

世界で最も単純なPython用の顔認識APIとコマンドライン

顔認識

世界で最も単純な顔認識ライブラリを使用して、Pythonやコマンドラインから顔を認識して操作します。

ディープ学習で構築されたdlibの最先端の顔認識を使用して構築されています。 このモデルのワイルドベンチマークではLabeled Facesの精度は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)

顔の特徴を見つけることは、多くの重要なことに非常に便利です。 しかし、あなたはまた、 デジタルメイク (「Meitu」と思う)を適用するような、本当にばかげたもののために使うことができます:

写真の顔を特定する

各写真に表示される人物を認識します。

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ライブラリと共に使用して、リアルタイムの顔認識を行うことさえできます:

コードについてはこの例を参照してください。

インストール

要件

  • Python 3.3+またはPython 2.7
  • macOSまたはLinux(Windowsは正式にはサポートされていませんが、動作する可能性があります)

インストールオプション:

MacまたはLinuxへのインストール

まず、dlibにPythonバインディングがインストールされていることを確認してください:

次に、 pip3 (またはPython 2の場合はpip2)を使用して、このモジュールをpypiからインストールします。

pip3 install face_recognition

インストールに問題がある場合は、 あらかじめ設定されたVMを試すこともできます

Raspberry Pi 2+にインストールする

Windowsへのインストール

Windowsは正式にはサポートされていませんが、このライブラリをインストールする方法については、役に立つユーザーが記載しています。

事前設定された仮想マシンイメージのインストール

使用法

コマンドラインインターフェイス

face_recognitionをインストールするface_recognition 、次の2つの簡単なコマンドラインプログラムが得られます。

  • face_recognition – 写真やフォルダ内の顔を写真のために完全に認識します。
  • face_detection – 写真やフォルダ内の顔を見つけ、写真を探します。

face_recognitionコマンドラインツール

face_recognitionコマンドを使用すると、写真やフォルダ内の顔を認識して、写真がいっぱいになるようにすることができます。

まず、あなたがすでに知っている各人の写真を1つずつフォルダに入れておく必要があります。 ピクチャに含まれる人物に応じて名前が付けられたファイルを持つ人物ごとに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

出力にはそれぞれの面に1つの線があります。 データはカンマ区切りで、ファイル名と見つかった人物の名前で区切られます。

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

それは、検出された各顔に対して1行を印刷します。 報告される座標は、顔の上、右、下、左の座標(ピクセル単位)です。

許容差/感度の調整

同じ人物に対して複数のマッチを取得している場合は、顔の比較をより厳密にするために、写真の人物が非常に似ていて許容値が低いことがあります。

--toleranceパラメータを使ってそれを行うことができます。 デフォルトの許容値は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

公差の設定を調整するために、各試合で計算された顔の距離を表示するには、 --show-distance true使用し--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
顔認識のスピードアップ

複数のCPUコアを搭載したコンピュータを使用している場合は、顔認識を並行して行うことができます。 たとえば、システムに4つのCPUコアがある場合、すべてのCPUコアを並列に使用することで、同じ時間内に約4倍のイメージを処理できます。

Python 3.4以降を使用している場合は、– --cpus <number_of_cpu_cores_to_use>パラメータを--cpus <number_of_cpu_cores_to_use>ます。

$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

--cpus -1を渡して、システムのすべてのCPUコアを使用することもできます。

Pythonモジュール

face_recognitionモジュールをインポートして、数行のコードで面を簡単に操作することができます。 超簡単です!

APIドキュメント: 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に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コードの例

すべての例がここにあります

顔検出

顔の特徴

顔認識

顔認識の仕組み

ブラックボックスライブラリに依存するのではなく、顔の位置と認識の仕組みを知りたい場合は、 私の記事を読んでください

警告

  • 顔認識モデルは大人向けに訓練されており、子供にはうまく機能しません。 デフォルトの比較しきい値0.6を使用すると、子供たちをかなり混乱させる傾向があります。
  • 民族間で正確さが異なる場合があります。 詳細はこのwikiページをご覧ください。

クラウドホストへの展開(Heroku、AWSなど)

face_recognitionはC ++で書かれたface_recognition依存しているので、HerokuやAWSのようなクラウドホスティングプロバイダにそれを使ってアプリケーションをデプロイするのは難しいかもしれません。

簡単にするために、 Dockerコンテナにface_recognitionで構築されたアプリを実行する方法を示す、このレポのface_recognition Docker face_recognitionがあります。 これにより、Dockerイメージをサポートするあらゆるサービスに展開できるはずです。

問題がありますか?

問題が発生した場合は、githubの問題を提出する前に、wikiのCommon Errorsセクションをお読みください。

ありがとう

  • dlibを作成し、このライブラリで使用されている訓練された顔の特徴の検出と顔のエンコーディングモデルを提供するDavis King@nulhom )のおかげです。 顔のエンコードを強化するResNetの詳細については、彼のブログ記事を参照してください
  • numpy、scipy、scikit-image、pillowなどのような素晴らしいPythonデータサイエンスライブラリに取り組んでいる皆さんのおかげで、このようなことがPythonで簡単に楽しくなります。
  • Cookiecutteraudreyr / cookiecutter-pypackageプロジェクトテンプレートを使用して、Pythonプロジェクトのパッケージングをより耐えられるようにしてくれてありがとうございます。







-ageitgey
-, , ,

執筆者: