尝试使用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)
我们想知道解决该问题需要做什么。
答案 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)
})
}