资讯专栏INFORMATION COLUMN

使用Java程序消费SAP Leonardo的机器学习API

noONE / 1162人阅读

摘要:需求开发一个程序,用户可以指定一张图片,该程序调用上训练好的机器学习,该会识别该图片,给用户返回一个文本信息,告诉用户识别结果。至此,您可以开始编写代码使用提供的来调用该机器学习了。使用了发布的一个开源库,将返回的响应反序列化成对象。

以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的原创技术文章,请关注公众号"汪子熙"。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69455.html

相关文章

  • 使用Java程序消费SAP Leonardo机器学习API

    摘要:需求开发一个程序,用户可以指定一张图片,该程序调用上训练好的机器学习,该会识别该图片,给用户返回一个文本信息,告诉用户识别结果。至此,您可以开始编写代码使用提供的来调用该机器学习了。使用了发布的一个开源库,将返回的响应反序列化成对象。 以sap leonardo作为关键字在微信上搜索,能搜到不少文章。但是我浏览了一下,好像没有发现有从具体编程角度上来介绍的。所以我就贡献一篇。 show...

    AlanKeene 评论0 收藏0
  • 使用Java程序消费SAP Leonardo机器学习API

    摘要:需求开发一个程序,用户可以指定一张图片,该程序调用上训练好的机器学习,该会识别该图片,给用户返回一个文本信息,告诉用户识别结果。至此,您可以开始编写代码使用提供的来调用该机器学习了。使用了发布的一个开源库,将返回的响应反序列化成对象。 以sap leonardo作为关键字在微信上搜索,能搜到不少文章。但是我浏览了一下,好像没有发现有从具体编程角度上来介绍的。所以我就贡献一篇。 show...

    Tikitoo 评论0 收藏0
  • JavaScript访问SAP云平台上服务遇到跨域问题该怎么办

    摘要:关于的跨域问题的讨论网上有太多的资源了。直入主题,最近我正在做一个原型开发通过云平台和把系统上的暴露出来,给微信消费。请求得到响应之后,再将其发送给。回到我的原型开发需求,云平台上的消费如今通过来实现,为简单起见,我将硬编码在里。 关于JavaScript的跨域问题(Cross Domain)的讨论, 网上有太多的资源了。国内的程序猿写了非常多的优秀文章,Jerry这里就不再重复了。 ...

    用户84 评论0 收藏0
  • JavaScript访问SAP云平台上服务遇到跨域问题该怎么办

    摘要:关于的跨域问题的讨论网上有太多的资源了。直入主题,最近我正在做一个原型开发通过云平台和把系统上的暴露出来,给微信消费。请求得到响应之后,再将其发送给。回到我的原型开发需求,云平台上的消费如今通过来实现,为简单起见,我将硬编码在里。 关于JavaScript的跨域问题(Cross Domain)的讨论, 网上有太多的资源了。国内的程序猿写了非常多的优秀文章,Jerry这里就不再重复了。 ...

    Jinkey 评论0 收藏0
  • 机器学习SAP Cloud for Customer中应用

    摘要:机器学习在客户管理场景中的应用使用机器学习进行客户管理,我们可以得到客户度全方位的视图。可以看到机器学习给为和这两个产品计算的相关分数是和。关于机器学习在中的更多应用,请参考帮助文档。 关于机器学习这个话题,我相信我这个公众号1500多位关注者里,一定有很多朋友的水平比Jerry高得多。如果您看过我以前两篇文章,您就会发现,我对机器学习仅仅停留在会使用API的层面上。 使用Java程...

    Jeff 评论0 收藏0

发表评论

0条评论

noONE

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<