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