使用Java程式消費SAP Leonardo的機器學習API
以sap leonardo作為關鍵字在微信上搜尋,能搜到不少文章。但是我瀏覽了一下,好像沒有發現有從具體程式設計角度上來介紹的。所以我就貢獻一篇。
需求
開發一個Java程式,使用者可以指定一張圖片,該Java程式呼叫SAP Leonardo上訓練好的機器學習API,該API會識別該圖片,給使用者返回一個文字資訊,告訴使用者識別結果。
- 訪問https://api.sap.com, 點選API:
SAP Leonardo Machine Learning - Functional Services
點選Product Image Classification API:
會看到如下介面。該介面包含了這個API的Model Schema介紹,即您呼叫API之後,返回的響應結構裡包含哪些欄位,以及對應的型別(物件或者陣列)。介面裡包含了一個小型的API呼叫控制檯,您可以直接控制檯裡選擇一個本地圖形檔案,然後點選Try it out按鈕來體驗一下API的效果。
例如我使用了下面這張圖片進行測試:
在控制檯裡看到請求處理成功,API判斷出來該圖片有97%的可能性是一臺notebook。
下面我們需要使用Java程式來呼叫API。
- 前一步驟的API控制檯的右上角有一個按鈕Download SDK,點選之後將SDK下載到本地:
可以看到該SDK是一個基於Gradle的Java專案。您需要下載Maven和Gradle並完成環境變數的配置,這些配置非常基礎,在網上有大量資料,這裡不再重複。
完成配置後,使用Eclipse的import功能,將SDK匯入到Eclipse裡。
匯入完成後如圖。紅色區域是SDK自帶的程式碼,藍色區域是Jerry自己手動建立的程式碼,用於呼叫API並列印結果。
雙擊根目錄下的pom.xml, 將如下依賴關係維護進去:
在專案根目錄下執行Maven命令 mvn install, 確保專案成功build。至此,您可以開始編寫Java程式碼使用SAP提供的JDK來呼叫該機器學習API了。
- 使用下圖的Java程式碼呼叫SDK去消費API。SDK封裝了底層HTTP請求的傳送和響應的解析等細節,使用起來非常簡捷。
為簡單起見,上圖13行我將本地圖片檔案的絕對地址硬編碼進去。上圖第八行硬編碼的API key來自API控制檯:
至此,大功告成,執行程式。。。。。。什麼情況?
錯誤分析
仔細看過錯誤訊息,很快Jerry就發現了問題出在哪裡。上圖藍色下劃線就暗示了錯誤根源。SAP SDK使用了Google釋出的一個開源Java庫Gson,將API返回的響應反序列化成Java物件。有了Gson,應用程式開發人員無需重複造輪子,只需要定義一些Java類,作為容器儲存Gson反序列化的執行結果即可。
我們再回到API控制檯,API響應結構裡request欄位的型別宣告為string。
然而通過測試發現,request欄位的內容實際是一個Json物件:
從http://api.sap.com下載的SDK裡的程式碼,Gson容器類Response.java裡宣告的request欄位型別為String,而非物件,因此Gson會拋異常:Expected a string but was BEGIN_OBJECT at line 31 column 15 path $.request
知道了問題根源,改起來就容易了。新建一個Gson容器類Request.java, 然後按照控制檯裡觀察到的request欄位的結構,為Request.java維護對應的成員變數。
例如tenantName在API響應結構裡是一個String,因此在Java類裡的型別是String;files在API響應結構裡是一個陣列,因此在Java類裡的型別為List<String>。
調整完畢之後再次執行,能看到期望的輸出結果:通過SDK呼叫API並列印結果。
如果您不願意自己手動修改,可以直接從我的github下載修改之後的程式碼,只需要用您自己的API key替換掉程式碼中硬編碼的key即可。
https://github.com/i042416/ProductImageMLService
更多Leonardo精彩,盡在https://api.sap.com!
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2154590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在Web應用裡消費SAP Leonardo的機器學習APIWeb機器學習API
- 部署在SAP Cloud Platform CloudFoundry環境的應用如何消費SAP Leonardo機器學習APICloudPlatform機器學習API
- 使用SAP Cloud Platform Leonardo機器學習的測試控制檯CloudPlatform機器學習
- 使用SAP Cloud Platform Leonardo機器學習提取圖片的特徵向量CloudPlatform機器學習特徵
- 使用SAP Leonardo上的機器學習服務提取圖片的特徵向量機器學習特徵
- SAP FSM 學習筆記(一) : 使用API消費FSM的資料筆記API
- 如何對SAP Leonardo上的機器學習模型進行重新訓練機器學習模型
- 如何給SAP雲平臺的賬號分配Leonardo機器學習服務的例項機器學習
- 使用SAP WebIDE消費API Portal裡建立的API時的錯誤訊息WebIDEAPI
- SAP Leonardo圖片處理相關的機器學習服務在SAP智慧服務場景中的應用機器學習
- 如何使用API的方式消費SAP Commerce Cloud的訂單服務APICloud
- 如何使用 API 的方式消費 SAP Commerce Cloud 的訂單服務APICloud
- Java16的Vector API更好支援機器學習JavaAPI機器學習
- 如何使用 ABAP 程式消費 SAP ABAP OData 服務
- Java機器學習VisRec API快速入門 - foojayJava機器學習API
- SAP戰略中的機器學習機器學習
- [機器學習] 低程式碼機器學習工具PyCaret庫使用指北機器學習
- 從SAP Leonardo到SAP Data IntelligenceIntel
- 使用soapUI消費SAP Cloud for Customer的web serviceUICloudWeb
- 如何在 SAP BTP 上使用 Integration Suite 消費 S/4HANA Cloud APIUICloudAPI
- [譯] 使用 Python Flask 框架釋出機器學習 APIPythonFlask框架機器學習API
- SAP Leonardo Machine Learning deprecated狀態API和其替代者MacAPI
- SAP Cloud for Customer 如何直接消費S/4HANA APICloudAPI
- 使用nodejs消費SAP Cloud for Customer上的Web serviceNodeJSCloudWeb
- 寫給Java程式設計師的Java虛擬機器學習指南Java程式設計師虛擬機機器學習
- 機器學習在SAP Cloud for Customer中的應用機器學習Cloud
- SparkMLlib機器學習 java版本Spark機器學習Java
- 如何在SAP C4C裡使用ABSL消費第三方Restful APIRESTAPI
- 免費書:最新的《機器學習全面指南》機器學習
- 使用SAP雲平臺的destination消費Internet上的OData service
- 在 Excel 內使用 ODBC 消費 SAP ABAP CDS viewExcelView
- 深度學習,機器學習神器,白嫖免費GPU深度學習機器學習GPU
- 為UCI機器學習庫引入簡單直觀的Python API(附程式碼)機器學習PythonAPI
- 使用SAP API portal進行SAP SuccessFactors的API測試API
- 10門必看的機器學習免費課程機器學習
- 使用Java connector消費ABAP系統的函式Java函式
- 12 月機器學習新書:《可解釋機器學習方法的侷限》,免費下載!機器學習新書
- JAVA程式設計學習記錄(API常用類(二))Java程式設計API