以sap leonardo做爲關鍵字在微信上搜索,能搜到很多文章。可是我瀏覽了一下,好像沒有發現有從具體編程角度上來介紹的。因此我就貢獻一篇。java
開發一個Java程序,用戶能夠指定一張圖片,該Java程序調用SAP Leonardo上訓練好的機器學習API,該API會識別該圖片,給用戶返回一個文本信息,告訴用戶識別結果。git
SAP Leonardo Machine Learning - Functional Services
github
點擊Product Image Classification API:編程
會看到以下界面。該界面包含了這個API的Model Schema介紹,即您調用API以後,返回的響應結構裏包含哪些字段,以及對應的類型(對象或者數組)。界面裏包含了一個小型的API調用控制檯,您能夠直接控制檯裏選擇一個本地圖形文件,而後點擊Try it out按鈕來體驗一下API的效果。api
例如我使用了下面這張圖片進行測試: 在控制檯裏看到請求處理成功,API判斷出來該圖片有97%的可能性是一臺notebook。數組
下面咱們須要使用Java程序來調用API。微信
能夠看到該SDK是一個基於Gradle的Java項目。您須要下載Maven和Gradle並完成環境變量的配置,這些配置很是基礎,在網上有大量資料,這裏再也不重複。 完成配置後,使用Eclipse的import功能,將SDK導入到Eclipse裏。機器學習
導入完成後如圖。紅色區域是SDK自帶的代碼,藍色區域是Jerry本身手動建立的代碼,用於調用API並打印結果。學習
雙擊根目錄下的pom.xml, 將以下依賴關係維護進去: 測試
在項目根目錄下執行Maven命令 mvn install, 確保項目成功build。至此,您能夠開始編寫Java代碼使用SAP提供的JDK來調用該機器學習API了。
3. 使用下圖的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的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼: