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

ブログ    

推薦する

...

...

...

GPT-3を超えて、DeepMindは新しいお気に入りのGatoをリリースしましたが、「スープは変えても薬は変えない」と疑問視されています

大規模な言語モデリングにヒントを得て、Deepmind は同様のアプローチを適用し、マルチモーダル、...

Uber劉延東:Uberがフードデリバリーサービスを開始したとき、世界中のフードデリバリー会社は衝撃を受けた

[ 51CTO.comより引用 ] 2017年7月21日から22日まで、51CTOが主催する人工知能...

快手 - ICIP 2019 モバイルビデオ修復コンテストの登録開始

最近、Kuaishou-ICIP 2019モバイルビデオ復元コンテストの登録が正式に開始されました。...

...

人工知能2.0の時代、機械にスマートな脳を搭載する方法

[[419760]] 「クラブアップルの木は、その赤みがかった色にもかかわらず、霧雨の中にひとりぼっ...

GPTストアはまだオープンしていないが、模倣者がすでにこの脂身の多い肉に狙いを定めている。

著者: トーマス・クラバーン編纂者:ヤン・ジェン制作:51CTO テクノロジースタック(WeChat...

誰かが1週間でPASCALデータセットの17,120枚の画像をクリーンアップし、mAPを13%向上させました。

ある研究では、PASCAL VOC 2012 データセット内の 17,120 枚の画像を 1 週間で...

清華大学の博士が「チップレット・アクチュアリー」サミットを提案!ムーアの法則に近づくほど、マルチチップ統合のコスト効率は向上する。

Chiplet は、製品の歩留まり、パッケージの歩留まり、さまざまなコストなどを考慮しながら、大規...

2020年のトレンドの方向性: 産業用インターネットの人工知能アプリケーションが基礎となる

年末が近づくにつれ、多くの研究機関が2020年のトレンド予測を発表しています。これらの予測の多くは、...

人工知能: 物理的セキュリティ業界における最大の破壊者

[[347792]]今日のセキュリティとテクノロジーの分野における大きなトレンドの 1 つは、世界中...

GenAI 時代のデータ ガバナンスの青写真

ML と GenAI の世界に深く入り込むにつれて、データ品質への重点が重要になります。 KMS T...

人工知能は静かに到来し、世界のテクノロジー大手はAIをめぐる戦いを始めている

人工知能は長い間、小売業から農業に至るまで、さまざまな業界で主要な技術的焦点となってきており、大手企...