シンプルで強力な顔認識プロジェクトがGitHubのトレンドリストに登場

シンプルで強力な顔認識プロジェクトがGitHubのトレンドリストに登場

最近、face_recognitionという顔認識プロジェクトがGitHubのトレンドリストに掲載され、注目を集めています。オープンソース化されてから執筆時点までに、このプロジェクトの Github 上のスター数は 26,500 に達し、フォーク数は 7,117 に達しました。本稿では、主に国内開発者による研究・調査を促進するために、プロジェクトの指示と使用方法を紹介します。

face_recognition は、史上最も強力かつシンプルな顔認識プロジェクトであると主張しています。このプロジェクトは、ソフトウェアエンジニアリング開発者兼コンサルタントのアダム・ガイトギー氏によって開発されたと報じられています。その強みは、業界をリードする C++ オープンソースライブラリ dlib のディープラーニングモデルに基づいているだけでなく、マサチューセッツ大学アマースト校が作成した Labeled Faces in the Wild という顔データセットも使用していることです。このデータセットには、インターネットから収集された 13,000 枚以上の顔画像が含まれており、精度は最大 99.38% です。さらに、このプロジェクトには、Raspberry Pi システムと特に互換性のある完全な開発ドキュメントとアプリケーション ケースが装備されています。シンプルさの理由は、オペレーターが Python とコマンドライン ツールを直接使用して顔を抽出、認識、操作できるからです。

現在、プロジェクトの説明には中国語の翻訳があります。この記事では翻訳者(GitHub ID:TommyZihao)の許可を得て、その翻訳を引用し、プロジェクトについて簡単に紹介します。

いつものように、GitHub プロジェクトのリンクは次のとおりです。

https://github.com/ageitgey/face_recognitio

特性

1. 画像内のすべての顔を見つけて位置を特定します。

  1. 顔認識をインポートする
  2. 画像 = face_recognition.load_image_file( "your_file.jpg" )
  3. face_locations = face_recognition.face_locations(画像)

2. 顔の重要なポイント(目、鼻、口、あごなど)を特定する

  1. 顔認識をインポートする
  2. 画像 = face_recognition.load_image_file( "your_file.jpg" )
  3. face_landmarks_list = face_recognition.face_landmarks(画像)

私の顔認識プロジェクトは、いくつかの重要な分野で重要な役割を果たすだけでなく、デジタルメイクの自動メイクアップ機能(Meitu XiuXiuに類似)も備えており、「遊び心」を喚起する可能性があります。

3. 写真に写っている人物を特定する

  1. 顔認識をインポートする
  2. known_image = face_recognition.load_image_file( "biden.jpg" )
  3. 不明な画像 = face_recognition.load_image_file( "不明な.jpg" )
  4. biden_encoding = 顔認識.顔エンコーディング(既知の画像)[ 0 ]
  5. 結果 = face_recognition.compare_faces([biden_encoding], unknown_encoding)

4. 他の Python ライブラリ (opencv など) と組み合わせることで、このプロジェクトではリアルタイムの顔検出も実現できます。詳細な例については、以下を参照してください。

https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py

インストール

環境構成:

  • Python 3.3+ または Python 2.7macOS または LinuxWindows (公式にはサポートされていませんが、一部の専門家は Windows で実行する方法を見つけました)

さまざまなオペレーティング システムのインストール方法:

1. このプロジェクトを Mac または Linux にインストールします。

方法1:

まず、dlib と関連する Python 依存関係をインストールします。

https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf

次に、次のコードを使用して、pip3 または Python 2 の pip2 経由でインストールします。

  1. pip3 顔認識をインストール

インストールが失敗した場合は、Ubuntu 仮想マシンを使用してインストールできます。次のチュートリアルを参照してください。

https://medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b

(VMWare Player または VirtualBox がコンピューターにインストールされている必要があります)

方法2:

pip ミラー ソースを Tsinghua ミラーに変更し、pip install face_recognition を使用します。これにより、dlib を含むさまざまな依存関係が自動的にインストールされます。 dlib はコンパイルする必要があるため、dlib のインストール時に問題が発生する可能性があります。この問題は通常、gcc または g++ のバージョンの問題であるため、pip install face_recognition を実行する前に、コマンドラインで入力できます。

  1. エクスポート CC=/usr/local/bin/gcc
  2. エクスポート CXX=/usr/local/bin/g++

gcc と g++ の場所を指定します (この 2 つの文は、現在のターミナルの環境変数 /usr/local/bin/gcc を、gcc または g++ が配置されているディレクトリに対応するように一時的に変更します)。

2. Raspberry Piにインストールします。

Raspberry Pi インストールガイド:

https://gist.github.com/ageitgey/1ac8dbe8572f3f533df6269dab35df65

3. Windows へのインストール: このプロジェクトは正式には Windows をサポートしていませんが、一部の専門家は Windows でこのプロジェクトを実行する方法を見つけました。@masoudr は、Win10 システムに dlib ライブラリと face_recognition プロジェクトをインストールする方法に関するチュートリアルを作成しました。

https://github.com/ageitgey/face_recognition/issues/175#issue-257710508

Ubuntu 仮想マシン イメージ ファイルを使用して、仮想マシンをインストールおよび構成します。このプロジェクトは、このイメージに既に含まれています。

https://medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b

使い方

1. コマンドラインツールの使用

プロジェクトがインストールされると、次の 2 つのコマンド ライン ツールが利用できるようになります。

  • face_recognition - 単一の画像または画像フォルダー内の顔を識別します。 face_detection - 単一の画像または画像フォルダー内の顔を見つけます。

face_recognition コマンドラインツール:

face_recognition コマンドライン ツールは、単一の画像または画像フォルダー内の顔を識別できます。まず、名前がわかっている顔画像のフォルダが、人物ごとに 1 つずつ必要です。画像のファイル名は、対応する人物の名前です。次に、認識したい画像を含む 2 番目の画像フォルダが必要です。

次に、コマンド ラインで 2 つのフォルダーが配置されているパスに切り替え、face_recognition コマンド ラインを使用して 2 つの画像フォルダーを渡すと、不明な画像内の人物の名前が出力されます。

  1. $ 顔認識 ./私が知っている人の写真/ ./未知の写真/
  2. /unknown_pictures/unknown.jpg、バラク・オバマ
  3. /顔認識テスト/不明な写真/不明.jpg、不明な人物

出力の各行は画像内の顔に対応し、画像名と対応する顔認識結果はカンマで区切られます。

結果に unknown_person が出力された場合、この顔は既知の顔画像フォルダー内のどの人物にも一致しないことを意味します。

face_detection コマンドラインツール

face_detection コマンドライン ツールは、単一の画像または画像フォルダー内の顔を特定できます (出力ピクセル座標)。コマンドラインで face_detection を使用し、画像のフォルダーまたは単一の画像ファイルを渡して顔の位置を検出します。

  1. $ 顔検出 ./写真のあるフォルダ/
  2. 例/image1.jpg, 65 , 215 , 169 , 112  
  3. examples/image2.jpg, 62 , 394 , 211 , 244 など 
  4. examples/image2.jpg, 95 , 941 , 244 , 792  

出力の各行は画像内の顔に対応し、出力座標は顔の上、右、下、左のピクセル座標を表します。

顔認識の許容度と感度を調整する

顔が複数の結果で認識された場合、その人は他の人と非常に似ていることを意味します (さらに、子供とアジア人に対するこのプロジェクトの精度を向上させる必要があります)。エラー許容度を下げると、認識結果をより厳密にすることができます。この機能は、パラメータ --tolerance を渡すことで実現できます。デフォルトの許容率は 0.6 です。許容率が低いほど、認識は厳格かつ正確になります。

  1. $ 顔認識 --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/
  2. /unknown_pictures/unknown.jpg、バラク・オバマ
  3. /顔認識テスト/不明な写真/不明.jpg、不明な人物

顔のマッチングの具体的な値は、パラメータ --show-distance true を渡すことで表示できます。

  1. $ 顔認識 --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/
  2. /unknown_pictures/unknown.jpg、バラク・オバマ、 0.378542298956785  
  3. /face_recognition_test/unknown_pictures/unknown.jpg、不明な人物、なし

認識速度に満足できない場合はどうすればいいですか?

CPU に複数のコアがある場合は、並列コンピューティングによって顔認識を高速化できます。たとえば、CPU に 4 つのコアがある場合、それらを並列化することで操作の速度を約 4 倍に上げることができます。

Python 3.4 以降を使用する場合は、--cpus <number_of_cpu_cores_to_use> パラメータを渡すことができます。

  1. $ 顔認識 --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

(--cpus -1 パラメータを渡すと、CPU のすべてのコアを呼び出すことができます。) さらに、Tommy Zihao 氏は、Raspberry Pi 3B には 4 つの CPU コアがあり、マルチコア パラメータを渡すと、画像認識の速度が大幅に向上すると述べました。

その他のケーススタディ

画像のファイル名は気にせず、フォルダー内の画像に誰が含まれているかだけを知りたい場合は、次のパイプ コマンドを使用できます。

  1. $ 顔認識 ./pictures_of_people_i_know/ ./unknown_pictures/ | カット -d ',' -f2
  2. バラク・オバマ
  3. 不明な人物

2. Pythonの使用

Python で face_recognition モジュールをインポートし、豊富な API インターフェースを呼び出すと、わずか数行のコードでさまざまな顔認識機能を簡単に使用できるようになります。 API インターフェースのドキュメント:

https://face-recognition.readthedocs.io

顔の位置を特定したり、顔の身元を認識したりするにはどうすればよいでしょうか?

Python では、次のコードを使用して画像内の顔を特定できます。

  1. 顔認識をインポートする
  2. 画像 = face_recognition.load_image_file( "my_picture.jpg" )
  3. face_locations = face_recognition.face_locations(画像)
  4. # face_locationsは各面の座標をリストする配列になりました

参考事例:

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py

画像内の顔を識別します。

  1. 顔認識をインポートする
  2. 私の画像 = face_recognition.load_image_file( "me.jpg" )
  3. 私の顔のエンコーディング = face_recognition.face_encodings(私の写真)[ 0 ]
  4. # my_face_encoding には、他の顔写真と比較できる、私の顔の特徴の普遍的な「エンコーディング」が含まれるようになりました。
  5. 不明な画像 = 顔認識.画像ファイルの読み込み( "不明な.jpg" )
  6. 不明な顔エンコーディング = 顔認識.顔エンコーディング(不明な画像)[ 0 ]
  7. # これで、`compare_faces` で 2 つの顔のエンコーディングが同じ人物のものであることが分かります。
  8. 結果 = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)
  9. 結果[ 0 ] == Trueの場合:
  10. print( "これは私の写真です!" )
  11. それ以外
  12. print("これは

参考事例:

https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py

顔認識に関して厳密な要件がある場合はどうすればよいでしょうか?

ディープラーニング モデルを使用すると、より正確な顔の位置決めを実現できますが、この方法では GPU アクセラレーション (NVIDIA グラフィック カードの CUDA ライブラリによって駆動) が必要であり、dlib をコンパイルしてインストールするときに CUDA サポートも有効にする必要があることに注意してください。

  1. 顔認識をインポートする
  2. 画像 = face_recognition.load_image_file( "my_picture.jpg" )
  3. face_locations = face_recognition.face_locations(画像、モデル = "cnn" )
  4. # face_locationsは各面の座標をリストする配列になりました

参考事例:

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py

認識する画像が多数あり、GPU がある場合は、次の例を参照できます。

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_batches.py

1 枚の画像で顔の重要なポイントを識別するにはどうすればよいでしょうか?

  1. 顔認識をインポートする
  2. 画像 = face_recognition.load_image_file( "my_picture.jpg" )
  3. face_landmarks_list = face_recognition.face_landmarks(画像)
  4. # face_landmarks_list は、各顔の各顔の特徴の位置を含む配列になりました。
  5. # face_landmarks_list[ 0 ][ 'left_eye' ]は最初の人物の左目の位置と輪郭になります

参考事例:

https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py

オバマとバイデンの顔の特徴を特定する

その他の例:

https://github.com/ageitgey/face_recognition/tree/master/examples

顔の位置

事例:バイデン氏の顔の位置特定

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py

事例: 畳み込みニューラルネットワークのディープラーニングモデルを使用してバイデンの顔を見つける

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py

事例: 畳み込みニューラル ネットワークのディープラーニング モデルを使用して画像内の顔をバッチ認識する

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_batches.py

例: ウェブカメラのビデオの顔のガウスぼかし (OpenCV がインストールされている必要があります)

https://github.com/ageitgey/face_recognition/blob/master/examples/blur_faces_on_webcam.py

顔のキーポイント認識

事例:オバマ氏とバイデン氏の顔の重要なポイントの抽出

https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py

事例:バイデン米副大統領に化粧を施す

https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py

顔認識

事例:オバマかバイデンか?

https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py

例: 顔認識後に元の画像に枠を描き、名前をラベル付けする

https://github.com/ageitgey/face_recognition/blob/master/examples/identify_and_draw_boxes_on_faces.py

例: 異なる精度で 2 つの顔を比較し、同じ人物のものであるかどうかを確認する

https://github.com/ageitgey/face_recognition/blob/master/examples/face_distance.py

例: 顔認識のためにカメラからビデオを取得する - 低速バージョン (OpenCV のインストールが必要)

https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam.py

  • 例: 顔認識のためにカメラからビデオを取得する - 高速バージョン (OpenCV のインストールが必要)

https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py

  • 例: ビデオファイルから顔を認識し、認識結果を新しいビデオファイルとして出力します (OpenCV がインストールされている必要があります)

https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_video_file.py

  • 事例: Raspberry Pi カメラを使用した顔カウントと顔識別

https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_on_raspberry_pi.py

  • ケース: 顔認識のためにブラウザ HTTP 経由で Web サーバーにアクセスする (Flask バックエンド開発フレームワークのインストールが必要)

https://github.com/ageitgey/face_recognition/blob/master/examples/web_service_example.py

  • 事例: K近傍KNN分類アルゴリズムに基づく顔認識

https://github.com/ageitgey/face_recognition/blob/master/examples/face_recognition_knn.py

顔認識に関する記事とチュートリアル

  • このプロジェクトの著者が書いた記事: ディープラーニングによる最新の顔認識:

https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78

  • 主な内容: 基本的なアルゴリズムと原理
  • Adrian Rosebrock による OpenCV、Python、ディープラーニングによる顔認識:

顔認識とディープラーニング

  • メインコンテンツ: このプロジェクトを実際に使用する方法
  • Raspberry Pi 顔認識 (Adrian Rosebrock 著)

https://www.pyimagesearch.com/2018/06/25/raspberry-pi-face-recognition/

  • メインコンテンツ: Raspberry Piでこのプロジェクトを使用する方法
  • Adrian Rosebrock による Python による顔のクラスタリング

https://www.pyimagesearch.com/2018/07/09/face-clustering-with-python/

  • メインコンテンツ: 教師なし学習アルゴリズムを使用して、写真の顔をガウスぼかしする

顔認識の仕組み

顔認識のブラックボックスについて詳しく知りたい場合は、この記事をお読みください。

https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78

警告メモ

このプロジェクトの顔認識モデルは成人を対象としており、子供にはうまく機能しない可能性があります。画像に子供がいる場合は、しきい値を 0.6 に設定することをお勧めします。人種によって認識結果が異なる場合があります。詳細については、Wikipedia のページを参照してください。

このプロジェクトをクラウド サーバー (Heroku、AWS など) にデプロイします。

このプロジェクトは C++ ライブラリ dlib に基づいているため、Heroku や AWS などのクラウド サーバーにこのプロジェクトをデプロイするのが賢明です。

このプロセスを簡素化するために、face_recognition アプリを Docker コンテナー ファイルにパッケージ化する方法を説明する Dockerfile の例があります。このコンテナー ファイルは、Docker イメージ ファイルをサポートする任意のクラウド サービスにデプロイできます。

何か問題が発生しましたか?

何か問題が発生した場合は、Github で問題を送信する前に、一般的なエラーを確認してください。

<<:  画像認識のためのトップ 5 プログラミング言語

>>:  ファーウェイ、セキュリティ業界を洞察から先見へと進化させる2019年スマートセキュリティ事業戦略を発表

ブログ    

推薦する

Cloudera Greater Chinaのテクニカルディレクター、Liu Lifang氏:より正確なAIにはより正確なデータが必要

アプリケーションの可観測性と AI の信頼、リスク、セキュリティ管理は、ガートナーが 2023 年に...

北京大学、バイトダンス等は増分学習を用いたスーパーピクセルセグメンテーションモデルLNSNetを提案した

オンライン学習によって引き起こされる壊滅的な忘却問題を解決するために、北京大学などの研究機関は、勾配...

...

なぜ人間は自分たちよりも賢い人工知能を作り出すのでしょうか?舞台裏では複雑なネットワークサポートが行われている

人間が自分よりも賢いものを創造できる理由について考えたことがありますか?あなたは、人工知能というこの...

世界の通信業界の専門家が2024年を予測

世界の通信業界の専門家が2024年を予測5G が世界をカバーし、人工知能がネットワークを再形成し、デ...

確かな情報です!魅力的なチャットボットを 0 から 1 まで構築する方法を教えますか?

ここ数か月、私はたくさんのロボットに取り組んできました。このプロセスで私が学んだ教訓をいくつか紹介し...

ブラックテクノロジー:AoE-モデルをうまく管理するには?

序文今後ますます多くの企業が AI 関連のテクノロジーを利用するようになるでしょう。ほとんどの AI...

機械学習を学ぶ際に早い段階で知っておくべき3つのこと

私は長年、学界と産業界の両方で機械学習モデリングに取り組んできましたが、Scalable ML で「...

ニューラルネットワークに基づくマルウェア検出分析

今日、あらゆる業界にとって、「マルウェアを効果的に検出する方法」は、ネットワーク セキュリティに関す...

自動運転HMI設計のポイントは何ですか?

ヒューマンマシンインターフェースがなければ、ドライバーは自動運転車 (AV) と通信できません。さら...

プリンストン DeepMind は数学を使用して、LLM はランダムなオウムではないことを証明します。 「規模が大きいほど能力が強くなる」には理論的根拠がある

今日の物語の主人公は、サンジーヴ・アローラとアニルド・ゴヤルという二人の科学者です。アローラ氏はプリ...

AI が顧客中心主義で債権回収サイクルを変革する方法

[[431145]]過去1年間、COVID-19パンデミックにより、多くの業界が開発戦略を再考し、変...

大規模機械学習システムでは無料のランチはない

[[205684]] Tu Weiwei 氏は、Fourth Paradigm Prophet プラ...

...

ワイヤレス ネットワークと人工知能が出会うと何が起こるでしょうか?

人工知能(AI)は未来の技術ではなく、すでに存在している技術です。機械学習のイノベーションにより A...