【问题标题】:Cloud vision api face detection no image present errorCloud vision api face detection no image present 错误
【发布时间】:2020-04-15 12:17:59
【问题描述】:

我们在尝试使用云视觉 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)

我们想知道我们需要做些什么来解决这个问题。

【问题讨论】:

    标签: google-cloud-vision


    【解决方案1】:

    方法一:

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

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

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

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

    方法二:

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

    {

    “请求”:[

    {
    
      "image":{
    
        "source":{
    
          "imageUri": PUBLIC_URL
    
        }
    
      },
    
      "features":[
    
        {
    
          "type":TYPE_OF_DETECTION,
    
          "maxResults":MAX_NUMBER_OF_RESULTS
    
        }
    
      ]
    
    }
    

    ]

    }

    方法三:

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

    我想这会对你有所帮助。

    谢谢。

    【讨论】:

      【解决方案2】:

      我创建了一个带有云存储触发器的云函数,当我上传图像文件时,我的函数被触发(带有事件)我可以看到有 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)
        })
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多