申请百度开发者账号后可以免费使用相关AI接口(免费版有并发数限制)
本篇讲的是百度AI的人脸识别接口,简单试用了下感觉还可以,水平有限就讲一个体验中遇到的问题,使用base64模式上传图片一直失败,其实是百度不支持base64换行的,php对图片进行base64编码后会存在换行,这时可以用正则式将换行替换掉即可!
$base_final = preg_replace('/\r|\n/', '', $base64_image);// 一定要用正则式把换行去掉,百度不支持换行
?
完整源码如下:
<?php//第一步 获取tokenfunction request_post($url = '', $param = '') {if (empty($url) || empty($param)) {return false;}$postUrl = $url;$curlPost = $param;$curl = curl_init();//初始化curlcurl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页curl_setopt($curl, CURLOPT_HEADER, 0);//设置headercurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上curl_setopt($curl, CURLOPT_POST, 1);//post提交方式 111curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);//不检查证书; 不加这一行会返回bool(false)$data = curl_exec($curl);//运行curlcurl_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、私有化部署仅支持企业认证后部署(可能需要付费)。
发表评论