PHP调用OpenCV实现人脸识别与图像处理

远山来客
远山来客
发布时间:2026-10-14| 4人浏览过
原创

本文详细介绍如何在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

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。