それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

OpenCVをインストールして使う.サンプルはPHPで

OpenCVを再び使うときにためにメモを。OpenCVは顔などの画像認識するためのアプリケーション。

顔認識楽しいです.

openCV

OpenCV をインストールする

yum --enablerepo=rpmforge install opencv opencv-devel

PHP版OpenCVのインストール

オープンソースで作った方がいるので感謝!!→

wget http://www.netflowers.co.jp/face_detect/face_detect-0.0.1.tar.gz
tar face_detect-0.0.1.tar.gz
cd face_detect-0.0.1
phpize
./configure
make && make install 
vim /etc/php.ini # face_dect を有効にする centos の場合は /etc/php/conf.d だったかな

PHPで顔認識するサンプル

<?php
if(!isset($_POST["img_url"])){
    ?>
	<form action="" method=post>
       <input type="text" size=120 name="img_url" ><input type="submit">
    </form>  
       <?php
		exit;
}else{
  file_put_contents("tmp", file_get_contents($_POST["img_url"]));
}
//ファイル名
$filename = "tmp";	
$mask_file = "./mask.png";
$out_filename = "out.jpg";
if(file_exists($out_filename)){
  unlink($out_filename);
}

//リソース作成
$pic  = ImageCreateFromJPEG($filename);
$cascade = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml";
$faces = face_detect($filename ,$cascade);

foreach($faces as $face) {
	$x = $face["x"];
	$y = $face["y"];
	$w = $face["width"];
	$h = $face["height"];
	
	$mask_out = imagecreate($x, $y);
	ImageCopy($pic, $mask_out, $x, $y,  0,0, $h, $w);
	imagejpeg($pic, $out_filename);
}
?>
<a href="./face_detect.php">他の画像</a>
<!-- 画像ファイルタグ-->
<p><img src="./out.jpg" width=480 / ></p>
<a href="./face_detect?move_left">左に動かす</a><br/>
<select name="pick_mask" >
<?php foreach($faces as $idx=> $face):?>
<option value="<?php echo $idx;?>" >マスク画像<?php echo $idx;?></option>
<?php endforeach;?>
</select>
<br/>
<?php echo sizeof($faces);?> 個の顔を検出しました<br/>
<?php foreach($faces as $face ){echo "<pre>";var_dump($face);echo "</pre>";} ?>

OpenCVの顔認識やってみて

デフォルトのXMLだと、顔が斜め30度傾くと検出しないね.プリクラの顔を検出しようとしたけど100%近い精度は無理だ。XMLを独自に書く複数組み合わせるか,画像を回転させないとダメだね、

あと眉毛も重要みたい.前髪で眉毛隠れると精度下がった.