php使用face++实现一个简单的人脸识别系统

流程

流程可以分为两部分,一部分是训练,一部分是测试。

关于如何使用face++提供的API可以看http://blog.csdn.net/jianjian1992/article/details/46640483

代码可在http://download.csdn.net/detail/jianjian1992/8866839免费下载。

起始界面

界面

如下所示,将使用说明进行了介绍,因为是初次使用,很多不太会,所以界面弄得比较简单,以能使用为第一目标。

实现细节

index.html是欢迎界面,记录一下几个小问题

中文的使用

在head部分加上字符集使用utf-8就好啦!

<head>
<meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" />
</head>

文字居中与背景设置

在html最前面加了个style,设置body的显示效果。

文字显示设置为居中,使用height,width加上margin-top,margin-left便可以设置body部分在页面中显示的地方啦。

背景则设置了图片url,以及居中显示。

<style>
body
{
	text-align:left;
	height:500px;
	width:600px;
	top:50%;
	margin-top:130px;
	margin-left:550px;
	background-image:url(./imgs/back.jpg);
	background-position:center;
	background-repeat:repeat-y;
}
</style>

按钮的页面跳转

onClick里面用location记录将要跳转的界面。

<input type = "button" value = "点击进入测试" onClick = "location='test.php' "/>

训练部分

包括两部分:

  • startTrain.php用于输入训练目录,
  • train.php用于将训练数据传到服务器,并将训练成功标记输出

startTrain.php

这一部分做得蛮挫的,查了下php选择文件夹,没有找到该怎么做,所以就用了个<input type = "text">来输入目录。真是弱爆了啊

用了一个表单form来记录输入目录,提交表单之后则跳到train.php中进行真正的训练啦。

<form action="train.php" method="get">
<input type="text" name="trainDir">
<br>
<input type="submit" name="submit" value="提交">
<input type="reset" name="reset" value = "重置">
</form>

train.php

这一部分实现了两个功能:

  • 根据输入目录查找所有训练图片,并记录所有图片路径
  • 将所有训练图片一一检测人脸,并将人脸加入到训练模型中

查找目录

php中查找目录中所有文件倒是挺方便的啊,listDir函数在dir.php中。

这个函数根据$dir目录名,将得到的所有文件名存入$names,所有文件路径名则存入$img_urls中。

注意的一点是,如果是中文文件名,则要加上

$file = iconv("gb2312","UTF-8",$file);

这一句才会得到结果的,要不就是空哦

php中字符串的查找可以使用strstr函数,

比如下面的$file_name = strstr($file,‘.‘,true)便是查找$file中‘.’的前面部分,如果是strstr($file,‘.‘,false)则是‘.‘的后面部分。

动态数组的添加使用array_push就ok啦!

哦,不要忘记了关闭资源啊!有opendir($dir)那么就要有对应的closedir($dir)。

function listDir($dir, &$names, &$img_urls)
{
	if(is_dir($dir))
   	{
     	if ($dh = opendir($dir))
		{
        	while (($file = readdir($dh)) !== false)
			{

     			if((is_dir($dir."/".$file)) && $file!="." && $file!="..")
				{
     				//echo "<b><font color='red'>文件名:</font></b>",$file,"<br><hr>";
     				listDir($dir."/".$file."/");
     			}
				else
				{
					$file = iconv("gb2312","UTF-8",$file);
         			        if($file!="." && $file!="..")
					{

						//var_dump($file);
						$file_name = strstr($file, '.', true);
						//echo $file_name."<br>";
						array_push($names, $file_name);
						array_push($img_urls, $dir."/".$file);
      				}

     			}
        	}
        	closedir($dh);
     	}
   	}
}

在train.php中使用如下代码便得到了训练用的所有图片的url啦。

$img_url = array();
$person_name = array();
$trainDir = $_GET["trainDir"];
listDir($trainDir, $person_name, $img_url);
echo "从目录中我们得到了 ".sizeof($img_url)." 张图片".<br>;

接着我们创建一个训练组oldpeople_qiaoxi。

$response = $facepp->execute('/group/delete', array('group_name' => 'oldpeople_qiaoxi'));
$response = $facepp->execute('/group/create', array('group_name' => 'oldpeople_qiaoxi'));

接着做循环,对每张图片检测人脸

$params['img']          = $img;
$params['attribute']    = 'gender,age,race,smiling,glass,pose';
$response               = $facepp->execute('/detection/detect',$params);

从返回值$response得到face_id之后,创建一个person并将检测到的人脸加入这个类别person中。

$response = $facepp->execute('/person/delete', array('person_name' => $person_name[$i],'group_name' => 'oldpeople_qiaoxi'));
$response = $facepp->execute('/person/create', array('person_name' => $person_name[$i],'group_name' => 'oldpeople_qiaoxi'));
$response = $facepp->execute('/person/add_face', array('person_name' => $person_name[$i], 'face_id' => $face_id, 'group_name' => 'oldpeople_qiaoxi'));

将所有图片都处理好之后,便可以训练模型了。

$response = $facepp->execute('/train/identify', array('group_name' => 'oldpeople_qiaoxi'));

训练成功的话,结果如下:

测试部分

这个部分包括2个部分:

  • test.php负责选择测试图片
  • recognition.php负责将测试图片传到服务器并给出结果

test.php部分

显示如下:

选择文件部分用的是<input type = "file">来做的,之后表单提交到recognition.php就好了。

recognition.php部分

首先得到图片的url。

$img_url = $_GET["testImgPath"];

之后执行identify得到身份结果。

$response = $facepp->execute('/recognition/identify', array('group_name' => 'oldpeople_qiaoxi', 'img' => $img_url));

这里采用了一个数组来进行中文名与英文名的对应,因为face++不支持中文名的图片,所以传给它的图片都是英文命名的,但是显示需要中文名,所以在这里进行映射。

$person_name = array("ami" => "艾米", "dongjian" => "张东健", "xiaowang" => "小王");

$img_url = array();$person_name = array();$trainDir = $_GET["trainDir"];listDir($trainDir, $person_name, $img_url);echo
"从目录中我们得到了 ".sizeof($img_url)." 张图片".<br>;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 01:36:08

php使用face++实现一个简单的人脸识别系统的相关文章

一个简单的情感识别系统的实现

情感识别,主要就是正和负的识别,偶尔也有中性.类别比较少,所以相对于广义的文本分类来说,看起来要简单很多,特别是很多词汇都有很强的倾向性.当然这是针对某一特定的领域.一般的话,情感识别主要用于商品评论,因为不同的商品会有不同的术语之类的专门的某一词汇,所以如果将某一领域的数据集上学到的模型应用在另一个领域的话,可能效果会不很理想. Stephan Raaijmakers等的这篇文章[1]提出的是一种基于阀值投票的方法,即使用独立的分类器去分各个类别的数据,最后使用新领域的数据对分类结果进行投票校

【人工智能】用Python实现一个简单的人脸识别,原来我和这个明星如此相似

近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等.总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等. 幸庆的是,国内外许多大神都已经给我们造好"轮子",我们可以直接来使用某些模型.今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣!我们都知道Python容易学,但是就是不知道如何去学,去×××资料,机器学习,人工智能,深度学习,都在这学习,小编推荐一个

人脸识别系统原理

写这篇文章,并不是要挑战学术泰斗,更不是要在这里炫耀和说教知识.只是前不久有个朋友问我能不能搞人脸识别,我说回来试试.想不到这里头的东西还挺多,不是三两天就能做完的.就在这里把我的实现思路写出来,以表心迹. 图像识别,一直是计算机领域研究的热门,随着大数据的兴起,更是让图像识别中的特殊分支人脸识别如鱼得水,使得运算和样本数据不再成为系统的掣肘.那么具体来说,一个现代人脸识别系统(例如face++)是如何实现的呢? 这里我不敢妄自猜测,我仅提供我自己的实现方法,拿出来与大家一起学习和探讨: 1.首

TCP学习之建立一个简单的客户/服务器系统--回射系统

TCP学习之建立一个简单的客户/服务器系统--回射系统 相关的资料可以参考Unix网络编程,这个只是修改版,不需要依赖任何文件,可以独立编译通过,而且是在两台不同的主机上进行的. fggets和fputs这两个函数来自标准I/O函数库,writen和readline见my_unp.h头文件 //my_unp.h #include<stdarg.h> #include<syslog.h> #include<stdio.h> #include<netinet/in.h

【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统

本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源(当然你也可以从官网下载). ========================================== 分割线 ========================================== 写在前面 我们已经学了很多关于反射的内容,但是我们现在的反射并不能实时反射,即当反射物体移动时它们不

基于QT和OpenCV的人脸识别系统

1 系统方案设计 1.1 引言 人脸是一个常见而复杂的视觉模式,人脸所反映的视觉信息在人与人的交流和交往中有着重 要的作用和意义,对人脸进行处理和分析在视频监控.出入口控制.视频会议以及人机交互等领 域都有着广泛的应用前景,因此是模式识别和计算机视觉领域持续的研究热点. 本系统在 FriendlyARM Tiny6410 开发板基础上,利用 OpenCV 计算机视觉库和 QT 图形库,通 过普通的 USB 摄像头实现了自动人脸识别,准确率较高,方便易用. 1.2 系统总体架构 "人脸识别&quo

驾考找人代考成不可能 杭州驾考新增人脸识别系统

昨天上午,杭州公安交警宣布,驾考科目一和科目三安全文明驾驶常识考场新增了"门禁"系统,即通过学员×××照片与现场人脸自动识别比对系统,核查学员是否为当日参加考试学员,同时对是否交纳考试费用进行网络自动比对,符合以上两个条件的学员才能进场参加考试. 今年9月,考场还在每辆考车上安装了人脸识别系统,每位考生在考试开始前系统都要进行人脸识别,只有通过验证确认人车合一信息后才能参加考试. 如果考生人脸识别失败的,会由民警进行人工比对,身份验证通过后才能进行考试.如发现冒名顶替的,一经查实一律按

人脸识别系统在校园的应用场景日益丰富

各类证件.门禁卡.钥匙曾经是高校师生出入校园的必备品,如今在越来越多的高校,师生们只需"刷脸"即可轻松自如享受各种服务.常见的有"刷脸"进校园.进图书馆.进寝室等.作为人工智能领域大规模落地的成熟技术,人脸识别已经被越来越多的教育机构认可,用以构建安全智慧化校园,教育行业的"刷脸"时代正在到来. 在学校大门出入口, "人证合一"身份核验让师生们出入校门无需传达室登记,只需在闸机通道人脸识别终端前面短暂停留,毫秒时间单位内即可&

「人脸识别系统」河南多家酒店使用新科技 大众认可度高

近日,继郑州绿地JW万豪酒店后,郑州绿城中州国际饭店.洛阳东山宾馆.郑州建国饭店.郑州M酒店.郑州福缘国际酒店.郑州鹰城鑫地饭店.郑州华筵商务酒店.郑州景峰豪悦酒店 .郑州方特假日酒店.郑州璞舍私式微酒店.郑州微佳酒店CBD店.郑州海天假日酒店(工大店).郑州海天假日酒店(金汇店).如家精选CBD店.美和精品酒店.郑州宜家酒店.郑州丽东国际酒店等酒店均已成功引入人脸识别人证合一验证系统,为酒店前台新增识别"利器". 科技的不断进步让入住酒店更加智能化,"刷脸入住"这