`
pincs
  • 浏览: 13022 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

阅读更多

本文所介绍的技术不是原创,而是从一个叫Robert Eisele的德国人那里学习来的。他写了一个PHP扩展openCV,只封装了两个函数,叫face_detect和face_count。 openCV是一个开源的用C/C++开发的计算机图形图像库,非常强大,研究资料很齐全。本文重点是介绍如何使用php来调用其中的局部的功能。人脸侦 查技术只是openCV一个应用分支。

OpenCV安装之前必须依赖的包:(请先安装好)

pkgconfig

libpng

zlib

libjpeg

libtiff

python 

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的执行目录下

  1. //检查有多少个脸型
  2. var_dump(face_count(’party.jpeg’, haarcascade_frontalface_alt.xml’));
  3. //返回脸型在图片中的位置参数,多个则返回数组
  4. $arr = face_detect(’party.jpeg’, haarcascade_frontalface_alt2.xml’);
  5. print_r($arr);

3.应用
结合imagick可以将图片做一下应用。因为 face_detect只返回一个矩形参数,包含x,y坐标和w,h长宽参数。下面是我的一个应用demo

imagick 扩展需要安装 ImageMagick 和 imagick 扩展,请参考:

ImageMagick官网:http://www.imagemagick.org

imagick扩展下载:   http://pecl.php.net/package/imagick

  1. <?php
  2. if($_FILES){
  3. $img = $_FILES[’pic’][’tmp_name’];
  4. $arr = face_detect($img, ’haarcascade_frontalface_alt2.xml’);
  5. //$arr1 = face_detect($img, ’haarcascade_frontalface_alt_tree.xml’);
  6. if(is_array($arr1)) $all =array_merge($arr,$arr1);
  7. else $all = $arr;
  8. $im = new Imagick($img);
  9. //$draw =new ImagickDraw();
  10. //$borderColor = new ImagickPixel(’red’);
  11. //$draw->setFillAlpha(0.0);
  12. //$draw->setStrokeColor  ($borderColor);
  13. //$draw->setStrokeWidth  (1);
  14. if(is_array($all)){
  15.   foreach ($all as $v){
  16.     $im_cl = $im->clone();
  17.     $im_cl->cropImage($v[’w'],$v[’h'],$v[’x'],$v[’y']);
  18.     
  19.     $im_cl->swirlImage(60);
  20.     $im->compositeImage( $im_cl, Imagick::COMPOSITE_OVER , $v[’x'], $v[’y'] );
  21.     
  22.     //$draw->rectangle($v[’x'],$v[’y'],$v[’x']+$v[’w'],$v[’y']+$v[’h']);
  23.     //$im->drawimage($draw);
  24.     
  25.     
  26.   }
  27. }
  28.   header( ”Content-Type: image/png” );
  29.   echo $im;
  30. }else{
  31.   ?>
  32.   <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
  33.   <form method=”POST” enctype=”multipart/form-data”>
  34.   人脸识别试验:只支持jpg,png<br>
  35.   上传一张图片 <input type=”file” name=”pic”>
  36.   <input type=”submit” value=”upload”>
  37.   </form>
  38.   <?
  39. }
  40. ?>

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

以上文章来源:http://blog.csdn.net/zhongmao/archive/2009/01/11/3753377.aspx

使用测试

安装测试了一下,如果越是高清的大图,效果越明显,感觉不错

一 安装
1 安装opencv
http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948
下载opencv-1.1pre1.tar.gz(1.0版本没有安装成功)
#tar zxvf opencv-1.1pre1.tar.gz
# cd opencv-1.1.0/
# /.configure
#make
#make install

2 安装facedetect
#wget http://www.xarg.org/download/facedetect-1.0.0.tar.gz
#tar xzvf facedetect-1.0.0.tar.gz
#cd facedetect-1.0.0
#/usr/local/php/bin/phpize
#./configure –with-php-config=/usr/local/php/bin/php-config
#make
#make install

#vi /usr/local/php/etc/php.ini
// 增加extension=facedetect.so

3 重启web服务器,在phpinfo()里查看是否有facedetect这个模块

二 简单测试
从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下

//检查有多少个脸型
var_dump(face_count(’test.jpg’, ‘haarcascade_frontalface_alt.xml’));

//返回脸型在图片中的位置参数,多个则返回数组
$arr = face_detect(’test.jpg’, ‘haarcascade_frontalface_alt2.xml’);

print_r($arr);

三 测试代码
<?
if(empty($_POST)) {
?>
<form name=”form” id=”form” method=”POST” enctype=”multipart/form-data” action=””>
上传图片:<input type=”file” name=”pic” size=”20″><input type=”submit” name=”submit” value=”上传”>
</form>
<?
} else {
$img = $_FILES[’pic’][’tmp_name’];

$arr = face_detect($img, ‘haarcascade_frontalface_alt2.xml’);

if(is_array($arr1)) {
$all = array_merge($arr,$arr1);
} else {
$all = $arr;
}
$allowtype = 1;
switch($_FILES[’pic’][’type’]){
case ‘image/pjpeg’: $fix_pic.= “.jpg”; break;
case ‘image/jpeg’: $fix_pic.= “.jpg”; break;
case ‘image/x-png’: $fix_pic.= “.png”; break;
case ‘image/png’: $fix_pic.= “.png”; break;
default: $allowtype = 0; break;
}

if($allowtype == 0) {
echo “文件格式错误:只运行jpg或png图片”;exit;
}

$tmp_name = time();
$src_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name.$fix_pic;
move_uploaded_file($_FILES[’pic’][’tmp_name’], $src_pic);

$pic_src = $pic_dst = array();
if(is_array($all)){
foreach ($all as $k => $v){
$tmp_name_new = $tmp_name.”_”.$k;
$x = $v[’x'];
$y = $v[’y'];
$w = $v[’w'];
$h = $v[’h'];
$dst_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name_new.$fix_pic;
// echo $src_pic.”<br>”;
// echo $dst_pic.”<br>”;
$cmd = “/usr/bin/convert -crop “.$w.”x”.$h.”+”.$x.”+”.$y.” “.$src_pic.” “.$dst_pic;
// echo $cmd.”<br>”;
echo `$cmd`;
$pic_src[] = “upload/”.$tmp_name.$fix_pic;
$pic_dst[] = “upload/”.$tmp_name_new.$fix_pic;
}
}

foreach($pic_src as $key => $value) {
echo “<img src=’”.$value.”‘> => <img src=’”.$pic_dst[$key].”‘><br>”;
}
}
?>

分享到:
评论

相关推荐

    一个基于opencv、dilb的员工人脸识别考勤系统源码.zip

    这是一个基于OpenCV和Dlib库开发的员工人脸识别考勤系统的源码项目,名为"WorkAttendanceSystem-master"。这个系统利用了计算机视觉技术和人工智能算法来实现高效、准确的面部识别功能,用于员工的考勤管理。 **...

    基于余弦相似度的人脸识别系统的实现.pdf

    基于余弦相似度的人脸识别系统的实现 人脸识别是生物特征识别和人工智能领域的一个重要研究课题,基于余弦相似度的人脸识别系统的实现是其中的一种方法。该系统使用 PHP 语言并结合 OpenCV 计算机视觉库,利用计算...

    PHP实现人脸识别技术

    在IT行业中,人脸识别技术是一种基于人的面部特征信息进行身份识别的生物识别技术。近年来,随着计算机视觉和深度学习的发展,人脸识别技术已经广泛应用于各种场景,如安全验证、社交媒体、人脸检索等。本教程将深入...

    基于opencv的人脸识别。内置两个函数,一个识别图像人脸facePictureDetection,另一个识别视频人.zip

    包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...

    研一图像处理期末大作业:基于openCV的人脸识别.zip

    包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...

    OpenCV识别出两张图片的人脸,并比较出两张人脸的相似度,并给出相似值(包含完整的工程!!)

    OpenCV识别出两张图片的人脸,并比较出两张人脸的相似度,并给出相似值。 包含完整的工程文件,可立即运行!!! 用facedetect功能将两张图片中的人脸检测出来 将人脸部分的图片剪切出来,存到两张只有人脸的图片...

    浅谈基于PCA算法的人脸识别的图片搜索引擎论文.pdf

    为了解决这些问题,可以通过图像预处理技术,如灰度处理,来减少颜色和纹理的差异,增强人脸识别的准确性。 在实际应用中,如搭建基于Ubuntu的人脸搜索引擎,需要进行一系列的准备工作,包括安装必要的软件和库,如...

    基于PHP实现的人脸实时识别系统源代码,可以实时进行人脸识别,比对,并可以在后台中注册和管理人脸信息,更具安全、保密和方便性

    这个源代码项目为开发者提供了一个实战平台,学习如何将PHP与人脸识别技术结合,实现安全可靠的实时人脸识别系统。通过深入研究和理解源代码,开发者可以提升自己的PHP编程技能,了解人脸识别流程,以及如何在实际...

    基于人脸识别的考勤系统

    **基于人脸识别的考勤系统**是一种利用现代计算机视觉技术和生物识别技术实现的高效、安全的考勤解决方案。在本文中,我们将深入探讨该系统的核心组件、技术原理以及PHP在其中的作用。 **一、人脸识别技术** 人脸...

    php-opencv-3.3.0.zip_board1l7_php opencv_php-opencv_sleepea8

    比如,配合AJAX技术,用户上传图片后,服务器端的PHP脚本可以立即进行图像处理并返回结果,实现诸如实时人脸识别、物体识别等功能。此外,还可以应用于视频流分析,通过获取摄像头的实时视频流,实现动态图像分析。 ...

    前端人脸识别框架Tracking.js

    在现代Web开发中,实时的图像处理和人脸识别技术正在变得越来越重要。Tracking.js 是一个强大的JavaScript库,它提供了丰富的计算机视觉功能,包括人脸识别。这个框架允许开发者在浏览器环境中实现高效且灵活的人脸...

    opencv扩展包

    这在人脸识别、行为分析、视频编码等领域非常有用。OpenCV还支持多线程和并行计算,通过OpenMP或者CUDA实现GPU加速,提升处理速度。 此外,OpenCV 3.4.1版本在安装和使用过程中没有网速限制,意味着用户可以快速...

    Laravel开发-face

    在Laravel中实现人脸识别功能,首先需要集成一个第三方库来处理图像处理和识别任务。常见的选择有OpenCV、Face++、AWS Rekognition等。以Face++为例,我们需要在项目中安装其PHP SDK,通过Composer执行以下命令: `...

    眼镜在线试戴选购代码.rar

    脸型分析是通过图像处理算法实现的,可能包括识别脸部轮廓、测量关键特征点(如眼睛、鼻梁、脸颊宽度等)来确定用户的脸型,如圆形、矩形、心形、椭圆形或瓜子脸等。然后,根据匹配的脸型,系统会显示适合的虚拟眼镜...

    基于PHP的pay-crm-osc刷脸支付系统源码.zip

    2. **刷脸支付技术**:这涉及到人脸识别算法,如OpenCV或Face++等库,用于捕捉、处理和比对人脸图像。开发者需要理解机器学习模型,特别是深度学习网络,如卷积神经网络(CNN),用于面部特征识别。 3. **客户关系...

    java SrpingMVC图书管理系统

    这通常需要集成第三方的人脸识别库,如OpenCV或者Face++,并与SpringMVC的Controller进行交互,处理图像数据并调用人脸识别API。 4. **QQ登录集成** QQ登录功能允许用户使用QQ账号直接登录系统,提高了用户的便利...

    php-opencv-packages

    5. 人脸识别:结合OpenCV的Haar级联分类器,可以实现基本的人脸检测功能。 6. 实时视频处理:通过PHP与OpenCV的结合,还可以处理来自摄像头的实时视频流,实现动态图像分析。 在实际开发中,需要注意的是,由于PHP...

Global site tag (gtag.js) - Google Analytics