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

2015-01-24信息快讯网

本文所介绍的技术不是原创,而是从一个叫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
 
<?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

zend api扩展的php对象的autoload工具
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Zend Studio (eclipse)使用速度优化方法
php expects parameter 1 to be resource, array given 错误
在MongoDB中模拟Auto Increment的php代码
zend framework多模块多布局配置
php array_unique之后json_encode需要注意
snoopy 强大的PHP采集类使用实例代码
Windows 下的 PHP-PEAR 安装方法
理解php原理的opcodes(操作码)
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
PHP OPCode缓存 APC详细介绍
php excel类 phpExcel使用方法介绍
由php的call_user_func传reference引发的思考
PHP三层结构(下) PHP实现AOP第1/2页
PHP中文URL编解码(urlencode()rawurlencode()
用PHP为SHOPEX增加日志功能代码
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
用Zend Encode编写开发PHP程序
用mysql触发器自动更新memcache的实现代码
PHP 身份验证方面的函数
使用zend studio for eclipse不能激活代码提示功能的解决办法
php 服务器调试 Zend Debugger 的安装教程
frename PHP 灵活文件命名函数 frename
PHP高级OOP技术演示
PHP has encountered an Access Violation at 7C94BD02解决方法
PHP 源代码分析 Zend HashTable详解第1/3页
PHP 配置文件中open_basedir选项作用
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
PHP mb_convert_encoding 获取字符串编码类型实现代码
PHP Pear 安装及使用
php 什么是PEAR?(第三篇)
php 什么是PEAR?(第二篇)
php 什么是PEAR?
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Optimizer与Debugger兼容性问题的解决方法
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
15种PHP Encoder的比较
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
©2014-2024 dbsqp.com