基于OpenCV的PHP图像人脸识别技术
发布时间:2023-11-23 22:02:54
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


猜你喜欢
- 一、准备工程文件1.创建工程leeoo2.在工程根目录下创建setup.py文件3.在工程根目录下创建同名package二、编辑setup.
- python sys模块用法sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧!sys模块的
- 翻译说明:这是Solid State Group网站上的一篇很友好的文章,解决了我在设计中遇到的很多问题,故在此我翻译其文,并对原作者表示非
- 前言这几天看《流畅的python》这本书了,在一个示例中又看到了property作为装饰器在使用,因为很久没有用这个东西了,对它
- 特殊情况有 * ^ : | . \一、单个符号作为分隔符String address="上海\上海市|闵行区\吴中路";
- MySQL编译参数多而复杂,让新手感到很头大,如果是正式生成环境安装MySQL,没有充足的时间去研究每一个参数代表的意义,个人建议使用余洪春
- 本文主要介绍了np.where()[0] 和 np.where()[1]的具体使用,以及np.where()的具体用法,废话不多说,具体如下
- 需求背景在很多时候我们需要抽取视频的某一帧做一些分析或修改等;比如笔者需求就是判断一个人在该视频中出现的频率,以判断他是否是这段视频的主角;
- 通用load/write方法手动指定选项Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDD
- 官方文档的示例中没有我们习惯的日期格式,查了很多博客转换日期和时间戳也都是大概的能得到结果的方式,常将 datetime 和 time 两个
- 如何做一个只能从本站点才能访问的页面?可以用与防止盗链<%if left(Request.ServerVariables(&
- //截取字符串长度。支持utf-8和gb2312编码。若为gb2312,先将其转为utf-8,在utf-8的基础上截取然后再转换回来 fun
- 1)按笔画排序select * from Table order by nlssort(columnName,'NLS_SORT=S
- 如何取回已忘记的密码?forget.asp' 申请<html><head><title>闪亮日子
- 前面一篇文章有说过,利用scrapy来爬取图片,是为了对图片数据进行分类而收集数据。本篇文章就是利用上次爬取的图片数据,根据图片的颜色特征来
- 今天是 Firefox3的2008下载日 ,这就意味着Firefox3正式发布了。Firefox3有众多的改进和新功能,我最关注的功能之一是
- 识别快递单号这次跟老师做项目,这项目大概是流水线上识别快递上的快递单号。首先我尝试了解条形码的基本知识 百度百科:条形码 条形码(barco
- 最近在做一个领券功能的时候,发现在一定并发下会出现重复领券的问题。使用度娘一顿搜索操作之后,发现可以使用分布式锁来解决这个问题。什么是分布式
- 在仓库目录下新建一个名为.gitignore的文件(因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git
- 目录前言typeof是否能正确判断类型?instanceof是否能正确判断类型?Object.prototype.toString.call