PythonでOpenCV|haar-like cascade分類器で顔認識
デジカメなどに搭載されている顔認識。OpenCVを用いると簡単に使用できます。
今回も先人達の知恵を借りつつ、前回導入したJupyter Notebookの試運転も兼ねて顔認識を試してみました。
Jupyter NotebookもOpenCVも本当に便利。すごい世の中ですね!
とりあえず試す
細かい部分はいいから顔認識したい方・コードの説明がなくてもわかるという方は、githubに上げていますのでご参照ください。
ただ、一点だけ注意点があります。Anacondaの仮想環境を作成するときにPythonのバージョンを3.5に指定するのを忘れないようにしましょう。
OpenCVがPython3.6に対応していないようなので、ハマるかもしれません。
環境構築
macOS Sierra==10.12.6 pyenv==1.0.8-28-gcd22737 anaconda3==4.3.0 python==3.5.3 opencv==3.1.0
先ほど言っていたようにAnacondaの仮想環境を作成する際、pythonのバージョンを3.5に指定します。
それ以外は前回の記事の通りです。
もしくはgithubのページを参照ください。
conda create -n haarcascade_env python=3.5 jupyter matplotlib
仮想環境に入りOpenCVをインストール。jupyter notebookを立ち上げます。
activate haarcascade_env conda install -c https://conda.anaconda.org/menpo opencv3 jupyter notebook
コードの解説
OpenCVをインポートする際はcv2。ついでに、matplotlibのマジックコマンドとインポートも行なっています。
%matplotlib inline import matplotlib.pyplot as plt import cv2
OpenCVのメソッドを簡単に説明しておきます。
imreadは画像を読み込む。引数に画像のパスを含めた名前を記述。
cvtColorは画像を色変換する。引数はimreadで読み込んだ変数と行いたい色変換。haar-like cascade分類器を適用する際に、グレーに変換する必要があります。
rectangeleは画像に四角形を描き込む。引数は、imreadで読み込んだ変数・四角形の左上と右下の座標・線の色や太さ。
CascadeClassifierは分類器を生成。引数に分類器のパスを含めた名前を記述。
detectMultiScaleは分類器を適用して、顔の座標を返します。引数は、imreadで読み込んだ変数と分類器のステータスです。
img_name = "girls.jpg" img = cv2.imread(img_name) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # グレースケール化 cascade_path = "./haarcascades/haarcascade_frontalface_alt.xml" cascade = cv2.CascadeClassifier(cascade_path) # detectorを作成 facerect = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1) img_result = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) rect_color = (0, 255, 0) if len(facerect) > 0: for rect in facerect: x = rect[0] y = rect[1] width = rect[2] height = rect[3] cv2.rectangle(img_result, (x, y), (x + width, y + height), rect_color, thickness=2) plt.figure(figsize=(16,10)) plt.imshow(img_result)
img_nameがgirls.jpgになっているのはキュートなガールズ画像を用いたからです。おっさんの顔認識するよりも、可愛い女の子でやった方が身が入りますよねー!
気になる方はgithubのページへ
さいごに
OpenCVが用意してくれている分類器を用いることで手軽に顔認識ができます。また、先人達のコードをかなり参考にさせてもらいました。いつも感謝!
最後までお読みいただきありがとうございました。それじゃ!
参考にしたサイト