ML拍照購物功能整合教程分享

語言: CN / TW / HK

應用場景

拍照購物服務主要應用於線上購物場景。例如,購物類App整合該服務可以提供圖片搜尋商品功能,使用者拍攝商品影象時,可以利用該功能快速找到想要的商品。

一. 開啟服務

  1. 在AppGallery Connect上的 我的專案 à 構建 à 機器學習服務 à 配置 à 拍照購物 裡新增商品集:

在這裡插入圖片描述

在這裡插入圖片描述

  1. 新增完後需要聯絡ml相關人員來進行稽核,稽核通過後即可新增離線商品,這裡介紹用postman來新增商品。
    稽核完成後的商品集:

在這裡插入圖片描述

二. 簡單新增商品

  1. 申請accessToken:
    拍照購服務會對每個訪問的請求進行身份驗證,所以無論是.com或.cn提交請求,都需要在請求頭中包含簽名(Authorization)資訊。拍照購服務通過使用使用者在華為應用聯盟申請的clientId和clientSecre獲取accessToken進行對稱加密的方法來驗證請求的傳送者身份,accessToken有效期為一個小時。

在這裡插入圖片描述

這裡的URI為http://oauth-login.cloud.huawei.com/oauth2/v2/token

clientId和clientSecre都是在AppGallery Connect中的應用資訊裡的引數。

請求結果示例:

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
{
    "access_token":"CFyJ7eTl8WIPi9603E7Ro9Icy+K0JYe2qVjS8uzwCPltlO0fC7mZ0gzZX9p8CCwAaiU17nyP+N8+ORRzjjk1EA==",
    "expires_in":3600,
    "token_type":"Bearer"
}
  1. 新增商品
    (1)首先將獲得的token輸入在Authorization的token處,TYPE選Bearer Token

在這裡插入圖片描述

(2)配置post的Headers引數

在這裡插入圖片描述

這裡post的引數為服務地址+訊息頭,中國區的地址為 http://ml-api-drcn.ai.dbankcloud.com

URI為/v1/mlkit/snapshop/set/${product-set-id}/product/add,其中${product-set-id}就是申請的商品集的名稱。
HMS-APPLICATION-ID:APK的標識 app_id 華為開發者聯盟申請的client_id。
X-Request-ID:請求ID 通過UUID.randomUUID()生成。
X-Package-Name:包名package_name 使用者的包路徑。
X-Mlkit-Version:MLKIT版本號。



(3) 最後在Body的raw中配置引數(JSON)。

{
"appPackage":"com.huawei.industrydemo.shopping",
"category": "4",
"customContent": "test",
"images": [{"imageId": "", "region": "", "url": "http://res.vmallres.com/pimages//product/6941487204656/group//800_800_2A4099A441BF0670CA0F6BA0EEF5D70E16430F99A6699CB3.png"}],
"productId": 5,
"productUrl": "http://res.vmallres.com/pimages//product/6941487204656/group//800_800_2A4099A441BF0670CA0F6BA0EEF5D70E16430F99A6699CB3.png"
}

其中必須要有的引數為productId、images以及images裡的url。

category :0-others,1-clothing,2-shoes,3-bags,4-digital & home appliances,5-homegoods,6-toys,7-cosmetics,8-accessories,9-food

customContent :使用者自定義商品資訊,查詢的時候會返回該引數

productId :商品ID,用於唯一標識商品,相同商品集不能夠重複;格式:只允許包含大小寫字母數字、-、_

images :圖片列表

productUrl :商品的Url,可選引數,查詢的時候會返回該引數

(1) 以上都設定完畢就可以傳送post請求了,成功後返回:
{"retCode":"0","retMsg":"Success"}

  1. 刪除商品
    既然有新增商品,這裡再介紹一下刪除商品,以便可以更好地除錯。
    (1) 第一步和上面一樣都是配置Authorization。
    (2) 配置Headers。


在這裡插入圖片描述

這裡的是DELETE請求URI為 /v1/mlkit/snapshop/set/${product-set-id}/product/${product-id}
${product-set-id}就是申請的商品集的名稱,${product-id}為商品ID。
其餘引數與上面的基本一致,多了個X-Country-Code:cn,填寫地區資訊。

(3) 刪除不用配置Body的引數,上述2部完成即可傳送,成功刪除時返回:
{"retCode":"0","retMsg":"Success"}

三. Demo開發

  1. 在專案級gradle裡新增maven倉
buildscript {
repositories {
google()
jcenter()
maven {url 'http://developer.huawei.com/repo/'}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
}

allprojects {
repositories {
google()
jcenter()
maven {url 'http://developer.huawei.com/repo/'}
}
}
  1. 在應用級的build.gradle裡面加上SDK依賴
dependencies{
// 引入拍照購物服務SDK
implementation 'com.huawei.hms:ml-computer-vision-cloud:2.0.3.300'
}

在apply plugin: 'com.android.application' 的下面加上:
apply plugin: 'com.huawei.agconnect'
  1. 在AndroidManifest.xml檔案裡面申請必要的許可權
<uses-permission android:name="android.permission.CAMERA" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.INTERNET" />
  1. 獲得照片後,建立拍照購物分析器,進行圖片分析
MLApplication.getInstance().setApiKey(AGConnectServicesConfig.fromContext(this).getString("client/api_key"));
 MLRemoteProductVisionSearchAnalyzerSetting setting = new MLRemoteProductVisionSearchAnalyzerSetting.Factory()     // 設定最多返回的商品資訊數。
     .setLargestNumOfReturns(2)     // 設定商品集ID。
     .setProductSetId("demo")     // 設定站點區域
     .setRegion(MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_CHINA)
     .create();
 MLRemoteProductVisionSearchAnalyzer analyzer =
     MLAnalyzerFactory.getInstance().getRemoteProductVisionSearchAnalyzer(setting);// 通過bitmap建立MLFrame,bitmap為通過拍照獲得的圖片。
 MLFrame frame = new MLFrame.Creator().setBitmap(photo).create();//進行圖片檢測
 Task<List<MLProductVisionSearch>> task = analyzer.asyncAnalyseFrame(frame);
 task.addOnSuccessListener(new OnSuccessListener<List<MLProductVisionSearch>>() {
     @Override
     public void onSuccess(List<MLProductVisionSearch> productVisionSearchList) {
         if (productVisionSearchList == null || productVisionSearchList.size() == 0) {
             return;
         }
         for (MLProductVisionSearch productVisionSearch : productVisionSearchList) {
             for (MLVisionSearchProduct product : productVisionSearch.getProductList()) {             // 識別成功的處理邏輯,這裡是獲取商品的url顯示圖片
                 String url = product.getProductUrl();
                 if (url != null && !(url.equals(""))) {
                     MyAsyncTask asyncTask = new MyAsyncTask(resultImg);
                     asyncTask.execute(url);
                     resultText.setText(product.getCustomContent());
                 }                     }
         }

     }
 }).addOnFailureListener(new OnFailureListener() {
     @Override
     public void onFailure(Exception e) {       // 識別失敗的處理邏輯
         MLException mlException = (MLException) e;
         Log.e(TAG, "error " + "error code: " + mlException.getErrCode() + "\n" + "error message: "
                 + mlException.getMessage());
     }
 });
  1. 識別完成,停止分析器,釋放檢測資源。
if (analyzer != null) {
         analyzer.stop();
         }

四. 效果動圖:

在這裡插入圖片描述

欲瞭解更多詳情,請參閱:
華為開發者聯盟官網:http://developer.huawei.com/consumer/cn/hms?ha_source=hms1
獲取開發指導文件:http://developer.huawei.com/consumer/cn/doc/development?ha_source=hms1
參與開發者討論請到Reddit社群:http://www.reddit.com/r/HuaweiDevelopers/
下載demo和示例程式碼請到Github:http://github.com/HMS-Core
解決整合問題請到Stack Overflow:http://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest





原文連結:http://developer.huawei.com/consumer/cn/forum/topic/0201436704554280219?fid=18

原作者:胡椒