Heim  >  Artikel  >  Backend-Entwicklung  >  OpenCV跟PHP的人脸识别技术

OpenCV跟PHP的人脸识别技术

WBOY
WBOYOriginal
2016-06-13 13:04:151265Durchsuche

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>";


}


}


?>

?

?

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

?

?

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

2 楼 purpen 2011-03-26  
悠悠晃晃 写道
facedetect在Windows服务器下如何安装啊,貌似没找到,你有吗?
没有,没在windows下测试。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel: ip正则婚配 - php Nächster Artikel: 关于php 时间的处置