如何在Node.js中消耗TinEye反向图像搜索API

173 阅读4分钟

在Node.js中消耗TinEye反向图像搜索API。

反向图像搜索最简单的解释就是用要搜索的图像作为查询参数,在网上搜索一个图像的出现。我们可以用这种搜索来定位一张图片的来源,寻找一张分辨率更好的图片,或者获取更多的图片信息。

在Node.js中使用TinEye的反向图像搜索API

例如,一个在线买家可能想通过反向搜索,使用卖家的资料图片或企业的标志来验证卖家的图片,并验证他/她的可信度。

反向图像搜索服务提供商的例子

  1. TinEye
  2. 谷歌图片
  3. Pixsy

在这篇文章中,我们将讨论TinEye反向图片搜索以及如何在Node.js中使用其API。它是一个RESTFUL API。

前提条件

要跟上这篇文章,具备以下条件将很有帮助。

  1. 对[Node.js]和[JavaScript]概念有基本了解。
  2. 在你的系统中安装Node.js(NPM)。
  3. 对REST API的了解。

开始使用

我们将首先安装一个TinEye库,tineye-api ,为Node.js制作,我们将在整个程序中使用它。

在你的终端运行以下命令。

npm install tineye-api

在沙盒中测试

TinEye提供了两个密钥,使我们能够在沙盒中测试。在沙盒中,我们将只搜索下面的图片,因为它是唯一允许用于测试的图片。

meloncat

你可以在上线后搜索其他图片。

以下是密钥。

  • 公钥:LCkn,2K7osVwkX95K4Oy
  • 私钥:6mm60lsCNIB,FwOWjJqA80QZHh9BMwc-ber4u=t^

我们将在我们的代码中使用它们。

初始化库

我们首先包含这个库,然后创建一个名为api 的变量来代表API,通过输入TinEye REST端点的URL和两个密钥来初始化它。

let TinEye = require('tineye-api')
let api = new TinEye('https://api.tineye.com/rest/', <public_key>, <private_key>);

从URL进行搜索

TinEye提供了使用图片的URL搜索图片的选项。

创建一个名为tineye.js的新文件并粘贴这段代码。

//importing the module
let TinEye = require('tineye-api')
//The public and private keys
let privateKey= '6mm60lsCNIB,FwOWjJqA80QZHh9BMwc-ber4u=t^'
let publicKey = 'LCkn,2K7osVwkX95K4Oy'
//Initializing the api
let api = new TinEye('https://api.tineye.com/rest/', publicKey, privateKey);
//The URL of the image to be searched
let url = "https://tineye.com/images/meloncat.jpg";
//An object containg options for the search
let options = {
  limit: 5,
  sort: "score",
  order: "desc",
};
//using the API
/*feeding the URL and the options for the search
then logging the response and the error
*/
api
  .searchUrl(url, options)
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

我们首先导入库,然后创建两个变量,publicKeyprivateKey ,并用密钥初始化它们。然后我们初始化API和要搜索的图片的URL。

注意:使用的URL是meloncat图像,我们将在沙盒中用于测试。

options 对象中,我们传递用于搜索的可选参数,这些参数是。

i. limit - 这个参数指定了要显示给用户的结果图片的数量。默认值是100,为了返回所有的图片,我们把它初始化为-1。

ii.sort- 分类标准,在我们的例子中,我们将根据查询的图片与返回的图片的准确度得分进行分类。

我们只能传入这些值。

  • 分数
  • 大小
  • 抓取日期(crawl_date

iii.order - 用于指定如何使用排序标准返回结果,asc 表示升序,desc 表示降序。

最后,我们将URL和搜索的选项输入到API,然后记录响应和错误(如果有)。

运行该代码后,我们得到如下截图所示的输出。

Screenshot 1

返回的JSON响应包含一个对象stats ,显示搜索的统计数据,如时间和查询时间。

对我们来说,这个对象中最重要的是total_results ,它显示了返回的图片数量。total_stock ,它显示了库存图片的总数,而total_filtered_results ,顾名思义,是过滤后的结果。

在响应中,我们也有一个叫做results 的对象,其中包含一个叫做matches 的数组,其中包含匹配的图片。我们的对象有5张,因为在limit 选项中,我们设置了5张。

我们可以进一步挖掘results 对象,看到返回的图像细节。

将响应代码更新为这个,然后运行该文件。

console.log(response.results);

我们得到以下输出。

Screenshot 2

它详细显示了matches 数组中的对象,例如发现的域名反向链接,覆盖等。你可以使用这些信息来向终端用户显示图像。

使用文件图像进行搜索

人们也可以通过从本地机器或设备上传图片来进行搜索。程序是一样的,只是我们没有指定一个URL。

我们将图像路径输入到文件系统模块的readFileSync()

然后,我们使用searchData() 方法将图片和选项送入API。

同样,如果你在沙盒中测试它,你会遇到一个错误。你只能在直播时使用它。

var fs = require('fs');
var img = fs.readFileSync("path_to_the_image");
var params = {
  offset: 0,
  sort: "size",
  order: "asc",
};
api
  .searchData(img, params)
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

上线

上线是一个简单明了的过程。你将注册,获得你的钥匙,然后进行测试搜索,你就可以开始了。

注意:要使用实时API,你必须先购买一个捆绑包。

进一步阅读

这只是一个基本的介绍,但API可以以各种方式进行操作。