#python #google-cloud-platform #google-cloud-automl
#python #google-облачная платформа #google-cloud-automl
Вопрос:
Я пытаюсь использовать Raspi 3B и AutoML Vision для подготовки модели для классификации. Однако, когда я пытаюсь создать набор данных на облачной платформе Google, возникает следующая проблема:
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/google/api core/grpc helpers.py", line 57, in error remapped callable
return callable (*args, **kwargs)
File "/home/pi/.local/lib/python3.7/site-packages/grpc/ channel.py", line 826, in call __
return end_unary_response blocking({state, call, False, None)
File "/home/pi/.local/lib/python3.7/site-packages/grpc/ channel.py", line 729, in end unary response blocking
raise InactiveRpcError(state)
grpc. channel. InactiveRpcError: < InactiveRpcError of RPC that terminated with:
status = StatusCode. INVALID ARGUMENT
details = "List of found errors: 1.Field: parent; Message: Required field is invalid "
debug error string = "{"created":"G1604833054.567218256", "description":"Error received from peer ipv6: [2a00:1450:400a: 801: :200a] :443","file":"src/core/lib/surface/call.cc","file line":1056,"grpc_message":"List of found
errors:tl.Field: parent; Nessage: Required field is invalidt","grpc_ status":3}"
>
Код для создания набора данных
automl_client = automl.AutoMlClient()
project_location = automl_client.location_path(project_id, region_name)
bucket = storage_client.bucket(bucket_name)
# upload the images to google cloud bucket
upload_image_excel(bucket, bucket_name, dataset_name, status_list, csv_name)
# Create a new automl dataset programatically
classification_type = 'MULTICLASS'
dataset_metadata = {'classification_type': classification_type}
dataset_config = {
'display_name': dataset_name,
'image_classification_dataset_metadata': dataset_metadata
}
dataset = automl_client.create_dataset(project_location, dataset_config)
dataset_id = dataset.name.split('/')[-1]
dataset_full_id = automl_client.dataset_path(
project_id, region_name, dataset_id
)
# Read the *.csv file on Google Cloud
remote_csv_path = 'gs://{0}/{1}'.format(bucket_name, csv_name)
input_uris = remote_csv_path.split(',')
input_config = {'gcs_source': {'input_uris': input_uris}}
response = automl_client.import_data(dataset_full_id, input_config)
Кто-нибудь знает, что здесь происходит?
Ответ №1:
Какой регион вы используете? Имейте в виду, что для этой функции текущие ресурсы проекта должны находиться в регионе us-central1, чтобы использовать этот API [1].
Сообщение об ошибке является НЕДОПУСТИМЫМ АРГУМЕНТОМ, поэтому я не думаю, что вышеупомянутая проблема является проблемой. Просматривая документацию GCP по созданию набора данных [1], я вижу, что ваш код отличается от того, что сделано в этом примере. Метаданные и конфигурация задаются по-другому. Не могли бы вы попытаться воссоздать его, используя тот же формат, что и в примере общего доступа? Я считаю, что это должно решить возникшую проблему.
Здесь у вас есть пример кода:
from google.cloud import automl
# TODO(developer): Uncomment and set the following variables
# project_id = "YOUR_PROJECT_ID"
# display_name = "your_datasets_display_name"
client = automl.AutoMlClient()
# A resource that represents Google Cloud Platform location.
project_location = f"projects/{project_id}/locations/us-central1"
# Specify the classification type
# Types:
# MultiLabel: Multiple labels are allowed for one example.
# MultiClass: At most one label is allowed per example.
# https://cloud.google.com/automl/docs/reference/rpc/google.cloud.automl.v1#classificationtype
metadata = automl.ImageClassificationDatasetMetadata(
classification_type=automl.ClassificationType.MULTILABEL
)
dataset = automl.Dataset(
display_name=display_name,
image_classification_dataset_metadata=metadata,
)
# Create a dataset with the dataset metadata in the region.
response = client.create_dataset(parent=project_location, dataset=dataset)
created_dataset = response.result()
# Display the dataset information
print("Dataset name: {}".format(created_dataset.name))
print("Dataset id: {}".format(created_dataset.name.split("/")[-1]))
Комментарии:
1. Спасибо! Я решил эту проблему, напрямую назначив идентификатор проекта в коде, в то время как я использовал переменные среды в файле * .env. Я до сих пор не понимаю, почему использование переменных среды является проблемой…