摘要:需求開發一個程序,用戶可以指定一張圖片,該程序調用上訓練好的機器學習,該會識別該圖片,給用戶返回一個文本信息,告訴用戶識別結果。至此,您可以開始編寫代碼使用提供的來調用該機器學習了。使用了發布的一個開源庫,將返回的響應反序列化成對象。
以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
調整完畢之后再次執行,能看到期望的輸出結果:通過SDK調用API并打印結果。
如果您不愿意自己手動修改,可以直接從我的github下載修改之后的代碼,只需要用您自己的API key替換掉代碼中硬編碼的key即可。
https://github.com/i042416/Pr...
更多Leonardo精彩,盡在https://api.sap.com!
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69455.html
摘要:需求開發一個程序,用戶可以指定一張圖片,該程序調用上訓練好的機器學習,該會識別該圖片,給用戶返回一個文本信息,告訴用戶識別結果。至此,您可以開始編寫代碼使用提供的來調用該機器學習了。使用了發布的一個開源庫,將返回的響應反序列化成對象。 以sap leonardo作為關鍵字在微信上搜索,能搜到不少文章。但是我瀏覽了一下,好像沒有發現有從具體編程角度上來介紹的。所以我就貢獻一篇。 show...
摘要:關于的跨域問題的討論網上有太多的資源了。直入主題,最近我正在做一個原型開發通過云平臺和把系統上的暴露出來,給微信消費。請求得到響應之后,再將其發送給。回到我的原型開發需求,云平臺上的消費如今通過來實現,為簡單起見,我將硬編碼在里。 關于JavaScript的跨域問題(Cross Domain)的討論, 網上有太多的資源了。國內的程序猿寫了非常多的優秀文章,Jerry這里就不再重復了。 ...
摘要:關于的跨域問題的討論網上有太多的資源了。直入主題,最近我正在做一個原型開發通過云平臺和把系統上的暴露出來,給微信消費。請求得到響應之后,再將其發送給。回到我的原型開發需求,云平臺上的消費如今通過來實現,為簡單起見,我將硬編碼在里。 關于JavaScript的跨域問題(Cross Domain)的討論, 網上有太多的資源了。國內的程序猿寫了非常多的優秀文章,Jerry這里就不再重復了。 ...
摘要:機器學習在客戶管理場景中的應用使用機器學習進行客戶管理,我們可以得到客戶度全方位的視圖。可以看到機器學習給為和這兩個產品計算的相關分數是和。關于機器學習在中的更多應用,請參考幫助文檔。 關于機器學習這個話題,我相信我這個公眾號1500多位關注者里,一定有很多朋友的水平比Jerry高得多。如果您看過我以前兩篇文章,您就會發現,我對機器學習僅僅停留在會使用API的層面上。 使用Java程...
閱讀 3581·2019-08-30 15:55
閱讀 1379·2019-08-29 16:20
閱讀 3662·2019-08-29 12:42
閱讀 2667·2019-08-26 10:35
閱讀 1015·2019-08-26 10:23
閱讀 3412·2019-08-23 18:32
閱讀 902·2019-08-23 18:32
閱讀 2898·2019-08-23 14:55