face_recognitionに基づく顔認識の実装

face_recognitionに基づく顔認識の実装

前回の記事では、写真に写っている顔を検出し、顔の特徴(鼻、目、眉毛など)をマークしました。この記事では、前回の記事に基づいてさらに顔認識を実装し、写真に写っている人物が誰であるかを判別します。

準備

私たちの顔認識は face_recognition ライブラリに基づいています。 Face_recognition は dlib に基づいて実装されており、ディープラーニング トレーニング データを使用しており、モデルの精度は最大 99.38% です。作業を始める前に、face_recognitionをインストールしましょう

  1. 顔認識をpipでインストールする

顔のデジタル化

顔認識の最初のステップは、写真内の顔領域を検出し、顔画像データを長さ128のベクトルに変換することです。これらの128のデータは、以下に示すように、顔の128の特徴指標を表します。

既知の顔ごとに、このような 128 ビットのベクトルを生成します。未知の顔については、その 128 ビット ベクトルをすべての既知の顔の 128 ビット ベクトルと 1 つずつ比較し、最も類似度の高いもの、つまり未知の顔に対応する人物を見つけます。

画像データ

私たちはケイト王女の写真とウィリアム王子の写真を 2 枚用意し、それぞれ catherine.jpg と william.jpg として保存しました。この 2 枚の写真に写っている顔は、私たちが知っている顔です。

私たちの目標は、下の集合写真に写っている 2 人の顔を識別し、写真に名前を記入することです。次の画像はunknown.jpgとして保存されています

コードの実装

次にプログラミング作業を始めましょう

  1. cv2をインポート
  2.  
  3. インポート face_recognitionnames = [
  4.  
  5. 「キャサリン」
  6.  
  7. 「ウィリアム」
  8.  
  9. ]

まず、names 配列に格納されるタグ セットを定義します。

タグ名は画像のファイル名でもあります。

  1. 画像 = []
  2.  
  3. のために 名前 名前:
  4.  
  5. ファイル名 =名前+ ".jpg"  
  6.  
  7. 画像 = face_recognition.load_image_file(ファイル名)
  8.  
  9. images.append(画像)
  10.  
  11. 不明な画像 = face_recognition.load_image_file( "不明な.jpg" )

画像からデータを読み込むには、face_recognition.load_image_file を呼び出します。

ここでは、既知の顔と未知の顔の写真が入ったデータを読み込みます。未知の顔の写真は、上記の集合写真 unknown.jpg です。

  1. フェイスエンコーディング = []
  2.  
  3. 画像内の画像の場合:
  4.  
  5. エンコーディング = face_recognition.face_encodings(画像)[0]
  6.  
  7. face_encodings.append(エンコーディング)
  8.  
  9. 不明な顔エンコーディング = face_recognition.face_encodings(不明な画像)

face_recognition.face_encodings は、画像内のすべての顔の 128 ビットのベクトルを返します。 1人の人物の写真には顔が1つしかないため、face_recognition.face_encodings(image)[0]は最初の要素のみを取得します。グループ写真には 2 つの顔が含まれているため、unknown_face_encodings には 2 つの 128 ビット ベクトルが含まれます。

  1. 顔の位置 = 顔認識.顔の位置(不明な画像)
  2.  
  3. i範囲(len(unknown_face_encodings))内である場合:
  4.  
  5. 不明なエンコーディング = 不明なフェイスエンコーディング[i]
  6.  
  7. 顔の位置 = 顔の位置[i]
  8.  
  9. 、下、= 顔の位置
  10.  
  11. cv2.rectangle(未知の画像、()、(、下)、(0、255、0)、2)
  12.  
  13. 結果 = face_recognition.compare_faces(face_encodings, unknown_encoding)
  14.  
  15. j範囲(len(結果))内にある場合:
  16.  
  17. 結果[j]の場合:
  18.  
  19. 名前= 名前[j]
  20.  
  21. cv2.putText(不明な画像、名前、(-10、-10)、cv2.FONT_HERSHEY_SIMPLEX、0.5、(0、255、0)、2)
  22.  
  23.  
  24.  
  25. 未知の画像RGB = cv2.cvtColor(未知の画像、cv2.COLOR_BGR2RGB)
  26.  
  27. cv2.imshow( "出力" , unknown_image_rgb)
  28.  
  29. cv2.waitKey(0)

face_locations は各顔の位置情報を格納します。

ループ内では、検出された各顔をフレームに収めるために cv2.rectangle を呼び出します。

face_recognition.compare_faces は、既知の顔の 128 ビット ベクトルを各未知の顔の 128 ビット ベクトルと比較し、結果を結果配列に格納します。結果配列の各要素は True または False であり、その長さは面の数に等しくなります。結果内の各要素は、既知の顔と 1 対 1 で対応します。特定の位置の要素が True の場合、未知の顔がこの既知の顔として認識されていることを意味します。

識別された顔ごとに、cv2.putText を呼び出して画像にラベルを付けます。

コードはこれだけです。

テスト

興奮の瞬間がまたやってきました! 結果をテストしてみましょう。

上記のプログラムを実行すると、次の結果が表示されます。

ウィリアム王子とケイト王女の顔は正確に認識されました。顔の領域は緑色の枠で囲まれ、認識された人物の名前が枠の上に表示されます。

これまでに顔認識に成功しています。

今後は、切り抜き、手描き効果、QR コード認識、検証コード認識など、画像処理の他の興味深いアプリケーションも随時更新していきます。

<<:  WeChat の赤い封筒のランダム アルゴリズムはどのように実装されていますか?

>>:  李開復氏はAIバブルが年末までに崩壊すると予測、ルクン氏:それは本当だ

ブログ    
ブログ    
ブログ    

推薦する

[乾物] Tencent Cloud FPGA 上のディープラーニング アルゴリズム

テンセントクラウド基礎製品センターとテンセントアーキテクチャプラットフォーム部門で構成されたテンセン...

歴史を作ろう!地球からのドローンが火星へ飛び立ち、NASAはこのようにライト兄弟に敬意を表す

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

9つの主要テーマ!機械学習アルゴリズム理論に関する面接の質問の要約

[[342976]]機械学習は、強力な理論的側面と実践的側面を備えた技術分野です。機械学習関連の仕事...

アマゾンがホームロボット「Vesta」を開発、2019年に販売開始

海外メディアの報道によると、アマゾンのハードウェア研究開発部門Lab126は、「Vesta」(ヴェス...

プログラミングに熟練する必要はありません。人工知能への参入は思っているより簡単です

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

ハーバード大学のロボット魚は、知的に協力し、集団で「泳ぎ」、サイエンス誌の表紙に登場しました。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

深層強化学習について知っておくべきこと

[51CTO.com クイック翻訳] 現在、機械学習(ML)と人工知能(AI)に関連するアルゴリズム...

...

RPA がコロナウイルス危機を乗り越えるために組織をどのように支援しているか

世界中でコロナウイルスが流行しているため、多くの組織が優先順位を変更しました。その結果、組織がコスト...

視覚的な「脳の読み取り」:脳の活動から見える世界を再構築する

人間の知覚は客観的な刺激だけでなく過去の経験によっても形成され、それらが組み合わさって脳内で複雑な活...

実験から実装まで: AI が金融サービスでその価値を証明している方法

金融機関にとって、新型コロナウイルス感染症のパンデミックからの回復は、人工知能(AI)と機械学習(M...

インテリジェントな人間と機械のインタラクションがデジタルサービスを新たなレベルに引き上げます

2020年という「長い」年が、あっという間に終わりを迎えようとしています。この時期を振り返ると、長い...

6つの興味深い画像グレースケール変換アルゴリズム

[楊静卓のブログより引用]序文白黒写真の時代は過ぎ去りましたが、今、昔の写真を見ると、昔に戻ったよう...

アルゴリズム問題の分析プロセス

[[384555]]トピックを理解する最近アルゴリズムの問​​題をたくさん見ていますが、小さな問題を...

Baidu Brainの生体検知+合成画像識別、顔の「写真活性化」ブラックマーケット攻撃を1秒で捉える

現在、顔認識技術の成熟度が増すにつれ、特にDeepFakeやFaceSwapなどの顔編集・生成技術の...