是否可以使用 dask 从远程服务读取 .tiff 文件?

Is it possible to read a .tiff file from a remote service with dask?

我正在 google 云存储上存储 .tiff 文件。我想使用分布式 Dask 集群 installed with Helm on Kubernetes..

来操作它们

基于 dask-image repo, the Dask documentation on remote data services, and the use of storage_options,现在似乎支持从 .zarr、.tdb、.orc、.txt、.parquet 和 .csv 格式进行远程读取。那是对的吗?如果是这样,是否有任何推荐的访问远程 .tiff 文件的解决方法?

有很多方法可以做到这一点。我可能会使用像 skimage.io.imread 这样的库和 dask.delayed 来并行读取 TIFF 文件,然后将它们排列成一个 Dask Array

我鼓励你看一下 this blogpost on loading image data with Dask,它有类似的功能。

我相信 skimage.io.imread 函数会愉快地从 URL 中读取数据,尽管它可能不知道如何与 GCS 进行互操作。如果 GCS 上的数据也可以通过 public URL 获得(如果您有权访问 GCS 存储桶,这很容易做到)那么这将很容易。否则,您可能会使用 gcsfs 库从文件中获取字节,然后将这些字节提供给一些 Python 图像 reader.

根据@MRocklin 的回答,我找到了两种使用 gcsfs 的方法。使用 imageio 进行图像解析的一种方法:

fs = gcsfs.GCSFileSystem(project="project_name")
img_bytes = fs.cat("bucket/blob_name.tif")
imageio.core.asarray(imageio.imread(img_bytes, "TIFF"))

另一个 opencv-python 用于图像解析:

fs = gcsfs.GCSFileSystem(project="project_name")
fs.get("bucket/blob_name.tif", "local.tif")
img = np.asarray(cv2.imread("local.tif", cv2.IMREAD_UNCHANGED))