Azure Функции Python Изображение BLOB-объекта - PullRequest
2 голосов
/ 02 февраля 2020

Я пытаюсь загрузить два изображения, одно загруженное изображение (триггер) и одно из жестко запрограммированного местоположения BLOB-объекта.

def main(blobtrig: func.InputStream, medianimage: func.InputStream, blobout: func.Out[bytes]):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Stuff: {blobtrig.__dict__}\n")

    logging.info(f"Next Blob Name \n"
                 f"Stuff: {medianimage.__dict__}\n")

    input_image = blobtrig
    base_image = Image.open(input_image)

    med_image = medianimage
    logging.info(f"Med image read is {type(med_image)}")
    median_image = Image.open(med_image)

Первый Image.open (input_image) работает, но второй нет т. Я думаю, что медианима Inputstream не указывает на правильное место. Мои функции. json похож на это ...

{"scriptFile": "__init__.py","bindings": [
{
  "name": "blobtrig",
  "type": "blobTrigger",
  "direction": "in",
  "path": "facility-model-image-data/{name}",
  "connection": "AzureWebJobsStorage"
},
{
  "type": "blob",
  "direction": "in",
  "name": "medianimage",
  "path": "facility-model-image-data/median.jpg",
  "connection": "AzureWebJobsStorage"
},
{
  "type": "blob",
  "direction": "out",
  "name": "blobout",
  "path": "processed-images/{rand-guid}.jpg",
  "connection": "AzureWebJobsStorage"
}],"disabled": false, "scriptFile": "__init__.py"}

Но файлы, напечатанные в журнале python, одинаковы, даже если срединное изображение должно указывать на совершенно другой файл:

[02/02/2020 18:39:36] Stuff: {'_io': <_io.BytesIO object at 0x7f2cabdc0620>,
'_name': 'facility-model-image-data/test_gray.jpg', '_length': 152606,
'_uri': 'https://functionimageprocessor.blob.core.windows.net/facility-model-image-data/test_gray.jpg'}
[02/02/2020 18:39:36] 
[02/02/2020 18:39:36] Next Blob Name 
[02/02/2020 18:39:36] Stuff: {'_io': <_io.BytesIO object at 0x7f2cabdc0f10>,
'_name': 'facility-model-image-data/test_gray.jpg', '_length': 152606,
'_uri': 'https://functionimageprocessor.blob.core.windows.net/facility-model-image-data/test_gray.jpg'}

и сценарий здесь не срабатывает ...

[02/02/2020 18:39:36] Stack:   File "/usr/lib/azure-functions-core-tools/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 312, in _handle__invocation_request
[02/02/2020 18:39:36]     self.__run_sync_func, invocation_id, fi.func, args)
[02/02/2020 18:39:36]   File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run
[02/02/2020 18:39:36]     result = self.fn(*self.args, **self.kwargs)
[02/02/2020 18:39:36]   File "/usr/lib/azure-functions-core-tools/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 431, in __run_sync_func
[02/02/2020 18:39:36]     return func(**params)
[02/02/2020 18:39:36]   File "/home/peter/Documents/Python/dataset-processing/functions/imageuploadtrigger/__init__.py", line 35, in main
[02/02/2020 18:39:36]     median_image = Image.open(med_image)#Image.frombytes('RGBA', (636,795), med_image, 'raw')

Давно боролся с этим, поэтому любая помощь будет отличной! Также извините, если форматирование вопроса не является лучшим (первое размещение здесь).

1 Ответ

2 голосов
/ 03 февраля 2020

Это выглядит правильно. К сожалению, я не смог найти никаких примеров использования 2 разных привязок blobBings с python. но и blobTrigger, и blobBinding читаются через func.InputStream. Мое предположение было бы - это действительно не работает с python (возможно, ошибка?). Вы можете подать проблему на Github.

Несколько обходных путей:

  1. , если это median.jpg относительно stati c - вы можете просто скопировать его локально в хранилище функций и читать его, не имея blobBinding
  2. , если это не так - вы можете использовать Azure Storage SDK для python, чтобы прочитать файл из BLOB-объекта, используя SDK, а не привязку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...