Home > Backend Development > PHP Tutorial > OpenCV跟PHP的人脸识别技术

OpenCV跟PHP的人脸识别技术

WBOY
Release: 2016-06-13 13:04:15
Original
1305 people have browsed it

OpenCV和PHP的人脸识别技术

OpenCV安装之前必须依赖的包:(请先安装好)
pkgconfig
libpng
zlib
libjpeg
libtiff
python

[OpenCV安装] www.opencv.org.
tar xvzf OpenCV-1.0.0.tar.gz
cd opencv-1.0.0
./configure
make
make install
make check (检查是否安装全部正确)

[facedetect] 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

[ImageMagick] http://www.imagemagick.org/
tar jxvf ImageMagick-6.5.0-0.tar.bz2
cd ImageMagick-6.5.0-0
./configure
make
make install

[imagick] 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
在[PHP]模块下增加:
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."' alt=" OpenCV跟PHP的人脸识别技术 " > => <img  src='".$pic_dst[$key]."' alt=" OpenCV跟PHP的人脸识别技术 " ><br>";


}


}


?>
Copy after login

?

?

目前,还为测试,等应用后,再公布实验结果~~

?

?

1 楼 悠悠晃晃 2011-03-21  
facedetect在Windows服务器下如何安装啊,貌似没找到,你有吗?

2 楼 purpen 2011-03-26  
悠悠晃晃 写道
facedetect在Windows服务器下如何安装啊,貌似没找到,你有吗?
没有,没在windows下测试。
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template