OpenCVを使った顔認識を試してみる

インテルが開発・公開しているオープンソースのコンピュータビジョンのライブラリ OpenCV を試してみました。コンピュータビジョン(computer vision)とは、「ロボットの目」を作る研究分野だそうです。画像処理や構造解析、物体追跡などたくさんの機能が実装されていますが、その中でも多くの人が試している顔認識をやってみました。


Photo by weboo

Fedora 8だとパッケージが用意されているので、下記のコマンドでインストールできます。

# yum install opencv opencv-python

そして、使ったプログラムがこれ。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from opencv.cv import *
from opencv.highgui import *

def faceDetect(imgfile):
  # 画像を読み込む
  src_img = cvLoadImage(imgfile, CV_LOAD_IMAGE_COLOR)
  src_gray = cvCreateImage(cvSize(src_img.width, src_img.height),
                             IPL_DEPTH_8U, 1)

  # ブーストされた分類器のカスケードを読み込む
  cascade_name = "haarcascade_frontalface_default.xml"
  cascade = cvLoadHaarClassifierCascade(cascade_name, cvSize(1,1))
  
  # メモリを確保し,読み込んだ画像のグレースケール化,ヒストグラムの均一化を行う
  storage = cvCreateMemStorage(0)
  cvClearMemStorage(storage)
  cvCvtColor(src_img, src_gray, CV_BGR2GRAY)
  cvEqualizeHist(src_gray, src_gray)

  # 顔検出
  faces = cvHaarDetectObjects(src_gray, cascade, storage,
                              1.11, 4, 0, cvSize(40, 40))

  # 検出された全ての顔位置に枠を描画する
  for c, i in enumerate(faces):
    pt1 = cvPoint(int(i.x), int(i.y))
    pt2 = cvPoint(int(i.x + i.width), int(i.y + i.height))
    cvRectangle(src_img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0);

  return src_img

if __name__ == '__main__':
  if len(sys.argv) < 2:
    print "Usage: facedetect <filename>\n" ;
    sys.exit(-1)
  img = faceDetect(sys.argv[1])

  # 画像を出力
  cvSaveImage("output.jpg", img)

これはいろいろ応用ができそうで面白いですね。haarcascade_frontalface_default.xml のパターンデータが肝なんだけど、自分で学習させようとする場合は、背景画像が3,000通り、対象物の画像が7,000通りくらい必要だそう。ただし、トレーニング用の画像を自動生成することも可能なようなので頑張ればできなくもなさそうですね。

その後、erogeekな人のプロジェクトはどうなったんだろう…

OpenCV プログラミングブック
奈良先端科学技術大学院大学
毎日コミュニケーションズ (2007/09/22)
売り上げランキング: 4367

 

関連リンク:
Open Source Computer Vision Library
opencv.jp - OpenCV サンプルコード
OpenCV for Linux


3 Comments so far »

  1.  

    weboo said

    on 2008-02-03 12:47 a.m.

    ちなみに、うくく。の人がかなり前に試しています。

    http://d.hatena.ne.jp/mopemope/200703...

  2.  

    negipo said

    on 2008-02-24 9:19 p.m.

    はじめまして
    erogeekな人のプロジェクトは現在こうなってます
    http://polog.tumblr.com/post/23533633
    すごすぎ

  3.  

    weboo said

    on 2008-02-25 8:51 p.m.

    はじめまして
    erogeekさんのプロジェクト進んでるんですねー、楽しみ。

    negipoさんの InFullVolume.user.js も素敵すぎます!


このエントリーのはてなブックマーク (-)