API-интерфейс Google Images execute_transforms() возвращает «произошла ошибка»

Я пытаюсь использовать Google Image Manipulation API. Это кажется довольно простым, но когда я вызываю execute_transforms объект Image, он выдает общее сообщение «Произошла ошибка».

gcs_file_location правильно, никаких ошибок не возникает, пока я не вызову execute_transforms(). Файл изображения не слишком большой.

from google.appengine.api import images


gcs_file_location = '/gs/' + gcs_file_location
img = images.Image(filename=gcs_file_location)
img.resize(width=50, height=50)

# The following code throws "There has been an error"
thumbnail = img.execute_transforms()    

Я сделал тест с тем же кодом, но читая с локального изображения, функция img.execute_transforms() не вызывала это общее «Произошла ошибка», поэтому убедитесь, что изображение правильно читается, а тип img - <class 'google.appengine.api.images.Image'>. Также поищите в журналах эту ошибку, возможно, там есть более конкретная трассировка стека ошибки.

komarkovich 11.04.2019 09:59

Он действительно имеет тип <class 'google.appengine.api.images.Image'>, и в журналах App Engine также не регистрируется сообщение об ошибке!

Antoine Vo 12.04.2019 21:38

Я воспроизвел вашу ошибку, используя официальную документацию пример кода. Из этого кода я просто изменил его, чтобы получить в качестве параметра http (id) путь к изображению (/gs/<bucket name>/<img path>), затем я развернул его, и он работал правильно. Не могли бы вы написать точные шаги, которые вы предпринимаете, чтобы увидеть эту ошибку, также было бы здорово увидеть весь код, чтобы воспроизвести вашу ошибку, спасибо.

Pol Ortiz 15.04.2019 15:45

Одно отличие состоит в том, что я использую Django для серверной веб-инфраструктуры. Является ли django несовместимым с Google Imaging API или мне нужно импортировать WebApp2? Кроме этого, весь соответствующий код показан выше, и я вполне уверен, что путь GS правильный, он отформатирован следующим образом: /gs/371/3612ae-63163s-3. Спасибо за ответ.

Antoine Vo 15.04.2019 20:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
149
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Мне потребовалось некоторое время, но мне удалось воспроизвести ваш сценарий, поэтому я настроил среду Питон 2.7 (в соответствии с руководством для Обзор Python API изображений и установил все файлы, необходимые для Django, используя код из официальный репозиторий и запустив его с помощью официальный учебник для Джанго.

Затем я изменил опросы службы, чтобы выполнять функции, вызывающие эти ошибки.

def index(request):
    filename_gs=request.GET.get("id")
    img = images.Image(filename=filename_gs)
    img.resize(width=1000, height=1000)
    thumbnail = img.execute_transforms()

И я обнаружил, что действительно вы правы, в функции execute_transforms возникает ошибка и останавливается выполнение. Однако у меня не было общей ошибки, на которую вы ссылаетесь, я получаю следующее:

  File "/home/polortiz/DJANGOOO/mytry3/python-docs-samples/appengine/standard/django/polls/views.py", line 48, in index
    thumbnail = img.execute_transforms()
  File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/images/__init__.py", line 810, in execute_transforms
    return rpc.get_result()
  File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 615, in get_result
    return self.__get_result_hook(self)
  File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/images/__init__.py", line 898, in execute_transforms_hook
    raise _ToImagesError(e, self._blob_key)
TransformationError

Я продолжил расследование, чтобы проверить, какие проблемы могут вызывать эти ошибки, и нашел файл библиотечный код этой функции. Там вы могли увидеть все исключения, которые возникают:

  • BadRequestError: When the request specifications are invalid.
  • NotImageError: When the image data given is not an image.
  • BadImageError: When the image data given is corrupt.
  • LargeImageError: When the image data given is too large to process.
  • InvalidBlobKeyError: When the blob key provided is invalid.
  • TransformationError: When an error occurs during image manipulation.
  • AccessDeniedError: When the blob key refers to a Google Storage object, and the application does not have permission to access the object.
  • ObjectNotFoundError: When the blob key refers to an object that no longer exists.

Итак, для решения вашей проблемы было бы здорово проверить все эти пункты. Отвечая на вопросы, заданные в комментариях:

Is django not compatible with Google's Imaging API or do I need to import WebApp2?

Google Imaging API совместим с Django. И не обязательно использовать WebApp2 для обработки HTTP-запросов и ответов.

Спасибо, Пол, в конечном итоге я использовал библиотеку изображений Python для манипуляций с изображениями, так как просто не смог заставить ее работать. Вероятно, это та же ошибка преобразования, что и у вас, которая все еще является довольно общей ошибкой. Я приму ваш ответ, если вы когда-нибудь выясните, что именно происходит, я хотел бы услышать об этом.

Antoine Vo 24.04.2019 20:15

Недавно я тоже заметил эту проблему при использовании get_serving_url() для файлов изображений в корзине GCS у которого отключены детальные разрешения. По какой-то причине кажется, что API изображений выбрасывает TransformationError такое ведро, даже если никакого преобразования не происходит. Вот ошибка, открытая с Google, который отмечает, что нужно создать новую корзину и обязательно использовать детализированные разрешения, чтобы избежать ошибки.

Другие вопросы по теме