摘要:需求開發(fā)一個程序,用戶可以指定一張圖片,該程序調(diào)用上訓(xùn)練好的機(jī)器學(xué)習(xí),該會識別該圖片,給用戶返回一個文本信息,告訴用戶識別結(jié)果。至此,您可以開始編寫代碼使用提供的來調(diào)用該機(jī)器學(xué)習(xí)了。使用了發(fā)布的一個開源庫,將返回的響應(yīng)反序列化成對象。
以sap leonardo作為關(guān)鍵字在微信上搜索,能搜到不少文章。但是我瀏覽了一下,好像沒有發(fā)現(xiàn)有從具體編程角度上來介紹的。所以我就貢獻(xiàn)一篇。
需求開發(fā)一個Java程序,用戶可以指定一張圖片,該Java程序調(diào)用SAP Leonardo上訓(xùn)練好的機(jī)器學(xué)習(xí)API,該API會識別該圖片,給用戶返回一個文本信息,告訴用戶識別結(jié)果。
訪問https://api.sap.com, 點(diǎn)擊API:
SAP Leonardo Machine Learning - Functional Services
點(diǎn)擊Product Image Classification API:
會看到如下界面。該界面包含了這個API的Model Schema介紹,即您調(diào)用API之后,返回的響應(yīng)結(jié)構(gòu)里包含哪些字段,以及對應(yīng)的類型(對象或者數(shù)組)。界面里包含了一個小型的API調(diào)用控制臺,您可以直接控制臺里選擇一個本地圖形文件,然后點(diǎn)擊Try it out按鈕來體驗(yàn)一下API的效果。
例如我使用了下面這張圖片進(jìn)行測試:
在控制臺里看到請求處理成功,API判斷出來該圖片有97%的可能性是一臺notebook。
下面我們需要使用Java程序來調(diào)用API。
前一步驟的API控制臺的右上角有一個按鈕Download SDK,點(diǎn)擊之后將SDK下載到本地:
可以看到該SDK是一個基于Gradle的Java項(xiàng)目。您需要下載Maven和Gradle并完成環(huán)境變量的配置,這些配置非常基礎(chǔ),在網(wǎng)上有大量資料,這里不再重復(fù)。
完成配置后,使用Eclipse的import功能,將SDK導(dǎo)入到Eclipse里。
導(dǎo)入完成后如圖。紅色區(qū)域是SDK自帶的代碼,藍(lán)色區(qū)域是Jerry自己手動創(chuàng)建的代碼,用于調(diào)用API并打印結(jié)果。
雙擊根目錄下的pom.xml, 將如下依賴關(guān)系維護(hù)進(jìn)去:
在項(xiàng)目根目錄下執(zhí)行Maven命令 mvn install, 確保項(xiàng)目成功build。至此,您可以開始編寫Java代碼使用SAP提供的JDK來調(diào)用該機(jī)器學(xué)習(xí)API了。
使用下圖的Java代碼調(diào)用SDK去消費(fèi)API。SDK封裝了底層HTTP請求的發(fā)送和響應(yīng)的解析等細(xì)節(jié),使用起來非常簡捷。
為簡單起見,上圖13行我將本地圖片文件的絕對地址硬編碼進(jìn)去。上圖第八行硬編碼的API key來自API控制臺:
至此,大功告成,運(yùn)行程序。。。。。。什么情況?
仔細(xì)看過錯誤消息,很快Jerry就發(fā)現(xiàn)了問題出在哪里。上圖藍(lán)色下劃線就暗示了錯誤根源。SAP SDK使用了Google發(fā)布的一個開源Java庫Gson,將API返回的響應(yīng)反序列化成Java對象。有了Gson,應(yīng)用程序開發(fā)人員無需重復(fù)造輪子,只需要定義一些Java類,作為容器存儲Gson反序列化的執(zhí)行結(jié)果即可。
我們再回到API控制臺,API響應(yīng)結(jié)構(gòu)里request字段的類型聲明為string。
然而通過測試發(fā)現(xiàn),request字段的內(nèi)容實(shí)際是一個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字段的結(jié)構(gòu),為Request.java維護(hù)對應(yīng)的成員變量。
例如tenantName在API響應(yīng)結(jié)構(gòu)里是一個String,因此在Java類里的類型是String;files在API響應(yīng)結(jié)構(gòu)里是一個數(shù)組,因此在Java類里的類型為List
調(diào)整完畢之后再次執(zhí)行,能看到期望的輸出結(jié)果:通過SDK調(diào)用API并打印結(jié)果。
如果您不愿意自己手動修改,可以直接從我的github下載修改之后的代碼,只需要用您自己的API key替換掉代碼中硬編碼的key即可。
https://github.com/i042416/Pr...
更多Leonardo精彩,盡在https://api.sap.com!
要獲取更多Jerry的原創(chuàng)技術(shù)文章,請關(guān)注公眾號"汪子熙"。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19749.html
摘要:需求開發(fā)一個程序,用戶可以指定一張圖片,該程序調(diào)用上訓(xùn)練好的機(jī)器學(xué)習(xí),該會識別該圖片,給用戶返回一個文本信息,告訴用戶識別結(jié)果。至此,您可以開始編寫代碼使用提供的來調(diào)用該機(jī)器學(xué)習(xí)了。使用了發(fā)布的一個開源庫,將返回的響應(yīng)反序列化成對象。 以sap leonardo作為關(guān)鍵字在微信上搜索,能搜到不少文章。但是我瀏覽了一下,好像沒有發(fā)現(xiàn)有從具體編程角度上來介紹的。所以我就貢獻(xiàn)一篇。 show...
摘要:關(guān)于的跨域問題的討論網(wǎng)上有太多的資源了。直入主題,最近我正在做一個原型開發(fā)通過云平臺和把系統(tǒng)上的暴露出來,給微信消費(fèi)。請求得到響應(yīng)之后,再將其發(fā)送給。回到我的原型開發(fā)需求,云平臺上的消費(fèi)如今通過來實(shí)現(xiàn),為簡單起見,我將硬編碼在里。 關(guān)于JavaScript的跨域問題(Cross Domain)的討論, 網(wǎng)上有太多的資源了。國內(nèi)的程序猿寫了非常多的優(yōu)秀文章,Jerry這里就不再重復(fù)了。 ...
摘要:關(guān)于的跨域問題的討論網(wǎng)上有太多的資源了。直入主題,最近我正在做一個原型開發(fā)通過云平臺和把系統(tǒng)上的暴露出來,給微信消費(fèi)。請求得到響應(yīng)之后,再將其發(fā)送給。回到我的原型開發(fā)需求,云平臺上的消費(fèi)如今通過來實(shí)現(xiàn),為簡單起見,我將硬編碼在里。 關(guān)于JavaScript的跨域問題(Cross Domain)的討論, 網(wǎng)上有太多的資源了。國內(nèi)的程序猿寫了非常多的優(yōu)秀文章,Jerry這里就不再重復(fù)了。 ...
摘要:機(jī)器學(xué)習(xí)在客戶管理場景中的應(yīng)用使用機(jī)器學(xué)習(xí)進(jìn)行客戶管理,我們可以得到客戶度全方位的視圖。可以看到機(jī)器學(xué)習(xí)給為和這兩個產(chǎn)品計(jì)算的相關(guān)分?jǐn)?shù)是和。關(guān)于機(jī)器學(xué)習(xí)在中的更多應(yīng)用,請參考幫助文檔。 關(guān)于機(jī)器學(xué)習(xí)這個話題,我相信我這個公眾號1500多位關(guān)注者里,一定有很多朋友的水平比Jerry高得多。如果您看過我以前兩篇文章,您就會發(fā)現(xiàn),我對機(jī)器學(xué)習(xí)僅僅停留在會使用API的層面上。 使用Java程...
閱讀 3280·2023-04-26 02:42
閱讀 791·2021-10-09 09:41
閱讀 3191·2021-09-06 15:02
閱讀 700·2019-08-26 10:45
閱讀 480·2019-08-23 15:53
閱讀 733·2019-08-22 18:10
閱讀 550·2019-08-22 18:01
閱讀 3517·2019-08-22 17:34