小言_互联网的博客

PHP--调用百度人脸识别API获取人脸数据

555人阅读  评论(0)

一、登录百度智能云

地址在这里,没有注册的事先注册一下。

然后 “产品服务–人工智能–人脸识别”依次点击,进入人脸识别。(百度人脸识别接口的人脸检测、人脸对比、人脸搜索是可以免费使用的,个人账号QPS=2,企业认证之后QPS=10)

什么是QPS?
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准

二、创建应用

1.点击“创建应用”,
2.选择接口处,选择人脸识别(一班情况下,都是默认选好的),里面的基础服务都是默认自带的,不用管,填写好其他信息之后,点击立即创建即可。
3.显示创建完毕页面,点击“返回应用列表”。
4.在这里就可以看见刚刚创建的与应用了,要记得项目的API KeySecret Key在这里查看,这个之后是有用的

到这里,准备工作就全部做完了!!!

三、Access Token的获取

请求URL数据格式:向服务地址https://aip.baidubce.com/oauth/2.0/token发送post请求,在URL中带上以下参数:

grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key
client_secret: 必须参数,应用的Secret Key
(获取的access_token有效期为30天,建议每次请求都重新生成一个access_token
代码如下(官方文档代码跑不通,所以有些许修改)

<?
function request_post_access($url = '', $param = '') {
    if (empty($url) || empty($param)) {
            return false;
    }
        
        $postUrl = $url;
        $curlPost = $param;
        $curl = curl_init();//初始化curl
        curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页
        curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);//运行curl
        curl_close($curl);
        
        return $data;
}

$url = 'https://aip.baidubce.com/oauth/2.0/token?';
$post_data['grant_type']       = 'client_credentials';//固定值
$post_data['client_id']      = '换成应用的API key';//API Key
$post_data['client_secret'] = '换成应用的Secret Key';//Secret Key
$o = "";
foreach ( $post_data as $k => $v ) 
{
    $o.= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr($o,0,-1);
$res = json_decode(request_post_access($url, $post_data),'true');
var_dump($res['access_token']);//打印一下

四、人脸数据的获取

向服务地址https://aip.baidubce.com/rest/2.0/face/v3/detect发送post请求,在URL中带上access_token

请求参数:imageimage_type是必须的(详细参数看官方文档)
(image_type有三种形式,下面代码我将使用BASE64的作为演示)

返回结果:(以下是必返回,如果想要获取更多数据,比如:年龄、性别。表情、人种等,详细参数看官方文档)

字段 说明
face_num 检测到的图片中的人脸数量
face_list 人脸信息列表,具体包含的参数参考下面的列表。
+face_token 人脸图片的唯一标识
+location 人脸在图片中的位置
++left 人脸区域离左边界的距离
++top 人脸区域离上边界的距离
++width 人脸区域的宽度
++height 人脸区域的高度
++rotation 人脸框相对于竖直方向的顺时针旋转角,[-180,180]
+face_probability 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。
+angel 人脸旋转角度参数
++yaw 维旋转之左右旋转角[-90(左), 90(右)]
++pitch double 三维旋转之俯仰角度[-90(上), 90(下)]
++roll double 平面内旋转角[-180(逆时针), 180(顺时针)]

代码如下:(事先在php文件下的同级目录存放一张人脸照片

<?php
//$file:图片地址
//Filetype: JPEG,PNG,GIF 

//获取文件对象,转换成base64,不要数据头
$file = "01.png"; 
if($fp = fopen($file,"rb", 0)) 
{ 
    $gambar = fread($fp,filesize($file)); 
    fclose($fp); 

     
    $base64 = chunk_split(base64_encode($gambar)); 
    // 输出
    $encode = '<img src="data:image/jpg/png/gif;base64,' . $base64 .'" >'; 
} 


//写入数据
$param=array(
    "image"=>$base64,
    "image_type"=>"BASE64",//图片类型
    // 去掉注释,在value里填写需要额外获取的人脸数据"face_field"=>"face_num,face_probability,location"//需要获取的数据项
);
//转换格式
$bodys=json_encode($param);


//获取access_token,每次获取一个,单个access_token有效时间只有30天
function request_post_access($url = '', $param = '') {
    if (empty($url) || empty($param)) {
            return false;
    }
        
        $postUrl = $url;
        $curlPost = $param;
        $curl = curl_init();//初始化curl
        curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页
        curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);//运行curl
        curl_close($curl);
        
        return $data;
}

$url = 'https://aip.baidubce.com/oauth/2.0/token?';
$post_data['grant_type']       = 'client_credentials';//固定值
$post_data['client_id']      = '换成应用的API Key';//API Key
$post_data['client_secret'] = '换成应用的Secret Key';//Secret Key
$o = "";
foreach ( $post_data as $k => $v ) 
{
    $o.= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr($o,0,-1);
$res = json_decode(request_post_access($url, $post_data),'true');

/**
 * 发起http post请求(REST API), 并获取REST请求的结果
 * @param string $url
 * @param string $param
 * @return - http response body if succeeds, else false.
 */
function request_post($url = '', $param = '')
{
    if (empty($url) || empty($param)) {
        return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    // 初始化curl
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $postUrl);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    // 要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    // post提交方式
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    // 运行curl
    $data = curl_exec($curl);
    curl_close($curl);

    return $data;
}


$token = $res['access_token'];

$url = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' . $token;
$res = json_decode(request_post($url, $bodys),'true');

var_dump($res);

搞定了


转载:https://blog.csdn.net/weixin_43118090/article/details/101768978
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场