如何在 Web 應用裡消費 SAP Leonardo 的機器學習 API
本文選擇使用 SAP Leonardo 裡的 一個 Product Image Classification API,即給定一張產品的圖片,該 API 能識別出此產品的類別。
簡要了解一下這個 API 的功能:該 API 模型是由 SAP 基於大約 5 萬張 Icecat 圖片訓練而成,能區分 29 種不同的類別,這些類別具體羅列於官方文件上,比如電腦顯示器,數碼相機,外部儲存裝置,鍵盤,液晶電視,手機充電器,筆記本和其他外設等等。如果我們消費這個 API 時指定的圖片代表的產品不屬於這 29 種類別之一,API 的表現如何?先賣個關子,文末解答。
這裡假定我們已經找到了該 API,點選進入明細頁面,將 API Key 複製下來,後續的 UI5 應用需要使用到。
然後進入 SAP 雲平臺的 Neo 環境。本文介紹的步驟,使用免費的 SAP Cloud Platform Neo 測試環境即可。
在 Service 列表裡找到 WebIDE——我們將使用 WebIDE 進行 UI5 應用的開發。
大家可以直接在 WebIDE 裡 clone 這個 Github 倉庫 ,或者把倉庫的內容以 zip 包的形式下載到本地,再使用 WebIDE 的本地 Import 功能匯入。
我們要告訴 UI5 應用這個 API 的 url,因此在 Neo 環境裡建立一個 Destination(作用和 ABAP Netweaver 事務碼 SM59 裡建立的 Destination 相同):
屬性如上圖所示,因為是 Neo 測試環境,所以 url 為對應的 sandbox 環境:
記下這個 Destination 名稱 sapui5ml-api, 因為稍後的 UI5 程式碼裡需要使用。
記得維護額外的屬性 WebIDEnabled 為 true,這樣該 Destination 才能在 UI5 應用裡被使用。點選 Check Connection 確保看到綠燈。
開啟 WebIDE 裡 UI5 工程裡的 settings.json 檔案,將您之前從 API console 裡拷貝的 API Key 貼上到此處:
在專案根目錄下的 neo-app.json 檔案裡,把型別為 destination 的 target 物件的名稱維護成之前在 SAP Cloud Platform Cockpit 裡建立的 destination 相同的名稱。
執行這個 UI5 應用,能看到如下介面:
做一些簡單的測試:
SAP Leonardo 的機器學習 API,識別出這張圖片有 74.7%的可能性是一臺膝上型電腦,13.8%的可能性是鍵盤,11.3%的可能性是 Tablets.
點選按鈕 View JSON,能看到呼叫 SAP Leonardo API 返回的技術明細。
滑鼠的圖片也成功識別出來了:
本文開頭提到,Product Image Classification API 只支援 29 種產品類別:
如果我們開發應用時需要支援額外的產品類別,就需要自行提供該產品類別的圖片來重新訓練模型。
下面介紹 SAP Leonardo 上機器學習模型的重新訓練步驟。
假設我們期望重新訓練之後,Product Image Classfication 這個模型能夠識別出不同種類的花,那麼我們首先得搞到大量花的圖片。Tensorflow 的官網上,已經體貼地給想做模型訓練的學習者們,提供了一個做練習用的壓縮包,裡面包含了大量各式花的圖片。
SAP Leonardo 接受的能用於重新訓練模型的資料集,必須符合下圖所示的層級結構,即 training, validation 和 test 三個資料夾下面,分別包含以產品類別命名的子資料夾,且資料規模之比為 8:1:1.
有了用於訓練的資料後,下一步就是把這些資料上傳到 SAP Leonardo 的模型線上儲存平臺上。
在 SAP 雲平臺上建立 Leonardo 機器學習的服務例項,這個例項的 service key 裡包含了一個 IMAGE_RETRAIN_API_URL,可以用來獲取線上儲存的 url:
向這個 url 傳送一個 HTTP get 請求,得到線上儲存的 url:
把這個 url 貼上到瀏覽器裡,輸入 postman 裡返回的 accessKey 和 secretKey 登入,就能以 web 的方式訪問這個線上儲存了:
下一步是把本地的訓練檔案上傳到這個部署在 AWS 上的線上儲存上去。首先用命令列 mc config host
定義一個名為 sapjerrys3 的遠端站點,將上一步從 postman 獲得的 AWS 線上儲存 url,accessKey 和 secret 繫結到這個站點上:
然後使用命令列上傳檔案:
mc.exe cp -r C:\Code\MachineLearningStudy\flowersjerry sapjerrys3\data
大概十幾分鍾後,檔案上傳完畢:
此時可以從瀏覽器裡看到 AWS 線上儲存上傳完畢的訓練檔案。
現在可以提交一個後臺作業了,讓 Leonardo 去處理這些上傳好的檔案,ABAP 顧問們可以把這個動作理解成在 Netweaver 事務碼 SM36 裡定義一個後臺作業並提交。傳送一個 HTTP post 請求,除了下圖 jobName, dataset 和 modelName 需要自己維護外,其他欄位都使用 SAP 官網上定義的預設值。
這個請求會返回一個後臺作業 ID,抄下來後把它拼到 url 末尾,然後重新發送一個 HTTP get 請求,即可查詢到這個作業的執行情況。Jerry 重新訓練的時候,等待了大概五分鐘,作業狀態就變為 SUCCEEDED 了。
因為本文做的練習都是在 SAP Cloud Platform 的 CloudFoundry 環境中進行的,因此我們也可以用 cf 命令列來查詢這些作業的執行情況:
cf sapml retraining jobs -m image
如果遇到作業狀態為 FAILED 的情況,去 AWS 線上儲存上檢視以作業名稱命名的資料夾,裡面包含了詳細的訓練日誌,可以用作錯誤分析:
在這個訓練好的模型能正式被使用之前,我們還需要對其進行部署,類似 ABAP Netweaver 裡的“啟用”動作。
和提交訓練的後臺作業類似,模型部署也是一個非同步執行的步驟,提交部署請求後,得到一個部署作業 ID:ms-26c5a22c-6d07-4164-8222-a4182969162d
根據這個部署作業 ID 可以查詢模型部署狀態:
成功部署後,我們就可以用 Restful API 消費這個模型了,url 的格式為:
http://mlfinternalproduction-image-classifier.cfapps.sap.hana.ondemand.com/api/v2/image/classification/models/<model name>/versions/1
我從網路上隨便找一張向日葵的照片,
將這張圖片作為 HTTP POST 的引數發給我重新訓練並且部署好的模型 flowerjerrymodel,得到的結果顯示,重新訓練後的模型認為這張圖片有大約 87%的可能性是代表向日葵。
至此,這個機器模型重新訓練和消費的步驟就成功完成了。
總結
本文首先介紹了使用 SAP UI5 前端框架開發的 Web 應用如何通過 Restful API 的方式消費 SAP Leonardo 平臺提供的機器學習服務,然後以向日葵模型為例,介紹了 Leonardo 平臺上機器學習模型重新訓練和消費的詳細步驟。
劃線
評論
複製
- SpringCloud - Ribbon 核心原始碼解析
- 出海之路百花齊放,行業新兵 F5 如何立足?
- 今天很多 CTO 都是被幹掉的,因為他沒有成就業務
- 讀配置、講原理、看面試真題,我只能幫你到這了。。。
- OpenHarmony 應用開發之二維碼生成器
- 使用 ABAP 程式設計實現對微軟 Office Word 文件的操作
- 谷歌最新 Imagen AI 在文字至影象生成方面優於 DALL-E
- flutter 系列之:flutter 中的 flow
- Eureka 註冊資訊配置備忘
- 巧用 redis 實現點贊功能,它不比 mysql 香嗎?
- Linux 開發 _ 攝像頭程式設計 (實現拍照、網頁監控功能)
- Electron 在作業幫直播課 PC 學生端的實踐
- 物聯網協議的王者:MQTT
- 解密安卓微信聊天資訊儲存
- 首都線上龔巨集績:用生態賦能企業出海 實現多方共贏 | TGO 專訪
- GPT-4 都快出來了, GPT-3 的一些缺陷仍然被詬病
- 實戰監聽 Eureka client 的快取更新
- 初識 ElastricSearch
- InfoQ 2022 年趨勢報告:DevOps 與雲端計算篇
- 拒絕八股文!這篇圖解動態路由分分鐘愛了