ML拍照購物功能整合教程分享
應用場景
拍照購物服務主要應用於線上購物場景。例如,購物類App整合該服務可以提供圖片搜尋商品功能,使用者拍攝商品影象時,可以利用該功能快速找到想要的商品。
一. 開啟服務
- 在AppGallery Connect上的 我的專案 à 構建 à 機器學習服務 à 配置 à 拍照購物 裡新增商品集:
- 新增完後需要聯絡ml相關人員來進行稽核,稽核通過後即可新增離線商品,這裡介紹用postman來新增商品。
稽核完成後的商品集:
二. 簡單新增商品
- 申請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)首先將獲得的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) 第一步和上面一樣都是配置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 '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/'}
}
}
- 在應用級的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();
}
四. 效果動圖:
欲瞭解更多詳情,請參閱:
華為開發者聯盟官網: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
原作者:胡椒
- 訊號處理第一式——離散訊號序列的基本運算及MATLAB實現
- 3 個電子郵件錯誤以及如何避免它們 | Linux 中國 - 知乎
- 華三交換機融合AC升級總結
- 湖南科技大學自動健康打卡 --- auto.js
- 什麼是OpenStack? OpenStack核心元件之執行流程
- 不會面向物件,肯定學不好!簡易的Python面向物件攻略來啦 - 知乎
- 第二期Go開源說實錄:GORM 剖析與最佳實踐
- 如何解決Renault Can Clip程式碼不正確的問題?
- java之concurrent包中的Atomic類
- 一文教你輕鬆搞定ANR異常捕獲與分析方法
- 感測器的未來: 10年後我們將會生活在一個極端透明的世界
- Linux環境下MySQL主從同步環境部署
- ML拍照購物功能整合教程分享
- 猝死警告!熬夜2個月喜提26k位元組安卓崗offer面經分享,非禿勿入!
- SQL查詢(連線查詢)
- 程式設計的又一次的開始
- 領導要統一前端腳手架,我把React/Vue/Node/小程式都加了
- 在 Ubuntu Linux 上安裝 Deb 檔案的 3 種方法 | Linux 中國 - 知乎
- MIT6.824 MapReduce 2018 Part V: Inverted index generation
- 阻塞/非阻塞IO,同步/非同步IO