当“我们目前无法访问此网址时”返回时,我会调用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."
}
}
]
}
答案 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文档中找到以下示例。
// 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 也可以解决问题)。