Q132284591 发表于 2017-3-30 08:03:00

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]
查看完整版本: OpenCV和PHP的人脸识别技术