需求分析

        用户可以使؜用一张图片来搜索相似的图片,相比传统‌的关键词搜索,能够更精确地找到与上传‍图片内容相似的图片。这个功能也经常应用到购物场景,查询相似的商品

        为了获得更多的搜索结果,我们的需求是从 全网搜索图片,而不是只在自己的图库中搜索。

方案设计

主要有 2 种方案:1.第三方 API        2.数据抓取(爬虫)

1、第三方 API

        如果想从自建的图库中搜索,我们是需要建立数据集的,这个实现起来就比较麻烦了,因为以图搜图涉及一些比较复杂的算法。但是我们可以使用百度 AI 提供的图片搜索 API 参考官方文档 ,可以让我们在指定的数据集中搜索出相似的图片。

        如果想从全网搜图,我们就可以使用Bing了,Bing 以图搜图 API, 利用Bing的图库,可以从全网进行搜索,而且可以免费使用,参考官方文档

2、数据抓取

利用已有的؜以图搜图网站,通过 数据抓取的方式实时‌查询搜图网站的返回结果。

为了让大家学习到更多知识,此处我们选择这种方案。

以百度搜图؜网站进行搜图的流程:

1)进入 百度以图搜图 网站,通过 url 上传图片

上传图片之后,会发起一个请求,https://graph.baidu.com/upload?uptime= ,“=” 后面拼接的是图片的参数,该接口的返回值包含 “以图搜图的页面地址”。

        如果你直接请求上面这个地址,是请求不成功的,因为实际请求中,请求头、cookie中是需要携带一些信息的,所以我们得要复制这个请求的curl格式,进行请求。如下就是我复制的请求(以curl格式复制),在cmd终端中直接粘贴,得到的返回值中就是以图搜图的页面地址,这个 url 是含转义字符的,需要处理访问。

访问处理之后的 url 就是这个页面了

进入这个页面之后,我们怎么样去获取这些相似的图片呢?

两种方式:

1.直接抓这个页面中的图片,但是抓这个页面的图片的时候出现了一些问题,所以我们换一种方式

2.这个页面,我们可以找到当前访问的页面,响应里面有一些关键信息我们是可以拿到的,里面的firstUrl是最重要的

3.访问这个firstUrl,就能得到 JSON 格式的相似图片列表,干干净净,里面包含了图片的缩略图和原图地址,fromUrl是相似图片的来源,objUrl可以通过这个进一步获取更高清的图片,thumbUrl就是这个相似的图片

总结:主要是三步,第一次和第三次是要发请求,第二次是需要从页面中拿数据,jsoup拿数据,发请求直接调用工具类就行了。

当我们第一次请求的时候,我们就可以拿到图片的这些信息,调用这个接口

但是这个接口是需要一些参数的,需要一些签名,id啊啥的各种各样的参数,如果我们自己拼接的话,还是比较困难的,所以用上面那种方法。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐