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

以sap leonardo作为关键字在微信上搜索,能搜到不少文章。但是我浏览了一下,好像没有发现有从具体编程角度上来介绍的。所以我就贡献一篇。

需求

开发一个Java程序,用户可以指定一张图片,该Java程序调用SAP Leonardo上训练好的机器学习API,该API会识别该图片,给用户返回一个文本信息,告诉用户识别结果。

  1. 访问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。

  1. 前一步骤的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了。

  1. 使用下图的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/ProductImageMLService

更多Leonardo精彩,尽在https://api.sap.com!

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原文地址:https://www.cnblogs.com/sap-jerry/p/9061899.html

时间: 2024-07-31 02:51:29

使用Java程序消费SAP Leonardo的机器学习API的相关文章

部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API

Jerry的前一篇文章?如何在Web应用里消费SAP Leonardo的机器学习API?里介绍的例子是Neo测试环境的Web应用消费sandbox版本的机器学习API,url如下: https://sandbox.api.sap.com/ml 本文介绍一个部署在SAP Cloud Platform CloudFoundry环境下的应用,如何消费SAP Leonardo上的机器学习API. 登录SAP Cloud Platform Cockpit,进入CloudFoundry环境的Service

了解URL编码的基本概念,在javascript和java程序中使用内置的API进行编码和解码

1.URL编码的基本概念 URL只能使用US-ASCII 字符集来通过因特网进行发送.由于URL常常会包含 ASCII 集合之外的字符,URL必须转换为有效的 ASCII 格式.URL 编码使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 字符.URL 不能包含空格,URL 编码通常使用 + 来替换空格.所谓URL编码,就是将非US-ASCII字符和US-ASCII中的特殊字符,用相应的字符集编码来表示.比如,汉字"你",如果用UTF-8编码,出现在URL

从SAP Leonardo到SAP Data Intelligence

Jerry之前的文章介绍过,我所在的团队曾经用SAP Leonardo上的机器学习服务,开发了一系列消费这些服务的原型应用: 如何在Web应用里消费SAP Leonardo的机器学习API 如何对SAP Leonardo上的机器学习模型进行重新训练 SAP Leonardo图片处理相关的机器学习服务在SAP智能服务场景中的应用 最近我们开发的一个原型应用,包含了微信小程序,SAP Conversation AI同SAP Cloud for Customer的集成,需要把用户在微信小程序里同SAP

SAP RFC 函数创建 Java程序调用 学习总结 一步一步图文并茂

前言 公司即将接到一个项目与SAP有接口.老大让我们搞SAP,首先SAP接触过,但是没玩过开发,本周就专心的在研究这一块. 各种碰壁,SAP的系统让我怎么说呢? 算了,说多了都是泪,下面附上本周学习成果,大家一起探讨一下,ABAP 还得多学学. Package (tcode:se80) 输入需要创建的 Package ,例:ZTP (之前用T打头测试,貌似不行,大家可以试试) 点  Yes 创建. 输入创建Package的信息. Table (tcode:se11) 点击Create. 点击保存

Java程序员那么多,如何才能脱颖而出?

JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA.但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大. 现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展的局

做什么职业,也别做程序员,尤其是Java程序员

千万别做程序员,尤其别做Java这种门槛低,入门快的程序员(别跟我说Java搞精通了也很牛之类的,原因不解释,做5年以上就知道了),程序员本来就是我见过最坑爹的职业了...Java程序员更是,现在满地都是Java培训机构,不出3年,你就不值钱了,就像3年前的C++一样!而且Java贬值更快,因为他比c++简单多了,培训个3个月,直接上岗,你说你怎么保证自己是不可替换的?而且现在Java程序员的整体工资,已经有不断下降的趋势! 我就用我的亲身经历告诉你,你这个想转程序员的人:别做这行,因为你不知道

CSDN日报20170320——《Java 程序员的面试经历和题库》

[程序人生]Java 程序员的面试经历和题库 作者:nuaazhaofeng 最近打算换城市了,受不了北京的雾霾了,所以准备逃离啦.所以一直在面试中,整理了下最近遇到的一些面试题,供大家参考.其中会包含一些面试的小经验,如果您是面霸,希望能给予指导.自己不是大牛,如果您是大牛,也可以忽略之.我面试的岗位是Java后端开发工程师. [Python]7行Python代码的人脸识别 作者:半吊子全栈工匠 随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿.AI涉及的领域众多,图像识别中的

做什么职业,也别做程序员,尤其是Java程序员(转载)

千万别做程序员,尤其别做Java这种门槛低,入门快的程序员(别跟我说Java搞精通了也很牛之类的,原因不解释,做5年以上就知道了),程序员本来就是我见过最坑爹的职业了...Java程序员更是,现在满地都是Java培训机构,不出3年,你就不值钱了,就像3年前的C++一样!而且Java贬值更快,因为他比c++简单多了,培训个3个月,直接上岗,你说你怎么保证自己是不可替换的?而且现在Java程序员的整体工资,已经有不断下降的趋势! 我就用我的亲身经历告诉你,你这个想转程序员的人:别做这行,因为你不知道

Java程序员面试题收集(3)

面试中被问到过的题目: 1.<%@ include=""/>和<jsp:include page="" flush="true"/> 2.知道的GOF 模式,说明 3.自己的长期规划是什么,近期规划是什么? 4.override和overload 5.final关键字 6.系统如何分层,前台,逻辑,数据访问.你的职责,代码如何保证质量的 7.getAttribute 和getParameter 区别 8.forward和r