百度AI开放平台之人脸识别PHP版

申请百度开发者账号后可以免费使用相关AI接口(免费版有并发数限制)

本篇讲的是百度AI的人脸识别接口,简单试用了下感觉还可以,水平有限就讲一个体验中遇到的问题,使用base64模式上传图片一直失败,其实是百度不支持base64换行的,php对图片进行base64编码后会存在换行,这时可以用正则式将换行替换掉即可!

$base_final = preg_replace('/\r|\n/', '', $base64_image);// 一定要用正则式把换行去掉,百度不支持换行

?

完整源码如下:

<?php
//第一步 获取token
function request_post($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提交方式 111
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);//不检查证书; 不加这一行会返回bool(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']      = 'W7Pr4cjQdYLRzsEntHeBFXF4';//你的 Api Key
    $post_data['client_secret'] = 'GLh84ZjMczUtaeoDEvS93dpDzSQQzxrp';//你的 Secret Key
    $o = "";
    foreach ( $post_data as $k => $v ) 
    {
    	$o.= "$k=" . urlencode( $v ). "&" ;
    }
    $post_data = substr($o,0,-1);
    $res = request_post($url, $post_data);
   // var_dump($res);
   $access_token=json_decode($res,true);
   $token = $access_token['access_token']; //获取到token  任务结束

?>
<?php 
//第二步,对你要识别的图片进行base64编码。注意不能有base64,头部信息

/*图片转换为 base64格式编码*/
$img = './pic/ma.jpg';
$base64_img = base64EncodeImage($img);

$base64_string= explode(',', $base64_img); //截取data:image/png;base64, 这个逗号后的字符
$base_final=$base64_string[1];//存在换行
$base_final = preg_replace('/\r|\n/', '', $base_final);// 一定要用正则式把换行去掉,百度不支持换行
//$base_final 就是符合百度base64上传图片格式的字符串了
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));//可以在这里直接不加xxxbase64,头部信息。
    return $base64_image;
}
?>
<?php
//第三步提交人脸识别请求
function request_post1($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;
}


$url = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' . $token;
//$bodys = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"face_field\":\"faceshape,facetype\"}";
$bodys = "{\"image\":\"".$base_final."\",\"image_type\":\"BASE64\",\"face_field\":\"faceshape,facetype\"}";//base64图片编码

echo '<br><br>'.$bodys;
$res = request_post1($url, $bodys);// 根据返回,判断是否包含人脸(动物图片会报检测不到人脸),图片是否正确

var_dump($res);
//马化腾的  face_token=34f3873bbe3548e80c73d8bcdd0f6055
// 马化腾1的 face_token=77d98a34dccd5a9734ee50c24e72fea5
?>

?

建议直接下载百度sdk的php版进行人脸识别相关功能的开发,在线的帮助文档也很详细:https://ai.baidu.com/docs#/Face-PHP-SDK/top;当然百度ai支持的开发语言覆盖跟全面,java、Python、C#、C++、Nodejs 部分高级功能如离线版sdk、私有化部署仅支持企业认证后部署(可能需要付费)。

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/百度ai开放平台之人脸识别php版/

赞赏

微信赞赏支付宝赞赏

发表评论