Browse Source

商品拍照识别,图片搜索商品

lizhen_gitee 10 months ago
parent
commit
00d35c0860
3 changed files with 110 additions and 3 deletions
  1. 98 0
      addons/unishop/controller/Product.php
  2. 11 2
      application/api/controller/Demo.php
  3. 1 1
      application/config.php

+ 98 - 0
addons/unishop/controller/Product.php

@@ -145,6 +145,12 @@ class Product extends Base
 
         $keyword = input('keyword','');//搜索
 
+        //图片搜索
+        $image = input('image','');
+        if(!empty($image)){
+            $keyword = $this->search_by_image($image);
+        }
+
         $productModel = new productModel();
 
        /* if ($fid && !$sid) {
@@ -178,6 +184,98 @@ class Product extends Base
         $this->success('', $result);
     }
 
+    //腾讯云拍照识别商品
+    //{"Response":{"Products":[{"Name":"按摩椅","Parents":"家用电器-个护健康","Confidence":99,"XMin":107,"YMin":59,"XMax":447,"YMax":366}],"RequestId":"187745fc-0497-441e-88f5-f3f17d854016"}}
+    private function search_by_image($image){
+        $tencent_yun = config('tencent_yun');
+        $secret_id   = $tencent_yun['secret_id'];
+        $secret_key  = $tencent_yun['secret_key'];
+
+        $token       = "";
+        $service     = "tiia";
+        $host        = "tiia.tencentcloudapi.com";
+        $req_region  = "ap-beijing";
+        $version     = "2019-05-29";
+        $action      = "DetectProduct";
+        $payload     = json_encode(['ImageUrl' => localpath_to_netpath($image)]);
+        $endpoint    = "https://tiia.tencentcloudapi.com";
+        $algorithm   = "TC3-HMAC-SHA256";
+        $timestamp   = time();
+        $date        = gmdate("Y-m-d", $timestamp);
+
+// ************* 步骤 1:拼接规范请求串 *************
+        $http_request_method = "POST";
+        $canonical_uri = "/";
+        $canonical_querystring = "";
+        $ct = "application/json; charset=utf-8";
+        $canonical_headers = "content-type:".$ct."\nhost:".$host."\nx-tc-action:".strtolower($action)."\n";
+        $signed_headers = "content-type;host;x-tc-action";
+        $hashed_request_payload = hash("sha256", $payload);
+        $canonical_request = "$http_request_method\n$canonical_uri\n$canonical_querystring\n$canonical_headers\n$signed_headers\n$hashed_request_payload";
+
+// ************* 步骤 2:拼接待签名字符串 *************
+        $credential_scope = "$date/$service/tc3_request";
+        $hashed_canonical_request = hash("sha256", $canonical_request);
+        $string_to_sign = "$algorithm\n$timestamp\n$credential_scope\n$hashed_canonical_request";
+
+// ************* 步骤 3:计算签名 *************
+        $secret_date    = hash_hmac("sha256", $date, "TC3".$secret_key, true);
+        $secret_service = hash_hmac("sha256", $service, $secret_date, true);
+        $secret_signing = hash_hmac("sha256", "tc3_request", $secret_service, true);
+        $signature      = hash_hmac("sha256", $string_to_sign, $secret_signing);
+
+// ************* 步骤 4:拼接 Authorization *************
+        $authorization = "$algorithm Credential=$secret_id/$credential_scope, SignedHeaders=$signed_headers, Signature=$signature";
+
+// ************* 步骤 5:构造并发起请求 *************
+        $headers = [
+            "Authorization"  => $authorization,
+            "Content-Type"   => "application/json; charset=utf-8",
+            "Host"           => $host,
+            "X-TC-Action"    => $action,
+            "X-TC-Timestamp" => $timestamp,
+            "X-TC-Version"   => $version
+        ];
+        if ($req_region) {
+            $headers["X-TC-Region"] = $req_region;
+        }
+        if ($token) {
+            $headers["X-TC-Token"] = $token;
+        }
+        $headers = array_map(function ($k, $v) { return "$k: $v"; }, array_keys($headers), $headers);
+
+        try {
+            $timeOut = 3;
+            $ch = curl_init();
+            curl_setopt($ch, CURLOPT_URL, $endpoint);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
+            curl_setopt($ch, CURLOPT_TIMEOUT, $timeOut);
+            curl_setopt($ch, CURLOPT_HEADER, 0);
+            curl_setopt($ch, CURLOPT_POST, 1);
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+            $response = curl_exec($ch);
+            curl_close($ch);
+
+            //return $response;
+            $response = json_decode($response,true);
+            if(is_array($response) && isset($response['Response']['Products'][0]['Name'])){
+                $searchname = $response['Response']['Products'][0]['Name'];
+                if(!empty($searchname)){
+                    return $searchname;
+                }
+            }
+            return '';
+        } catch (Exception $err) {
+            //echo $err->getMessage();
+            return '';
+        }
+
+    }
+
+
     /**
      * @ApiTitle (收藏/取消)
      * @ApiSummary (收藏/取消)

+ 11 - 2
application/api/controller/Demo.php

@@ -179,9 +179,18 @@ class Demo extends Api
             $response = curl_exec($ch);
             curl_close($ch);
 
-            return $response;
+            //return $response;
+            $response = json_decode($response,true);
+            if(is_array($response) && isset($response['Response']['Products'][0]['Name'])){
+                $searchname = $response['Response']['Products'][0]['Name'];
+                if(!empty($searchname)){
+                    return $searchname;
+                }
+            }
+            return '';
         } catch (Exception $err) {
-            echo $err->getMessage();
+            //echo $err->getMessage();
+            return '';
         }
 
     }

+ 1 - 1
application/config.php

@@ -359,8 +359,8 @@ return [
         'secret_id' => 'AKIDcCsNhsulSzNbefXqFi8ORI4jEYgdQ1Rk',
         'secret_key' => 'dCb3PbbS7bvADB3pEi9WqDZosocJp694',
     ],
-    
 
+    //分配给admin管理员的网站配置
     'newconfiggroup' =>    [
         'siteconfig' => '网站配置',
         'takecash' => '提现配置',