Symfoware

Symfowareについての考察blog

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




こんなコードでフィルターの効果を試してみます。


  1. # -*- coding:utf-8 -*-
  2. import numpy
  3. import cv2
  4. cascade_path = '/usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml'
  5. image_path = 'sample.jpg'
  6. color = (255, 0, 0) #青
  7. #ファイル読み込み
  8. image = cv2.imread(image_path)
  9. #グレースケール変換
  10. image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
  11. #カスケード分類器の特徴量を取得する
  12. cascade = cv2.CascadeClassifier(cascade_path)
  13. #物体認識(顔認識)の実行
  14. facerect = cascade.detectMultiScale(
  15.                 image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
  16. if len(facerect) > 0:
  17.     #検出した顔を囲む矩形の作成
  18.     for rect in facerect:
  19.         cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
  20.     #認識結果の保存
  21.     cv2.imwrite("detected.jpg", image)





解析対象の写真はこちらです。

513_01.jpg

http://www.pakutaso.com/




haarcascade_eye.xml



513_02.jpg


haarcascade_eye_tree_eyeglasses.xml



513_03.jpg


haarcascade_frontalface_alt.xml



513_04.jpg


haarcascade_frontalface_alt2.xml



513_05.jpg


haarcascade_frontalface_alt_tree.xml



513_06.jpg


haarcascade_frontalface_default.xml



513_07.jpg


haarcascade_fullbody.xml



513_08.jpg


haarcascade_lefteye_2splits.xml



513_09.jpg


haarcascade_lowerbody.xml



513_10.jpg


haarcascade_mcs_eyepair_big.xml



513_11.jpg


haarcascade_mcs_eyepair_small.xml



513_12.jpg


haarcascade_mcs_leftear.xml



513_13.jpg


haarcascade_mcs_lefteye.xml



513_14.jpg


haarcascade_mcs_mouth.xml



513_15.jpg


haarcascade_mcs_nose.xml



513_16.jpg


haarcascade_mcs_rightear.xml



513_17.jpg


haarcascade_mcs_righteye.xml



513_18.jpg


haarcascade_mcs_upperbody.xml



513_19.jpg


haarcascade_profileface.xml



513_20.jpg


haarcascade_righteye_2splits.xml



513_21.jpg


haarcascade_smile.xml



513_22.jpg


haarcascade_upperbody.xml



513_23.jpg





まとめ



haarcascade_fullbodyやhaarcascade_lowerbodyはサンプルがまずかったですね。

どうもネクタイを締めているとそこを顔と認識してしまうようです。
haarcascade_frontalface_alt_treeが顔認識では一番性能が良さそうです。
(このサンプルではですが)

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/11/23(日) 17:02:09|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python + OpenCV + pillowで笑い男を顔に上書き | ホーム | Ruby + mail 独自のメールヘッダーを付与する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1556-065932f3
この記事にトラックバックする(FC2ブログユーザー)