ML拍照購物功能集成教程分享


應用場景

拍照購物服務主要應用於線上購物場景。例如,購物類App集成該服務可以提供圖片搜索商品功能,用戶拍攝商品圖像時,可以利用該功能快速找到想要的商品。

一. 開啟服務

  1. 在AppGallery Connect上的 我的項目 à 構建 à 機器學習服務 à 配置 à 拍照購物 里添加商品集:

在這里插入圖片描述

在這里插入圖片描述

  1. 添加完后需要聯系ml相關人員來進行審核,審核通過后即可添加離線商品,這里介紹用postman來添加商品。
    審核完成后的商品集:

在這里插入圖片描述

二. 簡單添加商品

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

在這里插入圖片描述

這里的URI為https://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的參數為服務地址+消息頭,中國區的地址為 https://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": "https://res.vmallres.com/pimages//product/6941487204656/group//800_800_2A4099A441BF0670CA0F6BA0EEF5D70E16430F99A6699CB3.png"}],
"productId": 5,
"productUrl": "https://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 'https://developer.huawei.com/repo/'}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
}
 
allprojects {
repositories {
google()
jcenter()
maven {url 'https://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();
         }

四. 效果動圖:

在這里插入圖片描述

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


原文鏈接:https://developer.huawei.com/consumer/cn/forum/topic/0201436704554280219?fid=18

原作者:胡椒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM