BaiduAi.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace app\controller\api\baidu;
  3. use crmeb\basic\BaseController;
  4. use think\facade\Cache;
  5. class BaiduAi extends BaseController
  6. {
  7. /**
  8. * @return mixed
  9. * 图像识别
  10. */
  11. public function baiduai()
  12. {
  13. $access_token=Cache::get('baiduai_access_token');//redis取token
  14. if(!$access_token){//没有 直接请求获得
  15. $grant_type='client_credentials';
  16. $client_id='tlxGbXSA0Y5RqHEmEGuSh0Y3';
  17. $client_secret='oXYLVoXUKLKOaXtKjrKOiZVuYyrKFcaP';
  18. $access_token=$this->access_token_baidu($grant_type,$client_id,$client_secret)['access_token'];//去请求token
  19. Cache::set('baiduai_access_token', $access_token['access_token'], $access_token['expires_in']);// 将取到的token存入redis方便下次使用
  20. }
  21. $image=$this->request->params(['image']);
  22. $image=$image['image'];
  23. if(empty($image)){
  24. return app('json')->fail('参数不正确');
  25. }
  26. $imageName = time().'1.png';
  27. if (strstr($image,",")){
  28. $image = explode(',',$image);
  29. $image = $image[1];
  30. }
  31. $path = "./public/shareimg";
  32. if (!is_dir($path)){ //判断目录是否存在 不存在就创建
  33. mkdir($path,0777,true);
  34. }
  35. $imageSrc= $path."/". $imageName; //图片名字
  36. file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
  37. $returnimgurl=env('APP_URL').'/shareimg/'.$imageName;
  38. $scenes=["advanced_general"];
  39. $data=[
  40. 'imgUrl'=>$returnimgurl,
  41. 'scenes'=>$scenes,
  42. ];
  43. $data=json_encode($data);
  44. $header=[
  45. 'Content-Type:'.'application/json;charset=utf-8',
  46. ];
  47. $url='https://aip.baidubce.com/api/v1/solution/direct/imagerecognition/combination?access_token='.$access_token;
  48. $data=$this->curl($url,$data,'post',$header);
  49. $data=json_decode($data,true);
  50. if(empty($data['result']['advanced_general']['result'])){
  51. return app('json')->fail('未获取到数据');
  52. }
  53. $data=array_column($data['result']['advanced_general']['result'],'keyword');
  54. $data=[
  55. 'data'=>$data,
  56. 'imgurl'=>$returnimgurl
  57. ];
  58. return app('json')->success($data);
  59. }
  60. /**
  61. * 删除 搜索的图片
  62. */
  63. public function deleteimg()
  64. {
  65. $url=$this->request->params(['url']);
  66. if(empty($url['url']))
  67. return app('json')->fail('未获取到参数');
  68. $url=$url['url'];
  69. $data=explode('shareimg/',$url);
  70. @unlink('./public/shareimg/'.end($data));
  71. return app('json')->success('ok');
  72. }
  73. /**
  74. * @param $grant_type
  75. * @param $client_id
  76. * @param $client_secret
  77. * @return mixed
  78. * 百度鉴权token
  79. */
  80. public function access_token_baidu($grant_type,$client_id,$client_secret)
  81. {
  82. $data=[
  83. 'grant_type'=>$grant_type,
  84. 'client_id'=>$client_id,
  85. 'client_secret'=>$client_secret
  86. ];
  87. $url='https://aip.baidubce.com/oauth/2.0/token';
  88. $data=$this->curl($url,$data,'post','');
  89. return json_decode($data,true);
  90. }
  91. //curl 请求
  92. public function curl($url , $data=array(),$option,$header=''){
  93. $ch = curl_init();//
  94. if(!empty($header)){
  95. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  96. curl_setopt($ch, CURLOPT_HEADER, 0);//返回response头部信息
  97. }
  98. curl_setopt($ch, CURLOPT_URL, $url);//
  99. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  100. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  101. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  102. // POST数据
  103. if($option=='post'){
  104. curl_setopt($ch, CURLOPT_POST, 1);
  105. }
  106. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  107. $output = curl_exec($ch);
  108. curl_close($ch);
  109. return $output;
  110. }
  111. }