基于OpenCV的PHP图像人脸识别技术_opencv php 人脸识别-程序员宅基地

技术标签: 扩展  input  extension  技术杂谈  dst  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的执行目录下

//检查有多少个脸型
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

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

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

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

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

以上文章来源: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>”;
}
}
?>

 

 

 

   

 

 

文章来源:http://www.sysbus.com/?p=124

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yangyu112654374/article/details/4397645

智能推荐

【共读】企业信息安全建设与运维指南(一)_信息安全运营服务实施指南研究-程序员宅基地

文章浏览阅读6.3k次,点赞5次,收藏49次。一、从零开始建设企业信息安全系统:企业信息安全体系分为:信息安全技术体系和信息安全管理体系 信息安全技术体系: 两个层面: 1.需建设安全相关基础设施和系统,以具备解决相关安全问题的能力。 2.需具备安全运营能力,只有正确部署和使用设备,才能真正保障信息安全。 信息安全管理体系: 两个层面: 1.具备信息安全相关的制度、规范、流程及策略。 2.具..._信息安全运营服务实施指南研究

python遍历文件夹轻松拷贝所有固定格式的文件_python遍历所有文件复制指定文件?tn=02003390_71_hao_pg-程序员宅基地

文章浏览阅读455次。import osimport shutil def select_file(dir, dir_out): # dir为查询文件路径,dir_out为拷贝路径 if os.path.isfile(dir): if(dir[-4:] == '.bmp' or '.jpg' or 'png'): #拷贝所有以上格式的文件,也可以修改为其他格式 filename = dir.split('\\')[-1] # 提取文件名称 s_python遍历所有文件复制指定文件?tn=02003390_71_hao_pg

Win cuda11+cudnn11网盘下载_win11 cudatookit安装包 百度云-程序员宅基地

文章浏览阅读5.1k次,点赞17次,收藏10次。https://pan.baidu.com/s/1IV_lBCeFFM712xx_iXnhqQ 提取码:0pr5_win11 cudatookit安装包 百度云

springboot集成thymeleaf时css js加载不出来的问题_springboot thymeleaf 不显示css js-程序员宅基地

文章浏览阅读2.1k次。springboot项目的css 和js默认位置是在static中,所以如果没有另外的修改的话,直接创建一个static文件夹,把css和js放入即可。这里放一个实例<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>儿童随访记录表</title> <!-- 引入 echarts.js --> <script src="ht._springboot thymeleaf 不显示css js

用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力_chatgpt + ai 数字人 csdn-程序员宅基地

文章浏览阅读2.1k次。这里还可以选择背景编辑以更换背景,虚拟人物的位置可以调整,都设置完成后,点击播放按钮,即可播放效果。(ps:未导出视频之前,数字人只是静态。)最后点击’合成’按钮,导出视频。_chatgpt + ai 数字人 csdn

C++编程法则365天一天一条(214)C++函数的默认参数详解_c++函数默认值在参数列表中在后面还是在前面-程序员宅基地

文章浏览阅读1.6w次。默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。_c++函数默认值在参数列表中在后面还是在前面

随便推点

Python Anaconda创建虚拟环境及Pycharm使用虚拟环境_anaconda 虚拟环境-程序员宅基地

文章浏览阅读2w次,点赞19次,收藏226次。我们在做开发任务时可能会创建多个项目,这些项目可能会依赖于不同的Python环境。比如有的用到Python3.6、有的用到Python3.7;有的用Pytorch开发、有的用TensorFlow开发。这时我们需要为不同的项目分别提供所需的版本和依赖项放到不同的虚拟环境中,这样可以将各项目所需环境隔离开,让项目之间不会起冲突。_anaconda 虚拟环境

TensorFlow Serving模型转换与部署_tensorflow serving 切换模型-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏23次。文章目录1. TensorFlow Serving安装1.1. 拉取镜像1.2. 下载官方代码1.3. 运行TF Serving1.4. 客户端验证2. 将ckpt模型转换为pb模型3. 模型部署4. 多模型部署4.1 多(单)用户单模型4.2 多(单)用户多模型4.3. 接口请求5. 新增模型6. 可能出现的错误错误1:错误2:错误3:错误4:错误5:错误6:错误7:错误8TensorFlow..._tensorflow serving 切换模型

::after伪元素增加小箭头样式_::after箭头-程序员宅基地

文章浏览阅读453次。::after伪元素增加小箭头样式_::after箭头

python3 OpenCV cv2 图像的细化(骨架抽取)_图像处理作业_cv2.thin-程序员宅基地

文章浏览阅读1.9w次,点赞14次,收藏83次。参考链接:http://www.cnblogs.com/xianglan/archive/2011/01/01/1923779.html主思路和程序基本上都是参考博主的,只是在思路理解上和Python3的一些小修改.首先是算法原理介绍:图像细化:图像细化主要是针对二值图而言,所谓骨架,可以理解为图像的中轴,,一个长方形的骨架,是它的长方向上的中轴线,圆的骨架是它的圆心,直线的骨架是它自身,孤立点的..._cv2.thin

解决microsoft visual c++ build tools安装包丢失或损坏_microsoft visual c++ build tool离线安装包-程序员宅基地

文章浏览阅读2w次,点赞6次,收藏10次。一.问题背景Windows需要在安装某些库的时候需要自己编译,但如果本机没有对应的编译的环境,就会产生如下报错: Building wheel for fasttext (setup.py) ... error ERROR: Command errored out with exit status 1: command: 'c:\users\jayce\anaconda3\envs\pdocr\python.exe' -u -c 'import io, os, sys, setupto_microsoft visual c++ build tool离线安装包

什么是架构以及架构的分类-程序员宅基地

文章浏览阅读1.8w次,点赞16次,收藏146次。写这篇文章的目的是弄明白到底什么是架构,我们在开发设计过程中会遇到各种各样的图,到底哪些是属于架构图?别人让你画架构图的时候,你要知道你画的到底是不是架构图,怎么画架构图。一、什么是架构把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。边界划分:根据要解决的问题,对目标系统的边界进行界定。能力划分:对目标系统按某个原则的进行切分。切分的原则,要便_架构

推荐文章

热门文章

相关标签