免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1474 | 回复: 0
打印 上一主题 下一主题

基于OpenCV的PHP图像人脸侦查技术 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-02 16:15 |只看该作者 |倒序浏览

                本文所介绍的技术不是原创,而是从一个叫Robert
Eisele的德国人那里学习来的。他写了一个PHP扩展openCV,只封装了两个函数,叫face_detect和face_count。
openCV是一个开源的用C/C++开发的计算机图形图像库,非常强大,研究资料很齐全。本文重点是介绍如何使用php来调用其中的局部的功能。人脸侦
查技术只是openCV一个应用分支。
1.安装
从源代码编译成一个动态的so文件。
1.1.安装 OpenCV (OpenCV 1.0.0)
下载地址:http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948
#tar xvzf OpenCV-1.0.0.tar.gz
#cd opencv-1.0.0
#./configure
#make
#make install
#make check (检查是否安装全部正确)
提示: 不要指定安装路径,否则后面编译facedetect会找不到OpenCV的路径。
1.2 安装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
#phpize && ./configure && make && make install
编译完之后会提示facedetect.so 文件所在的位置。
最后确认在php.ini加入
extension=facedetect.so,重启apache.
2.函数使用
在phpinfo()里检查是否有facedetect这个模块。
从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);
    3.应用
    结合imagick可以将图片做一下应用。因为 face_detect只返回一个矩形参数,包含x,y坐标和w,h长宽参数。下面是我的一个应用demo

  • 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{  ?>
  •   "Content-Type" content="text/html; charset=utf-8" />  "POST" enctype="multipart/form-data">
  •   人脸识别试验:只支持jpg,png
      上传一张图片 "file" name="pic">
  •   "submit" value="upload">  
  •   }
  • ?>
    参考资料:
    http://www.xarg.org/2008/07/face-detection-with-php/
    http://www.opencv.org.cn/index.php/首页
    http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.html
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93831/showart_1888857.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP