OpenCVを使い、顔認証を試してみました(ビギナーズ版)
はじめに
皆さん、AIって聞くけど、ってことないですか?
ですが、SiriやAlexa、Amazonオススメなど、実は日々の生活に欠かせないものになりつつあります。
では、やってみよう、というのがこのマガジンの趣旨になります。
初学者ですので、温かい目で見ていただければと思います。
きっかけは、先日、ストアカでRaspberryPi+OpenCVで顔認証という講座を受講してきました。
RaspberryPiを使って、画像系のIoTを作ってみたかったので即受講。以外に簡単に実装できること、RaspberryPiでも画像サイズを調整すれば軽快に動くことを実感してきました。
できる、と心のロックを外してくれる、自分にとってはいい講座でした。おススメです。
ところが、RaspberryPiで実装となると、現在半導体価格の高騰から入手困難ということも先生に教えてもらいました。
そこで、上の知識をもとに、簡単にPCで実装できないか?というのが発端です。
初心者でもできる、PC+Python+OpenCVでの顔認証
今回のテーマは、「初心者でも時間をかけずにできる」です。
そこで、Ptyhonではなく、Anacondaを用いての実装にチャレンジしてみました。
さらに使うパーツとして、
こちらのPythonプログラムを用いることにします。
用意するもの
Anacondaのインストール(WindowsでもMacでも)
だけです。カメラはPC(ノートを想定)搭載を利用します。
Anacondaのインストールは、
こちらのサイトをご参照ください。
最後、Add Anaconda3 to my PATH・・・
をチェックしておいたほうがビギナーは無難です。
実装手順1 OpenCVのインストール
Anacondaでは
conda install -c conda-forge opencv
で必要パッケージがインストールできます。
上のコマンドを、Windowsコマンドプロンプト、PowerShell、Anaconda promptから実行してください。(以下省略のため、ターミナル、といいます。Macの方はこちらのほうが馴染みがあるかと)
OpenCVのライブラリがインストールされます。
もちろん、仮想環境をお使いの方はOpenCV用仮想環境上で上を実行してください。
実装手順2 PythonプログラムをGitHubからダウンロード
プログラムを保管するフォルダーで、ダウンロードしたプログラム(Zipファイル)を解凍するだけです。
事前に、これらプログラムを保管する場所を作成します。
例えば、ユーザ以下などに、mkdir opencv により、フォルダーを作成し、そちらの中で作業します。
1.ダウンロードは、CodeからDownload ZIPでZipファイルをダウンロード
2.Zipファイルを保管先(opencvフォルダー)にエクスプローラーで移動する。
3.Zipを解凍
の3手順です。
エクスプローラーやコマンドプロンプトで、
のように、解凍されていればOKです。
もし、Gitが入っていれば保管先のフォルダー内でコマンドプロンプト上から、
git clone https://github.com/Mjrovai/OpenCV-Face-Recognition.git
を実行し、必要なファイルをクローンしてください。
この作業は、ZIPをダウンロードした場合は不要です。
実装手順3 PC用にプログラムを修正
2か所、プログラムを修正する必要があります。
Visual Studio Codeなどのエディター、もしくはメモ帳で、faceDetection.pyなどのスクリプトを表示してください。
表示されたら下記の2か所を修正してください。
1か所目 Cascade分類器の保存先の変更
#faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
faceCascade = cv2.CascadeClassifier('./Cascades/haarcascade_frontalface_default.xml')
上が元のプログラム、下が修正版です。
特に、フォルダーの区切りが、Windowsだと¥(もしくはバックスラッシュ)となる場合もあります。
これを変更したいと、分類器が読み込まれません。
2か所目 cv2.flip をコメントアウト
while True:
ret, img = cap.read()
#img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
元のままだとキャプチャ画像が逆さまに表示され、顔認証がうまく機能しません。
見た目もわるいですし。
で、こちらを外して映像がしっかり映るようにしてください。
他3つのPythonスクリプト、全て同じです。
実装手順4 実行
python faceDetection.py
と、ターミナル上で実行していただくだけです。
暫くするとカメラが起動し、カメラ映像とともに自分の顔を認証されたことを示す青い四角形が表示されます。
ちょっと逆光かつ、顔を隠しています。ただ周りに青色の四角(顔として認証されたことを示す)が表示されます。
終了はESCキーを押すと終わります。
顔を正しく認証させる場合、本当は顔のコントラストがはっきりしていることが望ましいです。
上のような状態では認識できなかったりするので、お気をつけください。