*** google.api_core.exceptions.PermissionDenied: 403 Ошибка открытия файла: gs: //test_documents/uploads/2c4cd57cea679abd7dde9b20023a6c2c.pdf - PullRequest
0 голосов
/ 03 октября 2019

Я видел похожий вопрос, опубликованный пару раз с некоторыми предлагаемыми шагами для решения, которые, я полагаю, я выполнил. Код довольно прост из примеров, за исключением того, что я делаю все в одной программе ... загружаю файл в GCS, а затем пытаюсь обработать файл с помощью Vision. Я установил переменную окружения сверху, которая, как я думал, должна применяться к обеим функциям ... файл успешно загружен в браузер GCS и URI подтвержден. Ошибка отказа в разрешении вызывает недоумение, потому что учетные данные имеют права владельца ...

Мысли? Эта вещь умирает, как только client.async_batch_annotate_files..is вызывается

-> операция = client.async_batch_annotate_files (запросы = [async_request]) (Pdb) google.api_core.exceptions.PermissionDenied: 403 Ошибка открытия: 403 Ошибка открытияgs: //test_documents/uploads/2c4cd57cea679abd7dde9b20023a6c2c.pdf.

from google.cloud import vision
from google.cloud import storage
from google.protobuf import json_format
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=config.gstorage
mime_type = 'application/pdf'
batch_size = 2

doc = DocumentMaster.objects.get(document_id=14)
bname = 'test_documents'
fname = doc.document_hash_key+".pdf"
in_target = os.path.join("uploads",fname)
out_target = os.path.join("document_json",fname)

fullpath = os.path.join(bname,in_target)
fullpath2 = os.path.join(bname,out_target)
private_in = "gs://"+fullpath
private_out = "gs://test_documents/document_json"

CloudStorage = storage.Client()
StorageBucket = CloudStorage.get_bucket(bname)
blob = StorageBucket.blob(in_target)
blob.upload_from_filename(doc.document_original.path)

client = vision.ImageAnnotatorClient()

feature = vision.types.Feature(type=vision.enums.Feature.Type.DOCUMENT_TEXT_DETECTION)

gcs_source = vision.types.GcsSource(uri=private_in)
input_config = vision.types.InputConfig(gcs_source=gcs_source, mime_type=mime_type)
gcs_destination = vision.types.GcsDestination(uri=private_out)
output_config = vision.types.OutputConfig(gcs_destination=gcs_destination, batch_size=batch_size)

async_request = vision.types.AsyncAnnotateFileRequest(features=[feature], input_config=input_config,output_config=output_config)

operation = client.async_batch_annotate_files(requests=[async_request])
print('Waiting for the operation to finish.')
operation.result(timeout=30)

1 Ответ

1 голос
/ 03 октября 2019

Оказывается, я недооценил, каким был конкретный админ в облачном хранилище GCS. Несмотря на то, что у проекта есть служебная учетная запись, ему также нужно было явно разрешить извлекать только что загруженные файлы ... закрытие

...