顔認識や顔検出を気軽に試してみたいと思いませんか?
実際に自分でやるといろいろと見えてくることもあります。
この記事では、簡単に顔認識・顔検出を試す方法を解説していきます。
本記事の内容
- PythonでOpenCVを動かす準備
- OpenCVで顔認識・顔検出を行う
- OpenCVのエラー
それでは、上記に沿って解説していきます。
PythonでOpenCVを動かす準備
OpenCVのインストールが必要です。
OpenCVのインストールには、次の記事を参考にしてください。
次は、顔認識・顔検出用のカスケード分類器のファイルをダウンロードです。
「カスケード分類器?」となるかもしれません。
機械学習的に言うと、顔画像を膨大に学んだモデルみたいなモノになります。
公式がGitHub上に置いてあるXMLファイルをダウンロードしましょう。
https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml
残るは、顔認識・顔検出したい画像ですね。
jpgで用意してください。
今回は、このは画像を顔認識・顔検出してみます。
ファイル名は、face.jpgです。
ローカルで検証するので、自分の顔画像でもいいと思います。
Webサービスなどでは、怖くて自分の顔写真なんてアップできません。
すべて準備ができたら、実際に顔認識・顔検出を試しましょう。
OpenCVで顔認識・顔検出を行う
OpenCVで顔認識・顔検出するためにコードは以下。
import cv2 XML_PATH = "haarcascade_frontalface_default.xmlのパス" INPUT_IMG_PATH = "読み込む画像のパス" OUTPUT_IMG_PATH = "出力する画像のパス" classifier = cv2.CascadeClassifier(XML_PATH) img = cv2.imread(INPUT_IMG_PATH) color = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) targets = classifier.detectMultiScale(color) for x, y, w, h in targets: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.imwrite(OUTPUT_IMG_PATH, img)
たった、これだけで顔認証・顔検出ができてしまいます。
各自で変更が必要なのは、次の値です。
XML_PATH = "haarcascade_frontalface_default.xmlのパス" INPUT_IMG_PATH = "読み込む画像のパス" OUTPUT_IMG_PATH = "出力する画像のパス"
XML_PATHは、ダウンロードしたカスケード分類器のファイルのパスです。
INPUT_IMG_PATHは、顔が映っているjpg画像のパスとなります。
OUTPUT_IMG_PATHは、顔認識・顔検出した後の結果画像のパスです。
例えば、次のような値を設定します。
XML_PATH = "C:\opencv\haarcascade_frontalface_default.xml" INPUT_IMG_PATH = "C:\opencv\img\face.jpg" OUTPUT_IMG_PATH = "C:\opencv\img\face_out.jpg"
上記のサンプルコードを実行すると、OUTPUT_IMG_PATHに画像ができているはずです。
手前にいる顔の見えない女性以外は、すべて顔認識ができています。
今回の画像では、ほぼ満点の出来ですね。
どうでしたか?
想像以上に簡単に顔認識・顔検出ができたと思います。
最後にエラーが出た場合について、記しておきます。
エラーが出なかったなら、以下は読む必要はありません。
追記 2021年10月23日
「手前の女性の顔も認識したい」という方は、次の記事をご覧ください。
OpenCVのエラー
この記事のサンプルコード実行時、エラーが出た場合の対処方法をまとめておきます。
XMLの読み込みでエラーが発生
このケースでは、次のエラーが表示されています。
error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
detectMultiScale関数がないという内容です。
これは、正常にカスケード分類器のファイルを読み込めていないことが原因です。
XML_PATHのパス設定が、適切ではないということになります。
適切にパスを設定すれば、このエラーは解決するはずです。
画像の読み込みでエラーが発生
このケースでは、次のエラーが表示されています。
error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
INPUT_IMG_PATHのパス設定が、適切ではないことが原因です。
適切にパスを設定すれば、このエラーは解決するでしょう。