基于OpenCV的PHP图像人脸识别技术


Posted in PHP onOctober 11, 2009

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

<?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> 
<? 
} 
?>

参考资料:
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

PHP 相关文章推荐
PHP与SQL注入攻击[二]
Apr 17 PHP
PHP 面向对象 final类与final方法
May 05 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
php格式化电话号码的方法
Apr 24 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
CI框架表单验证实例详解
Nov 21 PHP
PHP 身份验证方面的函数
Oct 11 #PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 #PHP
关于页面优化和伪静态
Oct 11 #PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 #PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 #PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 #PHP
PHP 日期时间函数的高级应用技巧
Oct 10 #PHP
You might like
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
浅谈python之新式类
2018/08/12 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
超越自我演讲稿
2014/05/21 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
担保书格式
2015/01/20 职场文书
技术入股协议书
2016/03/22 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
Hive常用日期格式转换语法
2022/06/25 数据库