PHP调用OpenCV实现人脸识别与图像处理
本文详细介绍如何在PHP环境中调用OpenCV库实现人脸识别功能。内容涵盖从源码编译OpenCV及facedetect扩展模块的安装步骤,配置php.ini加载扩展,到使用face_detect函数获取人脸坐标。结合Imagick库,演示了如何对检测到的人脸区域进行扭曲等特效处理,并提供完整的PHP上传与处理代码示例。
OpenCV是一个基于C/C++开发的强大开源计算机视觉库,拥有丰富的研究资料。本文旨在阐述如何在PHP中调用OpenCV的部分功能,其中人脸识别仅是其应用分支之一。
OpenCV及facedetect模块安装
1. 环境安装
需要将OpenCV源码编译为动态链接库文件(.so格式)。
1.1 安装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服务。
PHP调用OpenCV进行人脸检测
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);
结合Imagick的人脸特效处理应用
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
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













