本文介绍图像搜索服务Node.js SDK的使用方法及示例。

接口列表

接口名称 接口说明
Add 增加图片。
SearchImageByPic 使用图片进行搜索。
SearchImageByName 指定名称,使用已入库的图片进行搜索。
Delete 删除图片。

准备工作

  • 在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。详情请参见创建AccessKey
  • 安装图像搜索Node.js SDK。
npm install @alicloud/imagesearch20201214@3.1.1 --save

Add接口

  • 代码示例
    const oss = require('@alicloud/oss-util');
    const fs = require('fs');
    const imagesearch = require('@alicloud/imagesearch20201214')
    const client = new imagesearch.default({
     accessKeyId: "XXXXXXXXXXXXXXXXX",
      accessKeySecret: "XXXXXXXXXXXXXXXXXXXX",
      type: "access_key",
      endpoint: "imagesearch.cn-shanghai.aliyuncs.com",
      regionId: "cn-shanghai",
      protocol: 'http'
    });
    var picContent = fs.createReadStream("D:/123.jpg");
    async function demo() {
      const addImageAdvanceRequest = new imagesearch.AddImageAdvanceRequest({
        // 必填,图像搜索实例名称。
        instanceName: "XXXXXXXXXX",
         // 必填,商品id,最多支持 512个字符。
         // 一个商品可有多张图片。
        productId: "123455",
        // 必填,图片名称,最多支持 512个字符。
        // 1. ProductId + PicName唯一确定一张图片。
        // 2. 如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
        picName: "this",
        // 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;        
        // 对于商品、商标、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;        
        // 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;        
        // 图像中不能带有旋转信息
        picContentObject: picContent,
        // 选填,图片类目。
        // 1. 对于商品搜索:若设置类目,则以设置的为准;若不设置类目,将由系统进行类目预测,预测的类目结果可在Response中获取 。
        // 2. 对于布料、商标、通用搜索:不论是否设置类目,系统会将类目设置为88888888。
        categoryId : 3,
        // 选填,用户自定义的内容,最多支持4096个字符。
        // 查询时会返回该字段。例如可添加图片的描述等文本。
        customContent : "this is a simple test",
        // 选填,整数类型属性,可用于查询时过滤,查询时会返回该字段。
        //  例如不同的站点的图片/不同用户的图片,可以设置不同的IntAttr,查询时通过过滤来达到隔离的目的
        intAttr : 56,
        // 选填,字符串类型属性,最多支持 128个字符。可用于查询时过滤,查询时会返回该字段。
        strAttr : "test",
        // 选填,是否需要进行主体识别,默认为true。
        // 1.为true时,由系统进行主体识别,以识别的主体进行搜索,主体识别结果可在Response中获取。
        // 2. 为false时,则不进行主体识别,以整张图进行搜索。
        // 3.对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。
        crop : true,
        // 选填,图片的主体区域,格式为 x1,x2,y1,y2, 其中 x1,y1 是左上角的点,x2,y2是右下角的点。设置的region 区域不要超过图片的边界。
        // 若用户设置了Region,则不论Crop参数为何值,都将以用户输入Region进行搜索。
        // 对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。
        region : "167,467,221,407"
      });
      let ossRuntime = new oss.RuntimeOptions({});
      const addResponse = await client.addImageAdvance(addImageAdvanceRequest, ossRuntime);
      console.log(1, addResponse);
    }
    demo();
  • 结果示例
    AddImageResponse {
      requestId: 'B85D5B4A-92AF-44C1-A3FB-9B554950F8D1',
      success: true,
      message: 'success',
      code: 0,
      picInfo: AddImageResponsePicInfo { categoryId: 0, region: '167,477,221,407' }
    }

SearchImageByPic接口

  • 代码示例
    const oss = require('@alicloud/oss-util');
    const fs = require('fs');
    const imagesearch = require('@alicloud/imagesearch20201214')
    const client = new imagesearch.default({
      accessKeyId: "XXXXXXXX",
      accessKeySecret: "XXXXXXXXXX",
      type: "access_key",
      endpoint: "imagesearch.cn-shanghai.aliyuncs.com",
      regionId: "cn-shanghai",
      protocol: 'http'
    });
    var picContent = fs.createReadStream("D:/123.jpg");
    async function demo() {
      const searchImageByPicAdvanceRequest = new imagesearch.SearchImageByPicAdvanceRequest({
         // 必填,图像搜索实例名称。
        instanceName: "XXXXXXXX",
        // 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;        
        // 对于商品、商标、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;        
        // 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;        
        // 图像中不能带有旋转信息
        picContentObject: picContent,
        // 选填,商品类目。
        // 1. 对于商品搜索:若设置类目,则以设置的为准;若不设置类目,将由系统进行类目预测,预测的类目结果可在Response中获取 。
        // 2. 对于布料、商标、通用搜索:不论是否设置类目,系统会将类目设置为88888888。
        categoryId: 3,
        // 选填,返回结果的数目。取值范围:1-100。默认值:10。
        num: 10,
        // 选填,返回结果的起始位置。取值范围:0-499。默认值:0。
        start: 0,// 选填,是否需要进行主体识别,默认为true。
        // 1.为true时,由系统进行主体识别,以识别的主体进行搜索,主体识别结果可在Response中获取。
        // 2. 为false时,则不进行主体识别,以整张图进行搜索。
        // 3.对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。
        crop: true,
        // 选填,图片的主体区域,格式为 x1,x2,y1,y2, 其中 x1,y1 是左上角的点,x2,y2是右下角的点。设置的region 区域不要超过图片的边界。
        // 若用户设置了Region,则不论Crop参数为何值,都将以用户输入Region进行搜索。
        // 3.对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。region: "167,467,221,407",// 选填,过滤条件
        // int_attr支持的操作符有>、>=、<、<=、=,str_attr支持的操作符有=和!=,多个条件之支持AND和OR进行连接。
        // 示例:
        //  1. 根据IntAttr过滤结果,    int_attr>=100
        //  2. 根据StrAttr过滤结果,    str_attr!="value1"
        //  3. 根据IntAttr和StrAttr联合过滤结果,int_attr=1000 AND str_attr="value1"
        filter: "int_attr=56 AND str_attr=\"test\""
      });
      let ossRuntime = new oss.RuntimeOptions({});
      const searchImageByPicResponse = await client.searchImageByPicAdvance(searchImageByPicAdvanceRequest, ossRuntime);
      console.log(3, searchImageByPicResponse);
    }
    demo();
  • 结果示例
    SearchImageByPicResponse {
      requestId: 'A38BFBD4-D7AD-4BE9-9606-72BB765A9001',
      success: true,
      code: 0,
      msg: 'success',
      auctions: [
        SearchImageByPicResponseAuctions {
          categoryId: 0,
          productId: '1000',
          picName: 'vae.jpg',
          score:1.0,
          sortExprValues: '7.33136443711219e+24;0'
        },
      ...............
        SearchImageByPicResponseAuctions {
          categoryId: 0,
          productId: '123455',
          picName: 'this',
          score:1.0,
          sortExprValues: '7.33136443711219e+24;0'
        }
      ],
      head: SearchImageByPicResponseHead {
        docsReturn: 5,
        docsFound: 5,
        searchTime: 218
      },
      picInfo: SearchImageByPicResponsePicInfo {
        categoryId: 0,
        region: '167,477,221,407',
        allCategories: [
          [SearchImageByPicResponsePicInfoAllCategories],
          ........
          [SearchImageByPicResponsePicInfoAllCategories]
        ],
        "multiRegion": [
           [SearchImageByPicResponseBodyPicInfoMultiRegion],
          ........
          [SearchImageByPicResponseBodyPicInfoMultiRegion]
        ]
      }
    }

SearchImageByName接口

  • 代码示例
    const oss = require('@alicloud/oss-util');
    const fs = require('fs');
    const imagesearch = require('@alicloud/imagesearch20201214')
    const client = new imagesearch.default({
      accessKeyId: "XXXXXXXXXX",
      accessKeySecret: "XXXXXXXXXXX",
      type: "access_key",
      endpoint: "imagesearch.cn-shanghai.aliyuncs.com",
      regionId: "cn-shanghai",
      protocol: 'http'
    });
    var picContent = fs.createReadStream("D:/123.jpg");
    async function demo() {
      const searchImageByNameRequest = new imagesearch.SearchImageByNameRequest({
         // 必填,图像搜索实例名称。
        instanceName: "XXXXXXX",
        // 必填,商品id,最多支持 512个字符。
        // 一个商品可有多张图片。
        productId: "123455",
        // 必填,图片名称,最多支持 512个字符。
       // 1. ProductId + PicName唯一确定一张图片。
        picName: "this",
        // 选填,商品类目。
        // 1. 对于商品搜索:若设置类目,则以设置的为准;若不设置类目,将由系统进行类目预测,预测的类目结果可在Response中获取 。
        // 2. 对于布料、商标、通用搜索:不论是否设置类目,系统会将类目设置为88888888。
        categoryId: 3,
        // 选填,返回结果的数目。取值范围:1-100。默认值:10。
        num: 10,
        // 选填,返回结果的起始位置。取值范围:0-499。默认值:0。
        start: 0,// 选填,是否需要进行主体识别,默认为true。
        // 1.为true时,由系统进行主体识别,以识别的主体进行搜索,主体识别结果可在Response中获取。
        // 2. 为false时,则不进行主体识别,以整张图进行搜索。
        // 3.对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。
        crop: true,
        // 选填,图片的主体区域,格式为 x1,x2,y1,y2, 其中 x1,y1 是左上角的点,x2,y2是右下角的点。设置的region 区域不要超过图片的边界。
        // 若用户设置了Region,则不论Crop参数为何值,都将以用户输入Region进行搜索。
        // 3.对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。region: "167,467,221,407",// 选填,过滤条件
        // int_attr支持的操作符有>、>=、<、<=、=,str_attr支持的操作符有=和!=,多个条件之支持AND和OR进行连接。
        // 示例:
        //  1. 根据IntAttr过滤结果,    int_attr>=100
        //  2. 根据StrAttr过滤结果,    str_attr!="value1"
        //  3. 根据IntAttr和StrAttr联合过滤结果,int_attr=1000 AND str_attr="value1"
        filter: "int_attr=56 AND str_attr=\"test\""
      });
      const searchImageByNameResponse = await client.searchImageByName(searchImageByNameRequest);
      console.log(2, searchImageByNameResponse);
    }
    demo();
  • 结果示例
    SearchImageByNameResponse {
      requestId: '4B039098-B274-41DE-9A55-32550B6F74E1',
      success: true,
      code: 0,
      msg: 'success',
      auctions: [
        SearchImageByNameResponseAuctions {
          categoryId: 0,
          productId: '1000',
          picName: 'vae.jpg',
          score:1.0,
          sortExprValues: '7.33136443711219e+24;0'
        },
          .........
        SearchImageByNameResponseAuctions {
          categoryId: 0,
          productId: '123455',
          picName: 'this',
          score:1.0,
          sortExprValues: '7.33136443711219e+24;0'
        }
      ],
      head: SearchImageByNameResponseHead {
        docsReturn: 5,
        docsFound: 5,
        searchTime: 11
      },
      picInfo: SearchImageByNameResponsePicInfo {
        categoryId: 0,
          allCategories: [
          [SearchImageByNameResponsePicInfoAllCategories],
          ......
          [SearchImageByNameResponsePicInfoAllCategories]
        ],
         "multiRegion": [
           [SearchImageByPicResponseBodyPicInfoMultiRegion],
          ........
          [SearchImageByPicResponseBodyPicInfoMultiRegion]
        ]
      }
    }

Delete接口

  • 代码示例
    const oss = require('@alicloud/oss-util');
    const fs = require('fs');
    const imagesearch = require('@alicloud/imagesearch20201214')
    const client = new imagesearch.default({
      accessKeyId: "XXXXXXXXXX",
      accessKeySecret: "XXXXXXXXXXXXX",
      type: "access_key",
      endpoint: "imagesearch.cn-shanghai.aliyuncs.com",
      regionId: "cn-shanghai",
      protocol: 'http'
    });
    var picContent = fs.createReadStream("D:/123.jpg");
    async function demo() {
      const deleteImageRequest = new imagesearch.DeleteImageRequest({
        // 必填,图像搜索实例名称。
        instanceName: "XXXXXXXXXXXXXXXXXX",
         // 必填,商品id,最多支持 512个字符。
         //一个商品可有多张图片。
        productId: "123455",
         //  选填,图片名称。若不指定本参数,则删除ProductId下所有图片;若指定本参数,则删除ProductId+PicName指定的图片。
        picName: "this"
      });
      const deleteImageResponse = await client.deleteImage(deleteImageRequest);
      console.log(4, deleteImageResponse);
    }
    demo();
  • 结果示例
    DeleteImageResponse {
      requestId: '3965B44B-0584-41DE-8764-0D8B36857CE1',
      success: true,
      message: 'success',
      code: 0
    }