應用場景
拍照購物服務主要應用於線上購物場景。例如,購物類App集成該服務可以提供圖片搜索商品功能,用戶拍攝商品圖像時,可以利用該功能快速找到想要的商品。
一. 開啟服務
- 在AppGallery Connect上的 我的項目 à 構建 à 機器學習服務 à 配置 à 拍照購物 里添加商品集:
- 添加完后需要聯系ml相關人員來進行審核,審核通過后即可添加離線商品,這里介紹用postman來添加商品。
審核完成后的商品集:
二. 簡單添加商品
- 申請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)首先將獲得的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) 第一步和上面一樣都是配置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開發
- 在項目級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/'}
}
}
- 在應用級的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'
- 在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" />
- 獲得照片后,創建拍照購物分析器,進行圖片分析
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());
}
});
- 識別完成,停止分析器,釋放檢測資源。
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
原作者:胡椒