opencv
インテルが開発・公開しているオープンソースの
コンピュータビジョン向けライブラリってことでなんか
むか~しチラっとみておもしろそーと思ったが、難しそうなので辞めた。
で、今更なぜ?と思っていたが画像から顔の
判定をするのに便利だから。
ってことでインストール開始。
前回,RPMforgeを入れたので
yum -y install opencv
yum -y install opencv-devel
yum -y install opencv-python
で一通りのものは入る。
他のサイトで見てきたサンプルをコピーして使ってみよう。
以下コピペ&改造
sample1.pyという名で保存
#!/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)
print src_img.width
print src_img.height
# ブーストされた分類器のカスケードを読み込む
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)
# 検出された全ての顔位置に枠を描画する
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__':
#引数にURLをとる
url = sys.argv[1]
m = md5.new(url)
filename = m.hexdigest()
image_name = '/home/devel/org.jpg'
# URLから画像を取得して保存
getImageFileFromURL(url, image_name)
# 顔認識処理
img = faceDetect(image_name)
new_image_name = '/home/devel/new_' + filename + '.jpg'
# 顔認識画像を保存
cvSaveImage(new_image_name, img)
いざ実行
./sample1.py [適当な画像URL]
500
600
terminate called after throwing an instance of 'int'
アボートしました
Buu サノバビッチ
うごかね~。
なんだかわからんけど。
cascade_name = "haarcascade_frontalface_default.xml"
のところがダメみたい。
haarcascade_frontalface_default.xml をフルパスに変更
(パスがとおってりゃ動くのかもね~。)
cascade_name = "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"
再度
./sample1.py [適当な画像URL]
おーできた。
こいつはオブジェクト検出器を学習させて
他のものも認識できるらしい。
好みの顔ばっかり学習させれば、好みの顔だけヒットしてくれるのかな?
それともそれはまた別な判定が必要なのかね。w
少しやってみる。
以上。