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

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

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

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

下面是具体的实现步骤。

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

选择 SAP Leonardo Machine Learning - Functional Services:

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

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

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

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

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

在控制台里看到请求处理成功,API 判断出来该图片有 97% 的可能性是一台 notebook.

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

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

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

com.sap.apibhub.sdk, 版本号 1.0.0

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

SDK 封装了底层 HTTP 请求的发送和响应的解析等细节,使用起来非常简捷。第 15 行的 inferenceSyncPost 函数,接收一个本地 File 对象,然后向 SAP AI Service Endpoint 发送 HTTP 请求。

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

执行 Java 应用,在 Eclipse 控制台打印出的输出, AI Service 判断这张图片有 97% 的可能性是一个 notbook:

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

登录 SAP 云平台,打开 WebIDE:

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

属性如上图所示,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 粘贴到此处:

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

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

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

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

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

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

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

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

http://download.tensorflow.org/example_images/flower_photos.tgz

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

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

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

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

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

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

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

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

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

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

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

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

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

https://mlfinternalproduction-image-classifier.cfapps.sap.hana.ondemand.com/api/v2/image/classification/models//versions/1

使用一张向日葵图片:

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

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

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

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

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

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

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

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

https://api.sap.com/api/img_feature_extraction_api/resource

从控制台上传一张本地图片,点击 Execute 按钮:

得到了输出的特征向量:

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

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

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

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

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

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

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

更多Jerry的原创文章,尽在:“汪子熙”:

基于 SAP BTP 平台的 AI 项目经验分享相关推荐

  1. 如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service

    这是 Jerry 2021 年的第 47 篇文章,也是汪子熙公众号总共第 324 篇原创文章. Jerry 2014 年时,曾经在 SAP 社区上写过一篇英文博客,介绍了如何在 ABAP On-Pre ...

  2. 近期活动盘点:基于雷达图像预测未来降水参赛经验分享、智慧政府讲座、金融AI思享会、数据法学研讨会(11.29-11.30)

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: CIKM AnalytiCup 2017-基于雷达图像预测未来降水参赛经验分享 2017年11月29日 活动简介: 清华大学清华-青岛数据 ...

  3. 近期活动盘点:基于雷达图像预测未来降水参赛经验分享、大数据基础设施讲座、药品行业分析及大数据应用思享会(11.22-11.29)

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: CIKM AnalytiCup 2017-基于雷达图像预测未来降水参赛经验分享 2017年11月29日 活动简介: 清华大学清华-青岛数据 ...

  4. 前端学习总结,经验分享,项目经验分享过程

    前言 来,和魔王哪吒总结一下,分享一下自己对前端学习总结,经验分享,以及写过的项目经验分享过程. 如果觉得还不错的话,浏览的过程中,需要您: 点赞,分享,评论 有钱的捧个钱场,没钱的捧个人场 技术实践 ...

  5. 去年一个百万级的小软件项目经验分享,20来个功能模块,项目不太好做有些棘手

    别人总觉得是在显吧,干脆把这个项目认为是小项目了,不知道把这个项目是小了,别人会不会又觉得又显吧了?说大也不行.说小也不行,也的确没招了. 我想主要把项目里遇到的问题分享给大家一起探讨,也并不是为了什 ...

  6. 基于AltiumDesigner的PCB及原理图项目设计经验分享 [硬件开发设计]

    文章目录 往期系列文章 一.市面上主流的三款低.中.高PCB画制软件(EDA) 二.PCB总体设计思路与原则 三.产品基本设计步骤 四.原理图设计注意事项 五.原理图操作 六.PCB设计 - 布局注意 ...

  7. AI比赛经验分享 - 总目录

    文章目录 总目录 1. 不同方向经验分享 1.1 NLP 1.2 CV 1.3 语音 1.4 结构化数据 1.5 时序预测 1.6 网络安全方向 1.7 推荐与广告 1.8 风控 2. 工具和提分技巧 ...

  8. SAP BTP 平台 CloudFoundry 环境下编程概述

    SAP BTP,Cloud Foundry 环境是一个面向微服务开发和编排的开放平台即服务 (PaaS). 开发多语言应用程序 使用 SAP Java.Node.js 和 Python 构建包构建开放 ...

  9. SAP BTP 平台 CloudFoundry 环境入门级别的介绍

    原文链接 让我们首先解释 Cloud Foundry 的名称. 它是什么? Cloud Foundry(或 CF)是 Cloud Foundry 基金会(之前是 Linux 基金会)的规范和软件工具集 ...

最新文章

  1. JavaWeb第四讲 会话跟踪技术HttpSession、Cookie、url、隐藏表单域
  2. Spring框架第二天知识总结
  3. AngularJS获取项目中定义的json文件
  4. (转)Android Bitmap 与 Drawable之间的转换
  5. angular1.x 组件开发
  6. idea 配置mysql逆向_idea逆向工程配置
  7. Doris FE配置参数(全面)
  8. windows下测试flask的例子tuorial报错flask KeyError: 'DATABASE'
  9. 拓端tecdat|R语言马尔可夫转换模型研究交通伤亡人数事故预测
  10. 51 单片机 建立 文本文件_笔记系列之单片机原理及应用1
  11. 【技巧总结】string和char[]之前的相互转换(c_str()+strcpy+stringstream.str())
  12. 5款优秀的在线表单设计器
  13. java mysql 学生成绩管理系统_java简单学生成绩管理系统
  14. 推荐支持 azw3 、epub 和 mobi 格式的阅读器:FBReader
  15. Layui 表单验证汇总
  16. linux全自动备份网站到百度云盘,Linux定时备份数据到百度云盘(示例代码)
  17. journalctl日志工具使用方法
  18. Mac:小米手机刷机
  19. 安卓桌面html便签,手机桌面便签
  20. 二本机械毕业2年,从外包ETL到大厂数据开发,月薪13K到年薪40W

热门文章

  1. 小白的第一周,奥利给!
  2. 笔记本电脑连接蓝牙耳机设备
  3. 文章高效排版(js+css+markdown)
  4. 一个完整项目的生命周期,不是上线就结束了
  5. MacOS 下搭建Mqtt服务器
  6. 剧本翻译之SHUFFLE 6月23日
  7. 【软考学习2】数据表示——原码 反码 补码 移码
  8. python获取随机字符串_python生成随机字符串
  9. 软件构建(Construction)
  10. Shiro学习--Apache Shiro Architecture(Shiro架构)