基于 SAP BTP 平台的 AI 项目经验分享

笔者在 SAP 成都研究院工作十五余年,也曾参加过一些基于 SAP Business Technology Platform(中文名称为 SAP 业务技术平台,以下简称 SAP BTP) 的 AI 服务的项目开发和原型验证。本文将这些关于 AI 的项目经验分享出来,希望社区内的 AI 专家不吝赐教。

SAP BTP 将智能企业应用程序与数据库和数据管理、分析、集成和扩展功能整合到一个平台中,适用于云环境和混合环境,包括数百个用于 SAP 和第三方应用程序的预构建集成。其中之一便是 SAP AI Business Services.

基于 SAP BTP 平台的 AI 项目经验分享_第1张图片

如何在 Java 程序里消费 SAP AI 服务

这个项目的背景如下:开发一个 Java 程序,用户可以上传一张图片,该 Java 程序调用 SAP AI API,后者会使用预先训练好的机器学习模型,对该图片进行识别,给用户返回一个文本格式的响应信息,告诉用户识别结果。

下面是具体的实现步骤。

访问 https://api.sap.com, 点击 API :

基于 SAP BTP 平台的 AI 项目经验分享_第2张图片

选择 SAP Leonardo Machine Learning - Functional Services:

基于 SAP BTP 平台的 AI 项目经验分享_第3张图片

Functional Services 类别里选择图像识别 AI 服务,即 Product Image Classification API:

该 API 模型是由 SAP 基于大约 5 万张 Icecat 图片训练而成,能区分 29 种不同的产品类别,这些类别具体可以在官方文档上查询到,比如电脑显示器,数码相机,外部存储设备,键盘,液晶电视,手机充电器,笔记本和其他外设等等等。

可以打开图像识别 API 的技术规范页面,包含 API Model Schema 介绍,即调用 API 后,返回的响应结构里包含的字段名称以及数据类型。

该界面还嵌入了一个小型的 API 调用控制台,可以直接在控制台里选择上传一个本地图形文件,点击 Try it out 按钮来体验 API 的效果。

基于 SAP BTP 平台的 AI 项目经验分享_第4张图片

用下图这张图片进行测试:

基于 SAP BTP 平台的 AI 项目经验分享_第5张图片

在控制台里看到请求处理成功,API 判断出来该图片有 97% 的可能性是一台 notebook.
基于 SAP BTP 平台的 AI 项目经验分享_第6张图片

API 测试通过之后,下一步是在 Java 程序里进行消费。在 API 控制台的右上角有一个按钮 Download SDK,点击之后将 SDK 下载到本地,可以看到该 SDK 是一个基于Gradle 的 Java 项目。因此我们需要下载 Maven 和 Gradle 并完成环境变量配置。

Java 开发环境就绪后,使用 Eclipse 的 import 功能,将 SDK 导入到 Eclipse 里。导入完成后如下图所示:红色区域是 AI Service SDK 自带的代码,蓝色区域是笔者手动创建的代码,用于调用 API 并打印结果。

基于 SAP BTP 平台的 AI 项目经验分享_第7张图片

编辑根目录下的 pom.xml, 将如下依赖关系维护进去:

com.sap.apibhub.sdk, 版本号 1.0.0
基于 SAP BTP 平台的 AI 项目经验分享_第8张图片

在项目根目录下执行 Maven 命令 mvn install, 确保项目成功构建。至此,可以开始编写 Java 代码使用SAP AI SDK 来调用 AI API 了。

基于 SAP BTP 平台的 AI 项目经验分享_第9张图片

SDK 封装了底层 HTTP 请求的发送和响应的解析等细节,使用起来非常简捷。第 15 行的 inferenceSyncPost 函数,接收一个本地 File 对象,然后向 SAP AI Service Endpoint 发送 HTTP 请求。
基于 SAP BTP 平台的 AI 项目经验分享_第10张图片

第 8 行的 API key,可以从 API 控制台获得:

执行 Java 应用,在 Eclipse 控制台打印出的输出, AI Service 判断这张图片有 97% 的可能性是一个 notbook:
基于 SAP BTP 平台的 AI 项目经验分享_第11张图片

如何在 Web 应用里消费 SAP AI 服务

登录 SAP 云平台,打开 WebIDE:

基于 SAP BTP 平台的 AI 项目经验分享_第12张图片

因为是在浏览器环境里使用 JavaScript 调用远端的 AI API,为了避免跨域问题,需要在云平台里创建一个Destination,作用和 ABAP Netweaver 事务码 SM59 里创建的 Destination 类似,所有的 HTTP Request 和 Response 都经由该 Destination.

基于 SAP BTP 平台的 AI 项目经验分享_第13张图片

属性如上图所示,url 维护为对应的 sandbox 环境:https://sandbox.api.sap.com/ml

记下这个 Destination 的名称 sapui5ml-api, 因为稍后的 Web 应用的 JavaScript 代码里需要使用。

维护额外的属性 WebIDEnabled 为 true,这样该 Destination 才能在 WebIDE 应用环境中被使用。点击 Check Connection 确保看到绿灯,表明 SAP 云平台 Destination 同 AI Service Endpoint 的连接处于可用状态。

打开 WebIDE 里 Web 应用工程里的 settings.json 文件,将之前从 API 控制台里拷贝的 API Key 粘贴到此处:

基于 SAP BTP 平台的 AI 项目经验分享_第14张图片

在项目根目录下的 neo-app.json 文件里,把类型为 destination 的 target 对象的名称,维护成之前在 SAP 云平台里创建的 Destination 相同的名称 sapui5ml-api:

基于 SAP BTP 平台的 AI 项目经验分享_第15张图片

运行这个 Web 应用,能看到如下界面:

基于 SAP BTP 平台的 AI 项目经验分享_第16张图片

针对这个 Web 应用做一些简单的测试,将下面这张图片,上传到 Web 应用去:

基于 SAP BTP 平台的 AI 项目经验分享_第17张图片

SAP AI API,识别出这张图片有 74.7% 的可能性是一台笔记本电脑,13.8% 的可能性是键盘,11.3% 的可能性是Tablets.

点击 Web 应用的按钮 View JSON,能看到 AI 服务返回的技术明细。

基于 SAP BTP 平台的 AI 项目经验分享_第18张图片

如何对 SAP 云平台上的机器学习模型进行重新训练

如果用户通过前文描述的 Java 应用或者 Web 应用上传的图片类别,并不被 SAP AI 服务事先训练好的模型所支持,我们可以自行对 AI 服务的机器学习模型进行重新训练。

假设我们期望 Product Image Classfication 机器学习模型能够识别各式各样的花。首先得准备大量不同类型的花的图片。Tensorflow 官网上,已经体贴地给想尝试重新训练 AI 模型的学习者们,提供了一个做练习用的压缩包,里面包含了大量各式花的图片:

http://download.tensorflow.or...

用于重新训练 AI 模型的数据集,必须符合下图所示的层级结构,即 training, validation 和 test 三个文件夹下面,分别包含以产品类别命名的子文件夹,且数据规模之比为 8:1:1.

基于 SAP BTP 平台的 AI 项目经验分享_第19张图片

SAP 云平台 service key 里包含了一个IMAGE_RETRAIN_API_URL,可以用来获取重新训练 AI 模型需要上传数据集的在线存储 url:

基于 SAP BTP 平台的 AI 项目经验分享_第20张图片

向这个 url 发送一个 HTTP Get 请求,得到在线存储的url:

基于 SAP BTP 平台的 AI 项目经验分享_第21张图片

把这个 url 粘贴到浏览器里,输入 Postman 里返回的 accessKey 和 secretKey 登录,就能以 Web 的方式访问这个在线存储了:

基于 SAP BTP 平台的 AI 项目经验分享_第22张图片

下一步是把本地的训练文件,上传到这个部署在 AWS 的在线存储上去。

首先用命令行 mc config host 定义一个名为 sapjerrys3 的远程站点,将上一步从 Postman 获得的 AWS 在线存储 url,accessKey 和 secret 绑定到这个站点上:

然后使用命令行上传文件:

mc.exe cp -r C:\Code\MachineLearningStudy\flowersjerry sapjerrys3\data

大概十几分钟后,文件上传完毕:

此时可以从浏览器端,看到 AWS 在线存储上传完毕的训练文件。

基于 SAP BTP 平台的 AI 项目经验分享_第23张图片

重新训练的数据集就绪之后,下一步就可以通过后台作业的方式,提交一个模型重新训练请求了。使用 Postman 发送一个HTTP Post 请求,启动模型重新训练的后台作业。

基于 SAP BTP 平台的 AI 项目经验分享_第24张图片

使用命令行查询后台作业状态,待其状态变为 SUCCEEDED, 说明模型训练已经结束了。

基于 SAP BTP 平台的 AI 项目经验分享_第25张图片

模型重新训练完毕后,对其进行消费,url 格式为:

https://mlfinternalproduction.../versions/1

使用一张向日葵图片:
基于 SAP BTP 平台的 AI 项目经验分享_第26张图片

将其作为 HTTP Post 的参数,发送给重新训练完毕的模型 flowerjerrymodel,得到的结果显示,AI Service 认为这张图片有大约 87% 的可能性是一棵向日葵(Sunflower)。

基于 SAP BTP 平台的 AI 项目经验分享_第27张图片

最后,我们来看一个 AI 服务在企业智能服务(Intelligent Serbice Scenario)场景中的具体应用。

一位维修工程师接受客户的维修请求,上门维修某设备,发现该设备某零件损坏了。假设这位技师由于种种原因,没能根据经验识别出该零件的型号。此时技师掏出手机,给零件拍摄一张图片,通过手机上安装的 SAP 智能服务解决方案(比如本文之前描述的 Java 程序和 Web 应用),通过 AI API,自动识别出零件的准确型号,返回给维修工程师。

SAP 云平台 AI 服务,接收到维修工程师上传的图片后,将该图片的特征向量提取出来,通过平台上基于海量数据集训练好的模型,识别出准确型号。

基于 SAP BTP 平台的 AI 项目经验分享_第28张图片

特征向量的提取,从数学上说,即通过某种算法,把输入图片的二进制流,转换成一个向量(一维矩阵)的过程。

以下图梯形和圆形为例,我们把图形均匀地分成 9 个区域,在图形中心观察每个区域内图形单元的梯度方向,就可以实现降维,把二维图像以一个一维矩阵来表示。

基于 SAP BTP 平台的 AI 项目经验分享_第29张图片

对于基于 SAP AI 服务开发应用程序的编程人员来说,无需了解图片特征向量提取的具体算法,只需通过 Restful API 调用的方式,把待提取特征向量的图片推送给 AI Service Endpoint,就能得到特征向量输出。

通过如下 url 进入 SAP AI Service 中有关图片特征向量提取服务的测试控制台和帮助文档:

https://api.sap.com/api/img_f...

从控制台上传一张本地图片,点击 Execute 按钮:
基于 SAP BTP 平台的 AI 项目经验分享_第30张图片

得到了输出的特征向量:

基于 SAP BTP 平台的 AI 项目经验分享_第31张图片

有了特征向量后,我们再回到正在讨论的企业智能服务场景。我们利用 SAP AI 服务的另一个和图片处理相关的人工智能服务:图片相似度评分(Inference Service for Similarity Scoring)。

基于 SAP BTP 平台的 AI 项目经验分享_第32张图片

这个 图片相似度评分 AI API 的输入需要两个压缩包。第一个压缩包内文件内容是一系列特征向量,来自维修工程师上传的图片文件。第二个压缩包里存放的是型号为 A,B,C... 等零件图片的特征向量。

基于 SAP BTP 平台的 AI 项目经验分享_第33张图片

如上图所示,为简单起见,第二个压缩包我只存放了两个文件,分别存放的是零件型号 A 和型号 B 的特征向量。

使用 Postman 调用 API,传入这两个压缩包:

基于 SAP BTP 平台的 AI 项目经验分享_第34张图片

得到的结果表明,维修工程师上传的图片和型号 A 的相似系数几乎接近 1,那么显然,该图片代表型号 A。

基于 SAP BTP 平台的 AI 项目经验分享_第35张图片

当然,除了直接上传包含了图片特征向量的压缩文件之外,将这些文件包含的特征向量内容以 JSON 字符串的方式作为输入,调用 API 也是一种通用的方式,JSON 字符串的格式在 SAP 官网里有详细说明,这里不再赘述。

基于 SAP BTP 平台的 AI 项目经验分享_第36张图片

希望本文介绍的这些 SAP AI API 的使用场景对大家有所帮助,感谢阅读。

你可能感兴趣的:(基于 SAP BTP 平台的 AI 项目经验分享)