写在前面:
本文内容来源于工作中实际的业务需要,但是刨除业务上下文以后,我觉得完全可以将实现的方法和技术提取出来,遂有了这篇博客,欢迎一起讨论。
在本文中,你将会看到如何用Python调用SAP Leonardo API(稍微有一些坑,但是我已经将坑踩完了), 如何比较图片相似度, 如何将整个流程工程化,等等。本文略长,干货很多,希望你有耐心看到最后,也希望你会有很大的收获。
说了那么多,抽象出的技术和要解决问题到底是什么呢?
一句话概括:输入一张图片,去已有的图片库中搜索最近似的一张图片。
文章内容:
- 利用Leonardo 图片特征提取API将一张图片转化为特征向量。
- 批量将图片库中所有图片都转换成特征向量。
- 寻找最相似的图片。
- 实战测试。
Github地址:
https://github.com/weadye/PictureSimilarityCompute
平台&工具:
SAP Leonardo : SAP推出的人工智能/机器学习平台,本文中我将使用Leonardo提供的图片特征提取API,更多更具体的内容可以点击链接查看。
Python3 : 用Python尤其是numpy这个库来做图片的相似度计算。
大致思路:
将图片库中的所有图片向量化并持久化。在输入一张新图片的时候,将其向量化,并找到图片库中与之距离最近的向量,对应的图片也即是图库中和输入图片最相似的图片。
实现:
思路确定以后,就可以一步一步开始实现啦。
1. 利用Leonardo 图片特征提取API将一张图片转化为特征向量:
思路很简单,以图片库中的所有图片逐一调用Leonardo API来向量化,让我们先研究下Leonardo API如何调用。
这是Leonardo图片特征抽取的API网址:
https://api.sap.com/api/img_feature_extraction_api/resource
点击‘Show API Key’,如果你没有登录,会要求你登录,在登录之后再次点击‘Show API Key’,会弹出一个对话框,里面就是你的API Key,在之后发送request的时候会用到,如果你没有Key, SAP Leonardo会拒绝提供服务。
点击‘Code Snippet’可以看到示例代码,在弹出来的对话框里,我们可以看到Leonardo提供了5种语言的API调用示例。</