百度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版/
赞赏
微信赞赏支付宝赞赏
发表评论