顔検出を実装するための50行のPythonコード

顔検出を実装するための50行のPythonコード

現在、顔認識技術は広く利用されており、決済や本人認証、美容カメラなどに利用されています。 iPhone ユーザーは、次の機能に精通している必要があります。

iPhoneの写真には、写真に写っている顔を認識して分類できる「People」機能があります。その原理も顔認識技術です。

この記事では主にPythonを使って顔検出を実装する方法を紹介します。顔検出は顔認識の基礎です。顔検出の目的は、写真に写っている顔を識別し、顔の特徴を見つけることです。顔認識は、顔検出に基づいて、その人物が誰であるかをさらに知らせることです。

さて、紹介はこれで終わりです。次に、環境の準備を始めましょう。

準備

この記事の顔検出は dlib に基づいていますが、これは Boost と cmake に依存しているため、まずこれらのパッケージをインストールする必要があります。Ubuntu を例に挙げます。

  1. $ sudo apt-get install build-essential cmake
  2.  
  3. $ sudo apt-get で libgtk-3-dev をインストールします
  4.  
  5. $ sudo apt-get install libboost- all -dev

私たちのプログラムは numpy と opencv も使用するため、これらのライブラリもインストールする必要があります。

  1. $ pip numpyをインストール
  2.  
  3. $ pip scipyをインストール
  4.  
  5. $ pip opencv-pythonをインストール
  6.  
  7. $ pip dlibをインストール

顔検出は、ここからダウンロードできる事前トレーニング済みのモデルデータに基づいています。

  1. http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

ローカル パスにダウンロードした後、解凍して、プログラムで使用される解凍されたファイルのパスを書き留めます。

dlibの顔の特徴

上記でダウンロードしたモデルデータを使用して、顔の68個の特徴点(x、y)の座標位置を推定します。これらの68個の座標点の位置は次の図に示されています。

手順は次の 2 つのステップで構成されます。

最初のステップは写真の顔の部分を検出することです

2 番目のステップでは、検出された顔領域内の器官 (目、鼻、口、あご、眉毛) をさらに検出します。

顔検出コード

まず、いくつかのユーティリティ関数を定義しましょう。

  1. rect_to_bb(rect)を定義します。
  2.  
  3. x = rect.left ()
  4.  
  5. y =矩形上端()
  6.  
  7. w = rect.right () - x
  8.  
  9. h = rect.bottom() - y
  10.  
  11. (x, y, w, h)を返す

この関数の rect は、dlib 顔領域検出の出力です。ここで、rect はシーケンスに変換され、その内容は矩形領域の境界情報となります。

  1. def shape_to_np(shape, dtype= "int" ):
  2.  
  3. 座標 = np.zeros((68, 2), dtype=dtype)
  4.  
  5. iが範囲(0, 68)内にある場合:
  6.  
  7. 座標[i] = (shape.part(i).x, shape.part(i).y)
  8.  
  9. 座標を返す

この関数のシェイプは、dlib 顔特徴検出の出力です。シェイプには、上記の顔特徴の 68 個のポイントが含まれます。この関数は、後続の処理を容易にするために、形状を Numpy 配列に変換します。

  1. def resize(画像、幅=1200):
  2.  
  3. r = 幅 * 1.0 / image.shape[1]
  4.  
  5. dim = (幅、 int (image.shape[0] * r))
  6.  
  7. サイズ変更 = cv2.resize(画像、dim、補間=cv2.INTER_AREA)
  8.  
  9. サイズ変更して返す

この関数内の画像は、検出したい画像です。顔検出プログラムの最初に、確認のために検出結果の画像を表示します。ここでサイズを変更するのは、画像が大きくなりすぎて画面からはみ出ないようにするためです。

次に、メインプログラムを開始しましょう。

  1. sysをインポートし、numpyをnpとしてインポートします。
  2.  
  3. dlibをインポート cv2をインポート
  4.  
  5. len(sys.argv) < 2の場合:
  6.  
  7. print "使用法: %s <画像ファイル>" % sys.argv[0]
  8.  
  9. sys.exit(1)
  10.  
  11. イメージファイル = sys.argv[1]
  12.  
  13. 検出器 = dlib.get_frontal_face_detector()
  14.  
  15. 予測子 = dlib.shape_predictor( "shape_predictor_68_face_landmarks.dat" )

顔を検出する画像をsys.argv[1]パラメータから読み取り、顔領域検出用の検出器と顔特徴検出用の予測子を初期化します。 shape_predictor のパラメーターは、先ほど解凍したファイルへのパスです。

  1. 画像 = cv2.imread(画像ファイル)
  2.  
  3. 画像 = resize(画像、幅=1200)
  4.  
  5. グレー = cv2.cvtColor(画像、cv2.COLOR_BGR2GRAY)
  6.  
  7. rects = detector(グレー, 1)

特徴領域を検出する前に、まず顔領域を検出する必要があります。このコードは opencv を呼び出して画像を読み込み、適切なサイズに変更し、グレースケールに変換し、最後に detector を使用して顔領域を検出します。写真には複数の顔が含まれている可能性があるため、ここでは複数の顔に関する情報を含む配列 rects を取得します。

  1. enumerate(rects)内の(i, rect)について:
  2.  
  3. 形状 = 予測子(灰色、四角形)
  4.  
  5. 形状 = shape_to_np(形状)
  6.  
  7. (x, y, w, h) = rect_to_bb(rect)
  8.  
  9. cv2.rectangle(画像、(x, y)、(x + w, y + h)、(0, 255, 0)、2)
  10.  
  11. cv2.putText(image, "Face #{}" .format(i + 1), (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
  12.  
  13. (x, y)形状次のようになります。
  14.  
  15. cv2.circle(画像, (x, y), 2, (0, 0, 255), -1)
  16.  
  17. cv2.imshow( "出力" , 画像)
  18.  
  19. cv2.waitKey(0)

検出された顔ごとに、顔の特徴(鼻、目、眉毛など)をさらに検出します。顔の部分は写真上で緑色の枠でマークし、顔の特徴は赤い点でマークします。

***検出マークの付いた写真を表示し、waitKey(0)は任意のキーを押してプログラムを終了できることを意味します。

これが私たちのプログラムです

テスト

次は、結果をテストするエキサイティングな瞬間です。

以下は元の写真です

[[217981]]

以下はプログラム認定の結果です

[[217982]]

顔の部分が緑色の四角で囲まれ、顔の特徴(鼻、目など)が赤い点でマークされていることがわかります。

簡単じゃないですか?

<<:  李偉博士がブロックチェーンについてわかりやすく語る:技術原理、実用的応用、AIとの統合

>>:  2018年の人工知能の発展に関する5つの予測

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

推薦する

これにより、あなたの写真は顔認識アルゴリズムを「ブロック」することができます

導入今日の強力な顔認識システムの普及は、個人のプライバシーに真の脅威をもたらします。誰でもインターネ...

...

Red Hat は Ansible の自動化に IBM Watsonx コード生成を採用

Red Hat Inc. は本日、情報技術自動化のための生成 AI サービスである IBM Wats...

...

顔認識にもマスターキーはあるのでしょうか?

顔認識は、携帯電話のロック解除、住宅コミュニティへの出入り、消費者の支払い、ビジネス取引の処理など、...

...

人工知能がサイバーセキュリティに及ぼす3つの影響

人工知能 (AI) と機械学習 (ML) は、人々の働き方、話し方、ビジネスのやり方を根本的に変えて...

Google の公式 Android Market ランキング アルゴリズムとルール

1. ランキングの計算式にはどのような指標が含まれていますか?指標 A、B、C とは何ですか? 重み...

...

スマートカーの時代において、あなたの安全とプライバシーを誰が保証するのでしょうか?

電気スマートカーの発展により、自動車はもはや独立した機械的なハードウェアボックスではなく、センシング...

ChatGPTを使用してスマートコントラクトとブロックチェーンに革命を起こす方法

1. はじめに近年、人工知能(AI)の進歩により、さまざまな業界に革命が起きています。 ChatGP...

ファーウェイの「社会的採用停止」の背景:特殊分野を除き、レベル19以上の専門家のみを採用

[[247527]]コストを削減し、効率を向上させるために、人材戦略は変わりますか?北京青年報は10...

...

テンセント AI ラボが初の自動モデル圧縮フレームワークのソースを公開: ディープラーニングをポケットに

テンセントAIラボ機械学習センターは本日、世界初の自動ディープラーニングモデル圧縮フレームワーク「P...

AIが業界全体でビジネス成果をどのように変革しているか

昨年末以来、人工知能の発展の勢いは止められないようです。 GPT-4 のような並外れた認知能力を備え...