顔認証のソースコードを解説!(調べるのが面倒くさい人はこれを見ればわかる!)

RaspberryPi
スポンサーリンク

ラズパイとOpenCvを使って女優の顔認識をしてみる」を前回行いました。

そこではソースコードの解読を行わなかったので、本記事では詳しく解説していきます!

「顔認識に必要なライブラリまとめ(cv2. os. PIL)」と一緒に見ていただくと、理解が深まります。

では早速始めましょう。

顔認識ソースコード解説

以前の記事とソースコードは全く同じです。

01_face_detaset.py

1~2 ライブラリインストール
3動画ファイル読み込み用のcamインスタンスを生成
4~5フレームの大きさを設定横480、高さ640ピクセル(下図参照)
6カスケード分類器の読み込み
8~9 id入力待機
12~無限ループ
13動画で得た画像ファイルの読み込み(imgに画像データ格納)
14~15取得画像を左右上下反転、白黒に
16カスケード分類器を用いて正面の顔を識別
17~18OpenCVで画像(img)中に長方形を描画する際は、左上のx,y座標(x,y),と右下のx,y座標(x+w,y+h)がそれぞれ必要である。 x,y,w,hと4つ指定しているのは、facesに格納される戻り値がx軸,y軸,w(横幅),h(高さ)であるため
19画像取得分のcountをインクリメント
21~22取得した画像を指定したディレクトリに保存し、画面に表示する
23~27waitkey(100)で100ミリ秒キーが押されるまで待つ。 ESCキー(キー番号27)が押される、もしくは30枚写真を取得したらループから抜ける   
29~31動画ファイルを開放して、画像表示の画面を閉じる

設定したフレームはこのようなイメージです。

https://towardsdatascience.com/real-time-face-recognition-an-end-to-end-project-b738bb0f7348から引用

02_face_detaset.py

1~4必要なライブラリをインストール
6パスを定義(画像へのアクセス用)
7識別機の訓練に使用するLBPHFaceRecognizerをインスタンス化
8カスケード分類器の読み込み
10~別フォルダから画像とidを取得する関数
11datasetsに格納されている画像一覧をリストとして取得。listdir()はリストでファイル(ディレクトリ)を返すので、for文でそれらをfに格納。そのfをパス(datasets)と一つずつつなげている。
12~13 認識した顔、idを格納するリストを定義
14~各画像に操作を施す
15~16白黒で画像をオープン、配列にし、uint8型に変更(通常、画像は符号なし8ビット整数で符号化される。)
17ファイル名からidを抜き出す処理
18取得した画像の顔を検出する
19~22リストに長方形(y:y+h,x:x+w)を格納し2つの戻り値を返す
24faces,idsに戻り値(リスト)を格納
25取得した画像を訓練する(Local Binary Patternの抽出)
27モデルをtrainerフォルダに保存

03_face_detaset.py

1~3     ライブラリインストール
4~8識別機を読み込み、フォント(画像に記述する際の)を定義
12読み取った画像に表示する名前をリストに格納する、各idと対応している
    id=0,None id=1,Name
14~16動画ファイル読み込みの設定
18~19最小の横幅(0.1*640=64)と高さ(0.1*480=48)を定義 
20~3001と同様なので省略
31~顔認識を行うfor文
32長方形を描画(0,255,0)は色、2は線の太さ
33predictで取得した画像を予測、戻り値としてconfidenceに確度を格納(確度が小さいほうが正答率が高い)
35~40confidenceが100より小さければ認識している、大きければ(分散が大きい)別人
42~43名前と確度を画面に表示する(画像を入れたい)
45画像(動画)を表示
46~以下、重複するため省略

理解を深めていただけたでしょうか?

分からないところがあれば、コメントしていただければお答えします!

コメント

タイトルとURLをコピーしました