Rya*_*ack 6 python image-processing google-cloud-dataflow apache-beam
任务:我将运行一个ETL作业,该作业将从GCS中提取TIFF图像,使用OpenCV + Tesseract等开源计算机视觉工具的组合将这些图像转换为文本,并最终将数据加载到BigQuery中
问题:我正在尝试使用Dataflow来执行ETL作业,因为我有数百万个图像(每个图像是一个单独的文件/ blob),我想扩展到数百台机器.但是,我遇到了关于下载图像的最佳方法的Dataflow(将在下面更详细地描述)的一些问题.
问题:最终我试图确定:
1)数据流是否是执行此操作的最佳解决方案?我考虑过的替代方案是在大型机器上运行多线程作业.我还应该考虑其他替代方案吗?
2)如果数据流是最佳解决方案,那么我应该如何专门处理下载数百万张图像(以便我可以通过转换运行它们)?
技术挑战:
以下帖子推荐的解决方案建议beam.io.gcp.gcsio.GcsIO().open(filepath, 'r')在DoFn中使用从GCS下载图像.
我试图沿着这条路走下去,beam.io.gcp.gcsio.GcsIO().open(filepath, 'r')但是,我无法打开图像.这个问题在这里描述:IO.BufferReader问题.
使用时,DirectRunner我可以使用此客户端api下载图像文件from google.cloud import storage,我可以打开并预处理图像没问题.但是,在使用数据流运行器时,我遇到了依赖性问题AttributeError: 'module' object has no attribute 'storage'.
话虽如此,如果Dataflow是最佳解决方案,那么下载和处理数百万张图像的最佳方法是什么?
你的想法是正确的。看来您遇到了两个问题:
对于这个io.BufferedReader问题,您需要添加一个接口,允许您查找 Tiff 文件,正如您在问题中正确找到的那样。
看来使用的问题google.cloud.storage是依赖关系在Dataflow环境中不可用。要添加此依赖项,请查看Beam 文档中的管理 Python 管道依赖项。
主要思想是,您可以使用--requirements_file reqs.txt传入的文件运行管道,列出您想要添加的所有额外依赖项。