HDEラボの桜井です。
もう11月、札幌は雪が降ったとか。
さて、今回はPythonの修行がてら、OpenCVを使って顔認識プログラムをやってみました。
OpenCVとは、Intelが開発・公開しているオープンソースのCVライブラリです。
まずは、実際に動作を見てみましょう。
下のテキストボックスにJPEG画像のURLを入力して、「顔認識」ボタンを押します。
※認識できない場合もあるので、結構はっきりとした顔のある写真でやってみてください。
もう11月、札幌は雪が降ったとか。
さて、今回はPythonの修行がてら、OpenCVを使って顔認識プログラムをやってみました。
OpenCVとは、Intelが開発・公開しているオープンソースのCVライブラリです。
まずは、実際に動作を見てみましょう。
下のテキストボックスにJPEG画像のURLを入力して、「顔認識」ボタンを押します。
※認識できない場合もあるので、結構はっきりとした顔のある写真でやってみてください。
まずは、OpenCVのインストールを。
下記のようにソースを取得してインストールします。自分は、CentOS 5.2にインストールしました。
で、雑ですけどPythonプログラムを。
2008.01.08追記:rpmでpythonを導入している場合、python-develパッケージが必要です。
下記のようにソースを取得してインストールします。自分は、CentOS 5.2にインストールしました。
# wget http://downloads.sourceforge.net/opencvlibrary/opencv-1.1pre1.tar.gz?modtime=1224465510&big_mirror=1 # tar zxvf opencv-1.1pre1.tar.gz # cd opencv-1.1pre1 # ./configure --prefix=/usr # make # make install
で、雑ですけどPythonプログラムを。
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import urllib2 import os import md5 import cgi 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 = "/var/www/db/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(0, 0)) # 検出された全ての顔位置に枠を描画する 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 def getImageFileFromURL(url, filename): f = urllib2.urlopen(url) save_image = file(filename, "wb") save_image.write(f.read()) save_image.close() if __name__ == '__main__': # CGIでURLを取得 f = cgi.FieldStorage() url = f.getfirst('image_url', '') m = md5.new(url) filename = m.hexdigest() image_name = '/tmp/' + filename + '.jpg' # URLから画像を取得して保存 getImageFileFromURL(url, image_name) # 顔認識処理 img = faceDetect(image_name) new_image_name = '/tmp/new' + filename + '.jpg' # 顔認識画像を保存 cvSaveImage(new_image_name, img) os.remove(image_name) # 顔認識画像を表示 print "Content-Type: image/jpeg" print "" f2 = file(new_image_name) print f2.read() f2.close() os.remove(new_image_name)
2008.01.08追記:rpmでpythonを導入している場合、python-develパッケージが必要です。
Leave a comment