OpenCV 使用可能なCascadeClassifierの種類と効果
OpenCVにデフォルトで付属しているカスケードフィルターファイルは以下のとおり。haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_lowerbody.xml
haarcascade_mcs_eyepair_big.xml
haarcascade_mcs_eyepair_small.xml
haarcascade_mcs_leftear.xml
haarcascade_mcs_lefteye.xml
haarcascade_mcs_mouth.xml
haarcascade_mcs_nose.xml
haarcascade_mcs_rightear.xml
haarcascade_mcs_righteye.xml
haarcascade_mcs_upperbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_smile.xml
haarcascade_upperbody.xml
こんなコードでフィルターの効果を試してみます。
- # -*- coding:utf-8 -*-
- import numpy
- import cv2
- cascade_path = '/usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml'
- image_path = 'sample.jpg'
- color = (255, 0, 0) #青
- #ファイル読み込み
- image = cv2.imread(image_path)
- #グレースケール変換
- image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
- #カスケード分類器の特徴量を取得する
- cascade = cv2.CascadeClassifier(cascade_path)
- #物体認識(顔認識)の実行
- facerect = cascade.detectMultiScale(
- image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
- if len(facerect) > 0:
- #検出した顔を囲む矩形の作成
- for rect in facerect:
- cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
- #認識結果の保存
- cv2.imwrite("detected.jpg", image)
解析対象の写真はこちらです。

http://www.pakutaso.com/
haarcascade_eye.xml

haarcascade_eye_tree_eyeglasses.xml

haarcascade_frontalface_alt.xml

haarcascade_frontalface_alt2.xml

haarcascade_frontalface_alt_tree.xml

haarcascade_frontalface_default.xml

haarcascade_fullbody.xml

haarcascade_lefteye_2splits.xml

haarcascade_lowerbody.xml

haarcascade_mcs_eyepair_big.xml

haarcascade_mcs_eyepair_small.xml

haarcascade_mcs_leftear.xml

haarcascade_mcs_lefteye.xml

haarcascade_mcs_mouth.xml

haarcascade_mcs_nose.xml

haarcascade_mcs_rightear.xml

haarcascade_mcs_righteye.xml

haarcascade_mcs_upperbody.xml

haarcascade_profileface.xml

haarcascade_righteye_2splits.xml

haarcascade_smile.xml

haarcascade_upperbody.xml

まとめ
haarcascade_fullbodyやhaarcascade_lowerbodyはサンプルがまずかったですね。
どうもネクタイを締めているとそこを顔と認識してしまうようです。
haarcascade_frontalface_alt_treeが顔認識では一番性能が良さそうです。
(このサンプルではですが)
- 関連記事
-
- apache2 mod_access_tokenをPythonから使用する
- Python + OpenCV + pillowで笑い男を顔に上書き
- OpenCV 使用可能なCascadeClassifierの種類と効果
- Elasticsearch Pythonでsettinsとmappingを指定する
- Elasticsearch 日本語データの分かち書きと検索(kuromoji使用)
コメント