使用Java程序消费SAP Leonardo的机器学习API
以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/ProductImageMLService
更多Leonardo精彩,尽在https://api.sap.com!

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


使用Java程序消费SAP Leonardo的机器学习API的更多相关文章
- 如何在Web应用里消费SAP Leonardo的机器学习API
去年5月的时候,Jerry曾经写了一篇文章:使用Java程序消费SAP Leonardo的机器学习API,而最近另外做的一个项目,需要在Web应用里做同样的事情. 因为有了前一篇文章的铺垫,避免了很多 ...
- 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API
Jerry的前一篇文章 如何在Web应用里消费SAP Leonardo的机器学习API 里介绍的例子是Neo测试环境的Web应用消费sandbox版本的机器学习API,url如下: https://s ...
- SAP Leonardo图片处理相关的机器学习服务在SAP智能服务场景中的应用
本文作为Jerry最近正在做的一个项目的工作思路的梳理. 我们假设这样一个服务场景,技师上门维修某设备,发现设备上某零件损坏了,假设这位技师由于种种原因,没能根据自己的经验识别出这个零件的型号.此时技 ...
- 如何对SAP Leonardo上的机器学习模型进行重新训练
Jerry之前的两篇文章介绍了如何通过Restful API的方式,消费SAP Leonardo上预先训练好的机器学习模型: 如何在Web应用里消费SAP Leonardo的机器学习API 部署在SA ...
- kafka_2.11-0.8.2.1+java 生产消费程序demo示例
Kafka学习8_kafka java 生产消费程序demo示例 kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kaf ...
- 使用SAP Leonardo上的机器学习服务提取图片的特征向量
要想提取图片的特征向量,首先得知道特征向量是什么. 我们假设这样一个服务场景,技师上门维修某设备,发现上面某零件损坏了,假设这位技师由于种种原因,没能根据自己的经验识别出这个零件的型号.此时技师掏出自 ...
- 读懂SAP Leonardo物联网平台
读懂SAP Leonardo物联网平台 https://blog.csdn.net/weixin_42137700/article/details/81903290 本文比较系统.全面地介绍了SAP ...
- Java 程序员必须收藏的资源大全
Java 程序员必须收藏的资源大全 Java(27) 古董级工具 这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用. Apache Ant:基于XML的构建管理工具.官网 cglib:字节码 ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
随机推荐
- EasyUI 在mvc中的引入与使用
使用步骤: 一.先引入: 1.easyui下载,可以去官方网站去下载最新版EasyUI官方下载地址:http://www.jeasyui.com/download/index.php 2.下载后解压, ...
- 用js正则判断输入的两位字符,第一位是数字16进制的,第二位是I、O、Q、U除外的字母(A到Z)
项目中遇到客户的需求变化,要验证某个数据的正确性,判断输入的两位字符,第一位是数字16进制的,第二位是I.O.Q.U除外的字母(A到Z). 本来对js不熟练,网上参考了一下js正则验证的规则,使用正则 ...
- C++多线程框架
Thread线程框架 线程定义:线程可以理解为一个特立独行的函数.其存在的意义,就是并行,避免了主线程的阻塞. ----------------------------thread与函数------- ...
- FMDB 使用注意点
关于FMDB最基本的使用我们就不在说了,这个网上大把的文章介绍,我就在这里总结几点我最近在写一个小东西的时候注意到的一点点东西: 一: 怎么看真机上SQLite数据库 我们在开发的过程中肯定有使用到真 ...
- sourcetree 不停的让输入密码,报 password required
sourcetree 不停的让输入密码,报 password required sourcetree 不停的让输入密码,报 password required1.在终端(terminal)打开你的工程 ...
- jmeter场景设计实战(一)
需求:2000用户在线,100用户并发访问首页. 和开发沟通了解了具体的需求:2000用户是在线登录状态,这2000用户中要达到100用户并发去访问首页,在这个过程中可能会有停留时间,并不是用户登录之 ...
- Ubuntu下rsyslog集中收集mysql审计日志
服务端 1.安装最新版本rsyslog sudo apt-get install software-properties-common python-software-properties sudo ...
- Visitor模式(访问者设计模式)
Visitor ? 在Visitor模式中,数据结构与处理被分离开来.我们编写一个表示"访问者"的类来访问数据结构中的元素, 并把对各元素的处理交给访问者类.这样,当需要增加新的处 ...
- android SDK manager 无法获取更新版本的解决办法
http://mirrors.neusoft.edu.cn/eclipse/releases/luna/打开这个网址就可以看到adt的详细信息: http://developer.android.c ...
- 深入学习Hive应用场景及架构原理
Hive背景介绍 Hive最初是Facebook为了满足对海量社交网络数据的管理和机器学习的需求而产生和发展的.互联网现在进入了大数据时代,大数据是现在互联网的趋势,而hadoop就是大数据时代里的核 ...