Cloud Vision API人脸检测无图像出现错误

时间:2019-07-05 05:48:23

标签: google-cloud-vision

尝试使用Cloud Vision API进行面部检测时,我们遇到No image present.错误。

我们正在使用official documentation中的代码。

请参见下面的代码。

  const request1={
  "requests":[
    {
      "image":{
        "content": imgdatauri //It contains image data uri
      },
      "features": [
        {
          "type":"FACE_DETECTION",
          "maxResults":1
        }
      ]
    }
  ]
};
  client
  .annotateImage(request1)
  .then(response => {
    console.log(response);
    response.send(response);
  })
  .catch(err => {
    console.error(err);
    response.send(err);
  });

这是错误消息。


Error: No image present.

    at _coerceRequest (/rbd/pnpm-volume/e40024d2-3d05-4f3d-a435-6d4e6ca96fb0/node_modules/.registry.npmjs.org/@google-cloud/vision/1.1.3/node_modules/@google-cloud/vision/src/helpers.js:69:21)

    at ImageAnnotatorClient.<anonymous> (/rbd/pnpm-volume/e40024d2-3d05-4f3d-a435-6d4e6ca96fb0/node_modules/.registry.npmjs.org/@google-cloud/vision/1.1.3/node_modules/@google-cloud/vision/src/helpers.js:224:12)

    at PromiseCtor (/rbd/pnpm-volume/e40024d2-3d05-4f3d-a435-6d4e6ca96fb0/node_modules/.registry.npmjs.org/@google-cloud/promisify/1.0.2/node_modules/@google-cloud/promisify/build/src/index.js:71:28)

    at new Promise (<anonymous>)

    at ImageAnnotatorClient.wrapper [as annotateImage] (/rbd/pnpm-volume/e40024d2-3d05-4f3d-a435-6d4e6ca96fb0/node_modules/.registry.npmjs.org/@google-cloud/promisify/1.0.2/node_modules/@google-cloud/promisify/build/src/index.js:56:16)

我们想知道解决该问题需要做什么。

2 个答案:

答案 0 :(得分:0)

方法1:

对于视觉API,如果图像存储在本地,则必须将该图像转换为base64字符串。现在,此转换后的字符串将作为值传递给内容。

确保将图像转换为base64字符串,然后传递给内容值。

有一些在线服务可以将图像转换为base64字符串。您还可以通过编写一段代码将图像转换为base64。您可以在线查找服务,然后选择任何人。我正在提供一项服务的链接。

https://www.browserling.com/tools/image-to-base64

方法2:

您可以将图像的公共URL提供给视觉API。

{

“请求”:[

{

  "image":{

    "source":{

      "imageUri": PUBLIC_URL

    }

  },

  "features":[

    {

      "type":TYPE_OF_DETECTION,

      "maxResults":MAX_NUMBER_OF_RESULTS

    }

  ]

}

]

}

方法3:

您可以创建存储桶并将图像放置在那里。 现在,您可以提供此图像对象的URL或路径。

我认为这会对您有所帮助。

谢谢。

答案 1 :(得分:0)

我已经使用Cloud Storage Trigger创建了Cloud Function,上传图像文件时触发了我的函数(带有event),可以看到有event.mediaLink event.selfLink,我尝试同时使用两者加载图像,但是一直抱怨没有图像

这是代码

exports.analyzeImage = function(event) {
  const vision = require('@google-cloud/vision');
  const client = new vision.ImageAnnotatorClient();
  console.log('Event', event.mediaLink)
  let image = {
    source: {imageUri: event.mediaLink}
  };

  return client.labelDetection(image).then(resp => {
    let labels = resp[0].labelAnnotations.map( l => {
      return {
        description: l.description,
        score: l.score
      };
    });
    return labels;
    // const dataset = bigquery.dataset('dataset')
    // return dataset.table
  }).catch(err => {
    console.error(err)
  })
}