python - Azure Functions Python Blob 图像

标签 python azure azure-functions azure-blob-storage

我正在尝试加载两张图像,一张是上传的图像(触发器),一张来自硬编码的 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) 有效,但第二个无效。我认为中位数图像输入流没有指向正确的位置。我的functions.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')

多年来一直在努力解决这个问题,所以任何帮助都会很棒!如果问题格式不是最好的,也很抱歉(第一次在这里发帖)。

最佳答案

这看起来是正确的。不幸的是,我无法找到任何在 python 中使用 2 个不同的 blobBindings 的示例。但 blobTrigger 和 blobBinding 都是通过 func.InputStream 读取的。我的猜测是 - 这对 python 不起作用(也许是一个错误?)。您可以在 Github 上提出问题。

几个解决方法:

  1. 如果中位数.jpg 相对静态 - 您只需将其本地复制到函数存储并读取它,而无需使用 blobBinding
  2. 如果不是 - 您可以使用适用于 python 的 Azure 存储 SDK,使用 SDK(而不是绑定(bind))从 Blob 中读取文件。

关于python - Azure Functions Python Blob 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029504/

相关文章:

python - 使用 Flask SQLAlchemy SELECT DISTINCT YEAR()

c# - 什么会阻止在 Azure 中的两个 Web API 应用程序之间建立连接?

azure - 从 Azure Functions 动态访问 azure key Vault

azure - 使用 Azure Active Directory 和 Azure Active Directory B2C 时如何获取标准 OpenID 连接声明?

azure - 在没有flask的情况下在azure中运行python函数

c# - Azure Functions 运行时无法访问

python - lambda 函数如何在 python 中引用它的参数?

python - 无法确定从 SWIG(不是 ctypes)C 传递给 python 例程的正确参数

Python:pygame.QUIT()

java - 如何使用 Java SDK 列出 Azure 上的“我的图像”?