OpenCV和PHP的人脸识别技术
OpenCV安装之前必须依赖的包:(请先安装好)pkgconfig
libpng
zlib
libjpeg
libtiff
python
www.opencv.org.
tar xvzf OpenCV-1.0.0.tar.gz
cd opencv-1.0.0
./configure
make
make install
make check (检查是否安装全部正确)
http://www.xarg.org/download/facedetect-1.0.0.tar.gz
tar xzvf facedetect-1.0.0.tar.gz
cd facedetect-1.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make test
make install
http://www.imagemagick.org/
tar jxvf ImageMagick-6.5.0-0.tar.bz2
cd ImageMagick-6.5.0-0
./configure
make
make install
http://pecl.php.net/imagick
tar zxvf imagick-2.3.0b1.tgz
imagick-2.3.0b1
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make test
make install
[配置]
ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
看看有没有 facedetect.so 和 imagick.so
vi /usr/local/php/lib/php.ini
在模块下增加:
extension = facedetect.so
extension = imagick.so
重启apache
[测试代码]
从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下
//------------------
// 监测有几个人脸
//------------------
//检查有多少个脸型
var_dump(face_count('party.jpeg', haarcascade_frontalface_alt.xml'));
//返回脸型在图片中的位置参数,多个则返回数组
$arr = face_detect('party.jpeg', haarcascade_frontalface_alt2.xml');
print_r($arr);
//------------------
// 人脸扭曲
//------------------
<?php
if($_FILES){
$img = $_FILES['pic']['tmp_name'];
$arr = face_detect($img, 'haarcascade_frontalface_alt2.xml');
//$arr1 = face_detect($img, 'haarcascade_frontalface_alt_tree.xml');
if(is_array($arr1)) $all =array_merge($arr,$arr1);
else $all = $arr;
$im = new Imagick($img);
//$draw =new ImagickDraw();
//$borderColor = new ImagickPixel('red');
//$draw->setFillAlpha(0.0);
//$draw->setStrokeColor ($borderColor);
//$draw->setStrokeWidth (1);
if(is_array($all)){
foreach ($all as $v){
$im_cl = $im->clone();
$im_cl->cropImage($v['w'],$v['h'],$v['x'],$v['y']);
$im_cl->swirlImage(60);
$im->compositeImage( $im_cl, Imagick::COMPOSITE_OVER , $v['x'], $v['y'] );
//$draw->rectangle($v['x'],$v['y'],$v['x']+$v['w'],$v['y']+$v['h']);
//$im->drawimage($draw);
}
}
header( "Content-Type: image/png" );
echo $im;
}else{
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form method="POST" enctype="multipart/form-data">
人脸识别试验:只支持jpg,png<br>
上传一张图片 <input type="file" name="pic">
<input type="submit" value="upload">
</form>
<?
}
?>
//------------------
// 人脸识别
//------------------
<?php
header("Content-Type:text/html; charset:utf-8");
if(empty($_POST)) {
?>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<title>人脸识别</title>
</head>
<body>
<h2>人脸识别</h2>
PS: 请上传一张带有人脸的图片<br />
<form name="form" id="form" method="POST" enctype="multipart/form-data" action="">
上传图片:<input type="file" name="pic" size="20″">
<input type="submit" name="submit" value="上传">
</form>
</body>
</html>
<?php
} else {
$img = $_FILES['pic']['tmp_name'];
$arr = face_detect($img, 'haarcascade_frontalface_alt2.xml');
if(is_array($arr1)) {
$all = array_merge($arr,$arr1);
} else {
$all = $arr;
}
$allowtype = 1;
switch($_FILES['pic']['type']){
case 'image/pjpeg': $fix_pic.= ".jpg"; break;
case 'image/jpeg': $fix_pic.= ".jpg"; break;
case 'image/x-png': $fix_pic.= ".png"; break;
case 'image/png': $fix_pic.= ".png"; break;
default: $allowtype = 0; break;
}
if($allowtype == 0) {
echo "文件格式错误:只运行jpg或png图片";exit;
}
$tmp_name = time();
$src_pic = "./".$tmp_name.$fix_pic;
move_uploaded_file($_FILES['pic']['tmp_name'], $src_pic);
$pic_src = $pic_dst = array();
if(is_array($all)){
foreach ($all as $k => $v){
$tmp_name_new = $tmp_name."_".$k;
$x = $v['x'];
$y = $v['y'];
$w = $v['w'];
$h = $v['h'];
$dst_pic = "./".$tmp_name_new.$fix_pic;
// echo $src_pic."<br>";
// echo $dst_pic."<br>";
$cmd = "/usr/local/bin/convert -crop ".$w."x".$h."+".$x."+".$y." ".$src_pic." ".$dst_pic;
// echo $cmd."<br>";
echo `$cmd`;
$pic_src[] = "./".$tmp_name.$fix_pic;
$pic_dst[] = "./".$tmp_name_new.$fix_pic;
}
}
foreach($pic_src as $key => $value) {
echo "<img src='".$value."'> => <img src='".$pic_dst[$key]."'><br>";
}
}
?>
目前,还为测试,等应用后,再公布实验结果~~
页:
[1]