Heim > Artikel > Backend-Entwicklung > OpenCV跟PHP的人脸识别技术
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>"; } } ?>
?
?
目前,还为测试,等应用后,再公布实验结果~~
?
?
没有,没在windows下测试。