快速入门:使用必应视觉搜索 REST API 和 Node.js 获取图像见解

警告

2020 年 10 月 30 日,必应搜索 API 从 Azure AI 服务迁移到必应搜索服务。 本文档仅供参考。 有关更新的文档,请参阅必应搜索 API 文档。 关于为必应搜索创建新的 Azure 资源的说明,请参阅通过 Azure 市场创建必应搜索资源

根据此快速入门中的说明对必应视觉搜索 API 进行第一次调用。 此简单 JavaScript 应用程序会将一个图像上传到该 API,并显示返回的相关信息。 虽然此应用程序是以 JavaScript 编写的,但 API 是一种 RESTful Web 服务,与大多数编程语言兼容。

先决条件

  • Node.js
  • JavaScript 请求模块。 可以使用 npm install request 命令安装该模块。
  • 表单数据模块。 可以使用 npm install form-data 命令安装该模块。

创建 Azure 资源

通过创建以下 Azure 资源之一开始使用必应视觉搜索 API:

必应搜索 v7 资源

  • 在删除资源前,可通过 Azure 门户使用。
  • 选择 S9 定价层。

多服务资源

  • 在删除资源前,可通过 Azure 门户使用。
  • 在多个 Azure AI 服务中对应用程序使用相同的密钥和终结点。

初始化应用程序

  1. 在你喜欢使用的 IDE 或编辑器中创建 JavaScript 文件,并设置以下要求:

    var request = require('request');
    var FormData = require('form-data');
    var fs = require('fs');
    
  2. 为 API 终结点、订阅密钥和图像路径创建变量。 对于 baseUri 值,可以使用以下代码中的全局终结点,或者使用资源的 Azure 门户中显示的自定义子域终结点。

    var baseUri = 'https://api.cognitive.microsoft.com/bing/v7.0/images/visualsearch';
    var subscriptionKey = 'your-api-key';
    var imagePath = "path-to-your-image";
    
  3. 创建一个名为 requestCallback() 的函数来输出 API 的响应。

    function requestCallback(err, res, body) {
        console.log(JSON.stringify(JSON.parse(body), null, '  '))
    }
    

构造并发送搜索请求

  1. 上传本地图像时,表单数据必须包含 Content-Disposition 标头。 将其 name 参数设置为“image”,并且将 filename 参数设置为映像的文件名。 表单内容包括图像的二进制数据。 可以上传的最大图像大小为 1 MB。

    --boundary_1234-abcd
    Content-Disposition: form-data; name="image"; filename="myimagefile.jpg"
    
    ÿØÿà JFIF ÖÆ68g-¤CWŸþ29ÌÄøÖ‘º«™æ±èuZiÀ)"óÓß°Î= ØJ9á+*G¦...
    
    --boundary_1234-abcd--
    
  2. 使用 FormData() 创建新的 FormData 对象,并使用 fs.createReadStream() 将图像路径附加至对象。

    var form = new FormData();
    form.append("image", fs.createReadStream(imagePath));
    
  3. 使用请求库上传图像,并调用 requestCallback() 输出响应。 将订阅密钥添加到请求标头。

    form.getLength(function(err, length){
      if (err) {
        return requestCallback(err);
      }
      var r = request.post(baseUri, requestCallback);
      r._form = form; 
      r.setHeader('Ocp-Apim-Subscription-Key', subscriptionKey);
    });
    

后续步骤