本文作为 Jerry 最近正在做的一个项目的工作思路的梳理。
我们假设这样一个服务场景,技师上门维修某设备,发现设备上某零件损坏了,假设这位技师由于种种原因,没能根据自己的经验识别出这个零件的型号。此时技师掏出自己的手机,给零件拍摄一张图片,这张图片通过手机上安装的 SAP 某智能解决方案,传送到 SAP Leonardo 平台,通过那里的人工智能服务,自动识别出这张图片上面零件的准确型号,返回给技师。
SAP Leonardo 上的人工智能服务,在接收到技师上传的图片后,通过某种算法将该图片的特征向量提取出来,然后再通过平台上基于大量数据集训练好的模型,识别出准确型号。因此,图片特征向量的提取,成为了这个智能解决方案的首要步骤。
什么是图片的特征向量?特征向量的提取,从数学上说,就是通过某种算法,把输入图片的二进制流,转换成一个向量 (一维矩阵) 的过程。
以下面这张图里的梯形和圆形为例,我们把图形均匀地分成 9 个区域,在图形中心观察每个区域内图形单元的梯度方向,就可以实现降维,把二维图像以一个一维矩阵来表示。
当然实际的图形轮廓识别和降维处理采用的算法比这个例子复杂得多,Jerry 也不懂。幸运的是,对 SAP partners 来说,不需要了解这里面的数学知识和技术知识,简单地把 SAP Leonardo 上的人工智能服务当成一个黑盒子,通过 Restful API 的方式,把要提取特征向量的图片“喂”给人工智能服务,就能得到特征向量输出。
通过这个 url 进入 SAP Leonardo 图片特征向量提取服务的测试控制台和帮助文档:
https://api.sap.com/api/img_f…
使用非常简单,直接在测试控制台里从本地选择一张图片,点击执行按钮:
得到了输出的特征向量:
有了特征向量后,我们再回到文章开头提到的场景。
假设我们想根据技师上传的图片分辨出图片里的零件型号,一种做法当然是采取 Jerry 之前一篇文章 如何对 SAP Leonardo 上的机器学习模型进行重新训练 介绍的方法,提前准备大量该型号零件的图片,然后使用这些图片对 Product Image Classification 模型进行重新训练。训练结束之后,该 API 即可识别出对于给定一张图片,代表的究竟是不是之前训练过的某型号的零件。这是第一种实现思路。
既然我们如今已经拿到了待识别图片的特征向量,那么可以尝试第二种思路,即利用 Leonardo 上的另一个和图片处理相关的人工智能服务:图片相似度评分 https://api.sap.com/api/simil…
这个 Restful API 的输入需要两个压缩包。第一个压缩包存放的是一个存放了事先提取好的技师上传的待匹配文件的特征向量,第二个压缩包里存放的是型号为 A,B,C… 等零件图片的特征向量。
如上图所示,为简单起见,第二个压缩包我只存放了两个文件,分别存放的是型号 A 和型号 B 的特征向量。
调用 API,传入这两个压缩包:
得到的结果表明,技师上传的图片和型号 A 的相似系数几乎接近 1,那么显然,该图片代表型号 A。
当然,除了直接上传包含了图片特征向量的压缩文件之外,将这些文件包含的特征向量内容以 JSON 字符串的方式作为输入调用 API 也是可行的,JSON 字符串的格式在 SAP 官网里有详细说明,这里不再赘述。
希望本文介绍的这些 API 对于大家实际工作中如何利用 SAP Leonardo 上的机器学习服务有所启发,感谢阅读。
更多阅读
- 使用 Java+SAP 云平台 +SAP Cloud Connector 调用 ABAP On-Premise 系统里的函数
- 使用 JDBC 操作 SAP 云平台上的 HANA 数据库
- 用 JavaScript 访问 SAP 云平台上的服务遇到跨域问题该怎么办
- 在 SAP 云平台的 CloudFoundry 环境下消费 ABAP On-Premise OData 服务
- 如何在 Web 应用里消费 SAP Leonardo 的机器学习 API
- 使用 Java 程序消费 SAP Leonardo 的机器学习 API
- 如何对 SAP Leonardo 上的机器学习模型进行重新训练
要获取更多 Jerry 的原创文章,请关注公众号 ” 汪子熙 ”: