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需要爆発の機会を無駄にしない

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

ディープラーニングの台頭から10年:OpenAIのイノベーターたち

AlexNet、AlphaGo、GPT、CLIP、DALL-E、Codex、これらはAIの世界でセン...

...

クラウド管理と運用にAIを適用する方法

AI は、クラウドの管理と運用に大変革をもたらすものとして台頭しています。しかし、AI とクラウド ...

...

...

2021年のAIの発展:エッジAIは止められない

[[388887]]人工知能研究を専門とする外国の機関が、人工知能の実務家を対象に、2021年の人工...

革新的なトランスフォーマー!清華大学はSOTAを実現する長期時系列予測のための新しいバックボーンネットワークを提案

[[410176]]予測時間を可能な限り延長することが時系列予測の中心的な課題であり、エネルギー、輸...

PyTorch ガイド: ディープラーニング モデルのトレーニングを高速化する 17 のヒント!

PyTorch でディープラーニング モデルをトレーニングする場合、モデルのトレーニングを高速化す...

Spring-Smart-DI は実装クラスを動的に切り替えます。非常に優れています。

実際のシステム開発のシナリオでは、同じ機能を複数のサービスプロバイダーに接続する必要があるというタイ...

完全なルーティングアルゴリズムの設計目標の分析

ルーティング アルゴリズムには通常、次の 1 つ以上の設計目標があります。最適化:最適化とは、メトリ...

AIの大覚醒:チューリング賞受賞者のベンジオ氏は、AIは意識を持ち、将来の機械学習の核となるのは注意メカニズムであると語る

人工知能は意識を発達させることができるか?これはアメリカのテレビシリーズ「ウエストワールド」で取り上...

...

PG&E、AIを活用して山火事のリスクを軽減

2018年、パシフィック・ガス・アンド・エレクトリック(PG&E)の送電線の故障により発生し...

20200202 千年に一度の対称性の日、すべての「回文アルゴリズム」をキャッチする時が来ました!

[[313923]]今日は2020年2月2日、「千年に一度の対称の日」として知られています。202...