python - 使用 Dataflow 进行图像预处理

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

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

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

问题:最终我试图确定:

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 是最佳解决方案,那么下载和处理数百万张图片的最佳方法是什么?

最佳答案

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

  • 对于 io.BufferedReader 问题,您需要添加一个接口(interface),允许您在 Tiff 文件中查找,因为您正确找到了 in the question。 .

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

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

关于python - 使用 Dataflow 进行图像预处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395999/

相关文章:

python - 如何检索其中包含哈希的 GET 变量

python - 动态调用实例变量

python - 如何检测图像之间的偏移

python - client.get_bucket() 失败,但仅来自云数据流(计算引擎)

python - 将变量值传递给表单字段

c# - 在 ASP.NET C# Web 应用程序中动态创建图像的正确方法?

python - 获取边界框内的物体轮廓

mapreduce - 连接两个大型数据集的最佳策略

python - RuntimeError : OperationalError: (2003, 无法连接到 'IPaddress of the instance' 上的 MySQL 服务器

Python队列模块卡住了