IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php百度人脸检测api测颜值评分(源码直接可用) -> 正文阅读

[PHP知识库]php百度人脸检测api测颜值评分(源码直接可用)

有一天无意中看到,通过百度人工智能平台中的人脸检测模块,可以实现简单的人脸检测,百度人工智能平台免费注册,人脸检测模块免费使用。相关API文档在:百度AI开放平台-全球领先的人工智能服务平台-百度AI开放平台,依照API文档就可以写出一个简单的检测工具。于是就想写一个测试用例来看看效果。

废话不多说,我们先看效果图:?

是不是很有趣。这只是一个单php文件,直接放到php运行环境即可使用。可以使用phpstudy集成环境即可。上传的图片都存在了同级img目录。下面讲一下在写的过程中遇到的坑,源码会贴在最后。

1.注册百度账号,开通api

第一步要先注册百度账号,开通人脸检测接口,获取属于你自己的ak(API Key)和sk(Secret Key).

?

2.开发过程注意事项

我们先梳理一下流程。

  1. 看文档,看文档,看文档,重要的事情说三遍。百度官方文档:人脸开发文档
  2. 由文档我们知道。人脸检测的流程是先通过ak和sk获取属于自己的token,然后再根据token和请求参数去获取人脸信息。请求参数确定要你要获取的哪些人脸信息。
  3. 先走测试。了解下过程。百度在线人脸测试地址:百度智能云-ApiExplorer

tips:这里我用的图片是base64格式的。关于这个有一个坑。后面会说明。

3.填坑之旅

上传的图片转成base64,在传参时总是报错param[image_template] is null,这里我用的图片格式是base64,用官方给的数据FACE_TOKEN时,却是正常的。最后找了很久。终于终于解决了。这里感谢一下这位博客:php百度人脸识别param[image_template] is null使用BASE64图片类型json_decode返回NULL的处理解决方案_漏刻有时数据可视化大屏(PHP&ECHARTS智能化开源软件系统)-CSDN博客

关键代码其实就是这个:

for ($i = 0; $i <= 31; ++$i) {  //去空格
	$base = str_replace(chr($i), "", $base);
}

?4.拿来主义看这里

上面的只是我在开发过程中遇到的坑和一些心得,唏嘘不已。看客们应该不关心。所以我还是直接上源码吧。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no">
    <meta http-equiv="Cache-Control" content="no-siteapp"/>	
  </head>
  <body>


<?php
	if(isset($_GET['action'])){
		echo "123";
		$action = $_GET['action'];
		call_user_func($action);
	}
	
	function gettoken(){
		$AK="你自己的ak";
		$SK="你自己的sk";
		$url="https://aip.baidubce.com/oauth/2.0/token";
		$bodys="grant_type=client_credentials&client_id=".$AK."&client_secret=".$SK;
		$token=geturl($url,$bodys)->access_token;
		return $token;
	}
	function base64EncodeImage ($image_file) {
	    $base64_image = '';
	    $image_info = getimagesize($image_file);
	    $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
	    $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
	    return $base64_image;
	}
	function geturl($url='',$param=''){
			if (empty($url) || empty($param)) {
		        return false;
		    }
		    $postUrl = $url;
		    $curlPost = $param;
	        $headerArray =array("Content-type:application/json;","Accept:application/json");
	        $ch = curl_init();
	        curl_setopt($ch, CURLOPT_URL, $url);
	        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
	        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
	        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
			// post提交方式
			curl_setopt($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
	        $output = curl_exec($ch);
	        curl_close($ch);
	        $output = json_decode($output);
	        return $output;
	}
	$imgurl="";
	function upload(){
		// 允许上传的图片后缀
		$allowedExts = array("gif", "jpeg", "jpg", "png");
		$temp = explode(".", $_FILES["file"]["name"]);
		echo $_FILES["file"]["size"];
		$extension = end($temp);     // 获取文件后缀名
		if ((($_FILES["file"]["type"] == "image/gif")
		|| ($_FILES["file"]["type"] == "image/jpeg")
		|| ($_FILES["file"]["type"] == "image/jpg")
		|| ($_FILES["file"]["type"] == "image/pjpeg")
		|| ($_FILES["file"]["type"] == "image/x-png")
		|| ($_FILES["file"]["type"] == "image/png"))
		&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
		&& in_array($extension, $allowedExts))
		{
			if ($_FILES["file"]["error"] > 0)
			{
				echo "错误:: " . $_FILES["file"]["error"] . "<br>";
			}
			else
			{
				echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
				echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
				echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
				echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
				
				// 判断当前目录下的 upload 目录是否存在该文件
				// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
				if (file_exists("img/" . $_FILES["file"]["name"]))
				{
					echo $_FILES["file"]["name"] . " 文件已经存在。<br><br><br> ";
				}
				else
				{
					// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
					move_uploaded_file($_FILES["file"]["tmp_name"], "img/" . $_FILES["file"]["name"]);
					echo "文件存储在: " . "img/" . $_FILES["file"]["name"]."<br><br><br>";
				}
				$img="img/" . $_FILES["file"]["name"];
				$base=base64EncodeImage($img);
				$imgurl = preg_replace('#data:image/[^;]+;base64,#', '', $base); //图片地址
				$url = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' . gettoken();
				
				
				$bodys = "{\"image\":\"{$imgurl}\",\"image_type\":\"BASE64\",\"face_field\":\"gender,age,beauty,gender,race,expression\",\"face_type\":\"LIVE\"}";
				for ($i = 0; $i <= 31; ++$i) {
				    $bodys = str_replace(chr($i), "", $bodys);
				}
				for ($i = 0; $i <= 31; ++$i) {  //去空格
				    $base = str_replace(chr($i), "", $base);
				}
				$result=geturl($url,$bodys);
				// echo "<pre>";
				// var_dump($result->result->face_list[0]);
				// echo "</pre>";
				if($result->error_msg=="SUCCESS"){
					echo "<img src={$base} style='width:400px' />";
					echo "<p>图片中包含人脸数:".$result->result->face_num;
					echo "<p>图片中包含人物年龄:".$result->result->face_list[0]->age;
					echo "<p>图片中包含人物颜值评分:".$result->result->face_list[0]->beauty;
					echo "<p>图片中包含人物性别:".$result->result->face_list[0]->gender->type."(male:男性 female:女性)";
					echo "<p>图片中包含人物种族:".$result->result->face_list[0]->race->type;
					echo "<p>图片中包含人物表情:".$result->result->face_list[0]->expression->type."(none:不笑;smile:微笑;laugh:大笑)";
				}else{
					echo "<p>{$result->error_msg}</p>";
				}
			}
		}
		else
		{
			echo "非法的文件格式";
		}
	}
	
	?>
	<div class="main">
		<div class="form">
			<form action="face.php?action=upload" enctype="multipart/form-data" method="post">
				<input type="file" name="file" />
				<input type="submit" value="上传" /> 
			</form> 
		</div>
	</div>
	
</body>
</html>	

?这里要感谢一下这位博客:调用百度人脸检测API实现简单的颜值检测_寸先生的AI道路-CSDN博客_百度人脸检测颜值

不过他用的是python。我没试过。仅供参考。

转载请注明出处,谢谢!

?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:48:47  更:2021-10-17 11:48:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:22:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计