Google cloud platform 使用Cloud Shell的Google Cloud Vision API:如何为多个图像运行该API?我的request.json应该是什么样子?
我[使用Cloud Shell]在单个图像上运行了一个测试,request.json如下所示。如何为整个图像文件夹运行Vision API? 另外,为什么图像的用户权限必须是公共的,API才能运行? 谢谢Google cloud platform 使用Cloud Shell的Google Cloud Vision API:如何为多个图像运行该API?我的request.json应该是什么样子?,google-cloud-platform,google-cloud-vision,Google Cloud Platform,Google Cloud Vision,我[使用Cloud Shell]在单个图像上运行了一个测试,request.json如下所示。如何为整个图像文件夹运行Vision API? 另外,为什么图像的用户权限必须是公共的,API才能运行? 谢谢 如果您希望使用Cloud Shell执行请求,则必须按照以下方式执行 { "requests": [ { "image": { "source": { "gcsImageUri": &quo
如果您希望使用Cloud Shell执行请求,则必须按照以下方式执行
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://visionapitest/landmark/test.jpeg"
}
},
"features": [
{
"type": "LABEL_DETECTION",
"maxResults": 10
}
]
},
{
"image": {
"source": {
"gcsImageUri": "gs://visionapitest/landmark/test2.jpeg"
}
},
"features": [
{
"type": "LABEL_DETECTION",
"maxResults": 10
}
]
}, … ]}
请注意,这不是指定完整文件夹的方法,因为您可以看到“requests”字段是一个对象数组,因此您必须逐项列出JSON文件中的每个图像
另一方面,为了读取文件夹中的所有图像,您可以使用一个可用的方法动态创建“requests”数组。我想与大家分享我从中获取的python代码片段,虽然它只考虑了一个图像,但我修改了它以读取整个文件夹
from google.cloud import vision_v1
from google.cloud.vision_v1 import enums
from google.cloud import storage
from google.cloud.vision_v1 import types
from re import search
def sample_async_batch_annotate_images(
bucket_name,
output_uri
):
"""Perform async batch image annotation."""
client = vision_v1.ImageAnnotatorClient()
storage_client = storage.Client()
blobs = storage_client.list_blobs(
bucket_name, prefix='vision/label/', delimiter='/'
)
requests = []
for blob in blobs:
if search('jpg',blob.name):
input_image_uri = 'gs://' + bucket_name +'/'+ blob.name
print(input_image_uri)
source = {"image_uri": input_image_uri}
image = {"source": source}
features = [
{"type": enums.Feature.Type.LABEL_DETECTION},
]
request = types.AnnotateImageRequest(image=image, features=features)
requests.append(request)
gcs_destination = {"uri": output_uri}
# The max number of responses to output in each JSON file
batch_size = 2
output_config = {"gcs_destination": gcs_destination,
"batch_size": batch_size}
operation = client.async_batch_annotate_images(requests, output_config)
print("Waiting for operation to complete...")
response = operation.result(90)
# The output is written to GCS with the provided output_uri as prefix
gcs_output_uri = response.output_config.gcs_destination.uri
print("Output written to GCS with prefix: {}".format(gcs_output_uri))
但是,您可以将其作为参考,但这取决于您的用例和代码语言偏好
关于权限的问题,我想您指的是云存储桶。据我所知,没有必要公开您的图像,您只需在bucket中对执行请求的服务帐户进行读/写操作。如果您想使用Cloud Shell执行请求,您必须按照以下方式执行
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://visionapitest/landmark/test.jpeg"
}
},
"features": [
{
"type": "LABEL_DETECTION",
"maxResults": 10
}
]
},
{
"image": {
"source": {
"gcsImageUri": "gs://visionapitest/landmark/test2.jpeg"
}
},
"features": [
{
"type": "LABEL_DETECTION",
"maxResults": 10
}
]
}, … ]}
请注意,这不是指定完整文件夹的方法,因为您可以看到“requests”字段是一个对象数组,因此您必须逐项列出JSON文件中的每个图像
另一方面,为了读取文件夹中的所有图像,您可以使用一个可用的方法动态创建“requests”数组。我想与大家分享我从中获取的python代码片段,虽然它只考虑了一个图像,但我修改了它以读取整个文件夹
from google.cloud import vision_v1
from google.cloud.vision_v1 import enums
from google.cloud import storage
from google.cloud.vision_v1 import types
from re import search
def sample_async_batch_annotate_images(
bucket_name,
output_uri
):
"""Perform async batch image annotation."""
client = vision_v1.ImageAnnotatorClient()
storage_client = storage.Client()
blobs = storage_client.list_blobs(
bucket_name, prefix='vision/label/', delimiter='/'
)
requests = []
for blob in blobs:
if search('jpg',blob.name):
input_image_uri = 'gs://' + bucket_name +'/'+ blob.name
print(input_image_uri)
source = {"image_uri": input_image_uri}
image = {"source": source}
features = [
{"type": enums.Feature.Type.LABEL_DETECTION},
]
request = types.AnnotateImageRequest(image=image, features=features)
requests.append(request)
gcs_destination = {"uri": output_uri}
# The max number of responses to output in each JSON file
batch_size = 2
output_config = {"gcs_destination": gcs_destination,
"batch_size": batch_size}
operation = client.async_batch_annotate_images(requests, output_config)
print("Waiting for operation to complete...")
response = operation.result(90)
# The output is written to GCS with the provided output_uri as prefix
gcs_output_uri = response.output_config.gcs_destination.uri
print("Output written to GCS with prefix: {}".format(gcs_output_uri))
但是,您可以将其作为参考,但这取决于您的用例和代码语言偏好
关于权限的问题,我想您指的是云存储桶。据我所知,没有必要公开您的图像,您只需在bucket内对执行请求的服务帐户进行读/写操作。谢谢,Mariana。我还没有Python方面的经验,但会研究一下。从Cloud Shell中,如何将API响应下载为JSON?您可以将已执行命令的响应重定向到一个文件,在命令末尾添加“>response.JSON”,通过这样做,响应将存储在“response.JSON”文件中。请注意,您可以根据需要命名该文件。为了下载创建的文件,您可以在Cloud Shell“cloudshell download file_name”中执行此命令,有关更多详细信息,您可以查看。谢谢,Mariana。我将在这里留下一条注释,解释上述命令,以防有人无意中发现此线程。在终端屏幕:1。curl-s-X POST-H“Content-Type:application/json”--data-binary@request.json-images:annotate?key=your-api-key>response.json 2。cloudshell download response.json应该下载响应文件谢谢,Mariana。我还没有Python方面的经验,但会研究一下。从Cloud Shell中,如何将API响应下载为JSON?您可以将已执行命令的响应重定向到一个文件,在命令末尾添加“>response.JSON”,通过这样做,响应将存储在“response.JSON”文件中。请注意,您可以根据需要命名该文件。为了下载创建的文件,您可以在Cloud Shell“cloudshell download file_name”中执行此命令,有关更多详细信息,您可以查看。谢谢,Mariana。我将在这里留下一条注释,解释上述命令,以防有人无意中发现此线程。在终端屏幕:1。curl-s-X POST-H“Content-Type:application/json”--data-binary@request.json-images:annotate?key=your-api-key>response.json 2。cloudshell download response.json,它应该下载响应文件