Chinaunix首页 | 论坛 | 博客
  • 博客访问: 600469
  • 博文数量: 129
  • 博客积分: 6240
  • 博客等级: 准将
  • 技术积分: 1765
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-18 15:42
文章分类

全部博文(129)

文章存档

2015年(1)

2012年(3)

2011年(6)

2010年(14)

2009年(105)

我的朋友

分类:

2009-04-02 16:15:32

本文所介绍的技术不是原创,而是从一个叫Robert Eisele的德国人那里学习来的。他写了一个PHP扩展openCV,只封装了两个函数,叫face_detect和face_count。 openCV是一个开源的用C/C++开发的计算机图形图像库,非常强大,研究资料很齐全。本文重点是介绍如何使用php来调用其中的局部的功能。人脸侦 查技术只是openCV一个应用分支。

1.安装
从源代码编译成一个动态的so文件。

1.1.安装 OpenCV (OpenCV 1.0.0)
下载地址:

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

提示: 不要指定安装路径,否则后面编译facedetect会找不到OpenCV的路径。


1.2 安装facedetect
下载地址

#tar xzvf facedetect-1.0.0.tar.gz
#cd facedetect-1.0.0
#phpize && ./configure && make && make install


编译完之后会提示facedetect.so 文件所在的位置。

最后确认在php.ini加入
extension=facedetect.so,重启apache.

2.函数使用
在phpinfo()里检查是否有facedetect这个模块。
从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下

  1. //检查有多少个脸型
  2. var_dump(face_count('party.jpeg', haarcascade_frontalface_alt.xml'));

  3. //返回脸型在图片中的位置参数,多个则返回数组
  4. $arr = face_detect('party.jpeg', haarcascade_frontalface_alt2.xml');
  5. print_r($arr);

3.应用
结合imagick可以将图片做一下应用。因为 face_detect只返回一个矩形参数,包含x,y坐标和w,h长宽参数。下面是我的一个应用demo

  1. if($_FILES){

  2. $img = $_FILES['pic']['tmp_name'];
  3. $arr = face_detect($img'haarcascade_frontalface_alt2.xml');

  4. //$arr1 = face_detect($img, 'haarcascade_frontalface_alt_tree.xml');

  5. if(is_array($arr1)) $all =array_merge($arr,$arr1);
  6. else $all = $arr;

  7. $im = new Imagick($img);
  8. //$draw =new ImagickDraw();
  9. //$borderColor = new ImagickPixel('red');
  10. //$draw->setFillAlpha(0.0);
  11. //$draw->setStrokeColor  ($borderColor);
  12. //$draw->setStrokeWidth  (1);
  13. if(is_array($all)){
  14.   foreach ($all as $v){
  15.     $im_cl = $im->clone();
  16.     $im_cl->cropImage($v['w'],$v['h'],$v['x'],$v['y']);
  17.     
  18.     $im_cl->swirlImage(60);
  19.     $im->compositeImage( $im_cl, Imagick::COMPOSITE_OVER , $v['x'], $v['y'] );

  20.     
  21.     //$draw->rectangle($v['x'],$v['y'],$v['x']+$v['w'],$v['y']+$v['h']);
  22.     //$im->drawimage($draw);
  23.     
  24.     
  25.   }
  26. }

  27.   header( "Content-Type: image/png" );
  28.   echo $im;
  29. }else{
  30.   ?>
  31.   "Content-Type" content="text/html; charset=utf-8" />
  32.   "POST" enctype="multipart/form-data">
  33.   人脸识别试验:只支持jpg,png
  34.   上传一张图片 "file" name="pic">
  35.   "submit" value="upload">
  36.   
  37.   
  38. }
  39. ?>




参考资料:

首页
~agam/cs512/lect-notes/opencv-intro/index.html
阅读(1163) | 评论(0) | 转发(0) |
0

上一篇:As400 V5R1的安装

下一篇:cisco交换机

给主人留下些什么吧!~~