“我们目前无法访问该网址。”

时间:2017-07-15 15:00:42

标签: google-cloud-platform google-cloud-vision

当“我们目前无法访问此网址时”返回时,我会调用google api。但资源必须存在且可以访问。

https://vision.googleapis.com/v1/images:annotate

请求内容:

{
  "requests": [
    {
      "image": {
        "source": {
          "imageUri": "http://yun.jybdfx.com/static/img/homebg.jpg"
        }
      },
      "features": [
        {
          "type": "TEXT_DETECTION"
        }
      ],
      "imageContext": {
        "languageHints": [
          "zh"
        ]
      }
    }
  ]
}

回复内容:

{
  "responses": [
    {
      "error": {
        "code": 4,
        "message": "We can not access the URL currently. Please download the content and pass it in."
      }
    }
  ]
}

7 个答案:

答案 0 :(得分:1)

截至2017年8月,这是Google Cloud Vision API(source)的一个已知问题。它似乎是对某些用户的重复,但不是确定性的,而且我自己也遇到了很多图像。

目前的解决方法包括将您的内容上传到Google云端存储并传递其gs:// uri(注意它不必在GCS上公开阅读)或在本地下载图像并将其传递到base64格式的vision API

这是后一种方法的Node.js中的一个例子:

const request = require('request-promise-native').defaults({
  encoding: 'base64'
})

const data = await request(image)

const response = await client.annotateImage({
  image: {
    content: data
  },
  features: [
    { type: vision.v1.types.Feature.Type.LABEL_DETECTION },
    { type: vision.v1.types.Feature.Type.CROP_HINTS }
  ]
})

答案 1 :(得分:0)

同样的要求对我有用。图像主机可能暂时停机和/或有问题。如果您重试请求,它将主要适合您。

答案 2 :(得分:0)

对我来说,只需将图片上传到Google云平台并将其传递给URI参数。

答案 3 :(得分:0)

当我尝试使用Firebase存储下载URL调用api时,我也遇到了相同的问题

环顾四周后,我在NodeJ的api文档中找到以下示例。

NodeJs example

// Imports the Google Cloud client libraries
const vision = require('@google-cloud/vision');

// Creates a client
const client = new vision.ImageAnnotatorClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Bucket where the file resides, e.g. my-bucket';
// const fileName = 'Path to file within bucket, e.g. path/to/image.png';

// Performs text detection on the gcs file
const [result] = await client.textDetection(`gs://${bucketName}/${fileName}`);
const detections = result.textAnnotations;
console.log('Text:');
detections.forEach(text => console.log(text));

答案 4 :(得分:0)

就我而言,我尝试检索主要图像托管服务提供商Cloudinary使用的图像。

当我访问相同的图像但托管在由Rackspace驱动的辅助CDN上时,Google OCR可以访问该图像。

不确定我可以通过Web浏览器访问图像时为什么Cloudinary无法正常工作,但我只能解决这种情况。

答案 5 :(得分:0)

对我来说,我通过请求 URI(例如:gs://bucketname/filename.jpg)而不是公共 URL 或经过身份验证的 URL 解决了这个问题。

   const vision = require('@google-cloud/vision'); 
   function uploadToGoogleCloudlist (req, res, next) {
       const originalfilename = req.file.originalname;
       const bucketname = "yourbucketname";
       const imageURI = "gs://"+bucketname+"/"+originalfilename;
       
       const client = new vision.ImageAnnotatorClient(
            {
            projectId: 'yourprojectid',
            keyFilename: './router/fb/yourprojectid-firebase.json'
            }
        );

    var visionjson;

    async function getimageannotation() {
        const [result] = await client.imageProperties(imageURI);
        visionjson = result;
        console.log ("vision result: "+JSON.stringify(visionjson));
        return visionjson;
        }

    getimageannotation().then( function (result){
        var datatoup =  {
                    url: imageURI || ' ',
                    filename: originalfilename   || ' ',
                    available: true,
                    vision: result,
                                };
    
    })
    .catch(err => {
        console.error('ERROR CODE:', err);
        });

    next();

    }

答案 6 :(得分:0)

几天前我遇到了同样的问题。

在我的情况下,问题是由于使用队列并从同一 ip 一次性调用 api 请求而发生的。将并行进程数从8个改为1个后,此类错误的数量从~30%减少到1%以下。

也许它会帮助某人。我认为 google 端加载远程图像存在一些内部限制(因为正如人们所报告的那样,使用 google storage 也可以解决问题)。