Python による顔認識 (ソースコード付き)

Python による顔認識 (ソースコード付き)

Python は画像やビデオから顔を検出して認識できます。

顔の検出と認識は、コンピューター ビジョンの分野における研究のホットスポットの 1 つです。

顔認識の用途には、顔によるロック解除、セキュリティ保護などがあります。医師や医療スタッフは、顔認識を使用して医療記録や病歴を取得し、病気をより正確に診断します。

Python 顔認識について

この Python プロジェクトでは、画像から人物を認識する機械学習モデルを構築します。私たちのプロジェクトでは、顔認識 API と OpenCV を使用しました。

最新のテクノロジートレンドを常に把握

Telegram で DataFlair に参加しましょう!

ツールとライブラリ

  • Python 3.x の場合
  • CV2-4.5.2
  • ハンプティ・ダンプティ - 1.20.3
  • 顔認識-1.3.0

上記のパッケージをインストールするには、次のコマンドを使用します。

 pip インストールnumpy opencv - python

FaceRecognition をインストールするには、まず dlib パッケージをインストールします。

 pipdlib をインストール

次のコマンドを使用して顔認識モジュールをインストールします。

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

顔認識Pythonコードをダウンロードする

Python顔認識プロジェクトのソースコードをダウンロードしてください: 顔認識プロジェクトコード

プロジェクトデータセット

この顔認識プロジェクトを完了するには、独自のデータセットを使用できます。このプロジェクトでは、アメリカの人気ウェブシリーズ「フレンズ」をデータセットとして使用します。このデータセットは、前のセクションでダウンロードした顔認識プロジェクト コードに含まれています。

顔認識モデルを構築する手順

先に進む前に、顔認識と検出とは何かを理解しておきましょう。

顔認識とは、写真やビデオフレームから人の顔を識別または検証するプロセスです。

顔検出とは、顔検出アルゴリズムで使用するために、画像内の顔(位置とサイズ)を見つけて抽出するプロセスを指します。

顔認識方法は、画像内の一意に指定された特徴を見つけるために使用されます。ほとんどの場合、顔は削除され、切り取られ、拡大縮小され、グレースケールに変換されています。顔認識には、顔検出、特徴抽出、顔認識の 3 つのステップが含まれます。

OpenCV は C++ で書かれたオープンソース ライブラリです。コンピューター ビジョン タスク用のさまざまなアルゴリズムとディープ ニューラル ネットワークの実装が含まれています。

1.データセットを準備する

トレーニングとテストの 2 つのディレクトリを作成します。各俳優について、インターネットから画像を選択し、「train」ディレクトリにダウンロードします。選択した画像が、分類器が分類できるほど人間の顔の特徴を十分に表していることを確認してください。

モデルをテストするには、すべてのキャストを含むイメージを取得し、「test」ディレクトリに配置します。

お客様の利便性を考慮し、プロジェクト コードとともにトレーニング データとテスト データを追加しました。

2. モデルのトレーニング

まず必要なモジュールをインポートします。

 face_recognition をfr としてインポートします
cv2 をインポート
numpyをnp としてインポートする
インポートOS

顔認識ライブラリには、顔認識プロセスを支援するさまざまなユーティリティの実装が含まれています。

ここで、画像 (人物) の名前とそれぞれの顔のエンコーディングを格納する 2 つのリストを作成します。

 パス= "./train/"
知られている名前= []
既知の名前エンコーディング= []
images = os.listdir (パス)

顔エンコーディングは、目の間の距離、額の幅など、顔の特徴間の重要な測定値を表す値のベクトルです。

トレーニング ディレクトリ内の各画像をループし、画像内の人物の名前を抽出し、顔のエンコード ベクトルを計算して、対応するリストに情報を保存します。

 画像内の_ の場合:
image = fr.load_image_file ( パス+ _ )
image_path = パス+ _
エンコーディング= fr . face_encodings ( 画像)[ 0 ]
known_name_encodings . append ( エンコーディング)
known_names.append (os.path.splitext(os.path.basename ( image_path ) ) [ 0 ] .capitalize ( ))

3. テストデータセットでモデルをテストする

前述したように、テスト データセットにはすべての人物を含む画像が 1 つだけ含まれています。

CV2 imread() メソッドを使用してテスト イメージを読み取ります。

 test_image = "./test/test.jpg"
イメージ= cv2.imread ( test_image )

顔認識ライブラリには、画像内で検出された各顔の座標 (左、下、右、上) を特定する Face_Locations() という便利なメソッドが用意されています。これらの位置の値を使用すると、顔のエンコードを簡単に見つけることができます。

 face_locations = fr . face_locations ( 画像)
face_encodings = fr . face_encodings ( 画像, face_locations )

画像内の各顔の位置とそのエンコードをループします。次に、このエンコーディングを「トレーニング」データセット内の顔のエンコーディングと比較します。

次に、顔距離、つまりテスト画像のエンコードとトレーニング画像のエンコード間の類似度を計算します。ここで、そこからの最小距離を選択します。これは、テスト画像の顔がトレーニング データセット内の人物の 1 人であることを示します。

ここで、CV2 モジュールのメソッドを使用して、面の位置の座標を含む四角形を描画します。

 for ( toprightbottomleft )、 face_encoding in zip ( face_locationsface_encodings ):
一致するもの= fr . compare_faces ( 既知の名前のエンコーディング顔のエンコーディング)
名前= ""
face_distances = fr . face_distance ( 既知の名前のエンコーディング, face_encoding )
best_match = np.argmin ( 面の距離)
[ best_match ] と一致する場合:
name = 既知の名前[ ベストマッチ]
cv2 . 長方形( 画像、 ( )、 ( )、 ( 0、0、255 )2 )
cv2 . 長方形( 画像、( -15 ) 、( )、( 0、0、255 )cv2 . 塗りつぶし)
フォント= cv2.FONT_HERSHEY_DUPLEX
cv2.putText ( 画像 名前、( + 6- 6 )、 フォント1.0 、( 255,255,255 )1 )

CV2 モジュールの imShow() メソッドを使用して画像を表示します。

 cv2.imshow ( "結果" , 画像)

imwrite() メソッドを使用して、イメージを現在の作業ディレクトリに保存します。

 cv2.imwrite ( "./output.jpg" , 画像)

解放されていないリソース(ある場合)を解放します。

 cv2.waitKey ( 0 )
cv2.すべてのウィンドウを破棄します( )

Python 顔認識出力

モデルの出力を見てみましょう。

<<:  2022 年の 9 つの新しいテクノロジー トレンドと雇用機会

>>:  インテルは世界的なIT需要爆発の機会を無駄にしない

ブログ    
ブログ    

推薦する

...

CNNとRNNについての簡単な説明

[[338562]] 【51CTO.comオリジナル記事】 1 はじめに前回の記事では、ディープラー...

自動運転の体験はクールで、将来的には多くの交通アルゴリズムが登場するだろう

[[229949]]若い観客が自動運転車「ファントム」を体験[[229950]] [[229951]...

データセットを正しく分割するにはどうすればいいでしょうか? 3つの一般的な方法の概要

データセットをトレーニング セットに分割すると、モデルを理解するのに役立ちます。これは、モデルが新し...

AIは黄金時代を迎えているのか、それとも冬を迎えようとしているのか?

人工知能開発の世界的なブームは今も急速に進んでおり、止まる気配はありません。現在、数十カ国が経済成長...

Pytorch チュートリアル: 初心者向けクイックガイド

Python は、オープンソースの ML ライブラリ Pytorch のおかげで、データ サイエンス...

電荷ベースの原子シミュレーションのための事前学習済み汎用ニューラルネットワーク CHGNet

複雑な電子相互作用の大規模シミュレーションは、原子モデル化における最大の課題の 1 つです。古典的な...

...

李開復「2021年を予測」:4つの主要分野が前例のない発展の機会をもたらす

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

マスク氏は激怒:マイクロソフトはAI用のデータ収集にWindowsを使用しているが、登録なしでは使用できない

マスク氏が投稿したXダイナミックにより、Microsoft Windowsは論争の中心となった。事件...

ドバイ、街頭にロボット警察を配備へ

ロシア・トゥデイTVのウェブサイトは20日、UAE当局者の発言を引用し、UAE初のロボット警察が今年...

製造業におけるAI: インテリジェントロボットには次の4つの機能が必要です

インテリジェントロボットはインテリジェント製品の代表的なものです。知能ロボットには、少なくとも以下の...

2018 年に「破壊的な」変化をもたらす 12 のテクノロジー

[[223288]]人工知能から拡張現実まで、今年、将来を見据えた企業のビジネスを牽引する破壊的なテ...

Tofsee ボットネットは独自のドメイン名生成アルゴリズムを使用する

概要スイス政府コンピュータ緊急対応センター (GovCERT) は最近、Tofsee ボットネット ...

BingチャットAIの品質に問題があるとユーザーが報告、マイクロソフトはエクスペリエンスの改善を約束

ここ数週間、ユーザーは Microsoft Edge に組み込まれている GPT-4 AI チャット...