【问题标题】:Image preprocessing with Dataflow使用 Dataflow 进行图像预处理
【发布时间】:2018-11-20 15:12:00
【问题描述】:

任务:我将运行一个 ETL 作业,该作业将从 GCS 中提取 TIFF 图像,使用 OpenCV + Tesseract 等开源计算机视觉工具的组合将这些图像转换为文本,并最终加载数据导入 BigQuery

问题:我正在尝试使用 Dataflow 来执行 ETL 作业,因为我有数百万张图像(每个图像都是一个单独的文件/blob)并且我想扩展到数百台机器。但是,关于下载图像的最佳方式,我遇到了一些关于 Dataflow 的问题(将在下面更详细地描述)。

问题:最终我想确定:

1) 数据流是做到这一点的最佳解决方案吗?我考虑过的替代方案是在大型机器上运行多线程作业。还有其他我应该考虑的替代方案吗?

2)如果数据流是最好的解决方案,那么我应该如何专门处理下载数百万张图片(以便我可以通过转换运行它们)?

技术挑战:

以下帖子 Recommended solution 建议在 DoFn 中使用 beam.io.gcp.gcsio.GcsIO().open(filepath, 'r') 从 GCS 下载图像。
我尝试使用beam.io.gcp.gcsio.GcsIO().open(filepath, 'r') 沿着这条路走下去,但是,我无法打开图像。此处描述了该问题:IO.BufferReader issue

使用DirectRunner 时,我可以使用此客户端api from google.cloud import storage 下载图像文件,我可以打开并预处理图像没有问题。但是,在使用数据流运行器时,我遇到了依赖问题,AttributeError: 'module' object has no attribute 'storage'

话虽如此,如果 Dataflow 是最佳解决方案,那么下载和处理数百万张图像的最佳方法是什么?

【问题讨论】:

    标签: python image-processing google-cloud-dataflow apache-beam


    【解决方案1】:

    你的想法是正确的。看来你遇到了两个问题:

    • 对于 io.BufferedReader 问题,您需要添加一个界面,以便您在 Tiff 文件中查找,因为您正确找到了 in the question

    • 似乎使用google.cloud.storage 的问题是依赖在Dataflow 环境中不可用。要添加此依赖项,请查看 Beam 文档中的 Managing Python pipeline dependencies

    主要思想是,您可以使用传入的 --requirements_file reqs.txt 文件运行管道,列出您要添加的所有额外依赖项。

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 2021-02-13
      • 2021-06-15
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2012-11-17
      相关资源
      最近更新 更多