| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- namespace app\controller\api\baidu;
- use crmeb\basic\BaseController;
- use think\facade\Cache;
- class BaiduAi extends BaseController
- {
- /**
- * @return mixed
- * 图像识别
- */
- public function baiduai()
- {
- $access_token=Cache::get('baiduai_access_token');//redis取token
- if(!$access_token){//没有 直接请求获得
- $grant_type='client_credentials';
- $client_id='tlxGbXSA0Y5RqHEmEGuSh0Y3';
- $client_secret='oXYLVoXUKLKOaXtKjrKOiZVuYyrKFcaP';
- $access_token=$this->access_token_baidu($grant_type,$client_id,$client_secret)['access_token'];//去请求token
- Cache::set('baiduai_access_token', $access_token['access_token'], $access_token['expires_in']);// 将取到的token存入redis方便下次使用
- }
- $image=$this->request->params(['image']);
- $image=$image['image'];
- if(empty($image)){
- return app('json')->fail('参数不正确');
- }
- $imageName = time().'1.png';
- if (strstr($image,",")){
- $image = explode(',',$image);
- $image = $image[1];
- }
- $path = "./public/shareimg";
- if (!is_dir($path)){ //判断目录是否存在 不存在就创建
- mkdir($path,0777,true);
- }
- $imageSrc= $path."/". $imageName; //图片名字
- file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
- $returnimgurl=env('APP_URL').'/shareimg/'.$imageName;
- $scenes=["advanced_general"];
- $data=[
- 'imgUrl'=>$returnimgurl,
- 'scenes'=>$scenes,
- ];
- $data=json_encode($data);
- $header=[
- 'Content-Type:'.'application/json;charset=utf-8',
- ];
- $url='https://aip.baidubce.com/api/v1/solution/direct/imagerecognition/combination?access_token='.$access_token;
- $data=$this->curl($url,$data,'post',$header);
- $data=json_decode($data,true);
- if(empty($data['result']['advanced_general']['result'])){
- return app('json')->fail('未获取到数据');
- }
- $data=array_column($data['result']['advanced_general']['result'],'keyword');
- $data=[
- 'data'=>$data,
- 'imgurl'=>$returnimgurl
- ];
- return app('json')->success($data);
- }
- /**
- * 删除 搜索的图片
- */
- public function deleteimg()
- {
- $url=$this->request->params(['url']);
- if(empty($url['url']))
- return app('json')->fail('未获取到参数');
- $url=$url['url'];
- $data=explode('shareimg/',$url);
- @unlink('./public/shareimg/'.end($data));
- return app('json')->success('ok');
- }
- /**
- * @param $grant_type
- * @param $client_id
- * @param $client_secret
- * @return mixed
- * 百度鉴权token
- */
- public function access_token_baidu($grant_type,$client_id,$client_secret)
- {
- $data=[
- 'grant_type'=>$grant_type,
- 'client_id'=>$client_id,
- 'client_secret'=>$client_secret
- ];
- $url='https://aip.baidubce.com/oauth/2.0/token';
- $data=$this->curl($url,$data,'post','');
- return json_decode($data,true);
- }
- //curl 请求
- public function curl($url , $data=array(),$option,$header=''){
- $ch = curl_init();//
- if(!empty($header)){
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_HEADER, 0);//返回response头部信息
- }
- curl_setopt($ch, CURLOPT_URL, $url);//
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- // POST数据
- if($option=='post'){
- curl_setopt($ch, CURLOPT_POST, 1);
- }
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
- $output = curl_exec($ch);
- curl_close($ch);
- return $output;
- }
- }
|