Можно ли прочитать файл .tiff из удаленного сервиса с помощью dask? - PullRequest
0 голосов
/ 17 октября 2019

Я храню файлы .tiff в облачном хранилище Google. Я хотел бы управлять ими с помощью распределенного кластера Dask , установленного с Helm в Kubernetes. .

На основе репозитория dask-image , документация Dask по удаленные службы данных и использование storage_options , прямо сейчас это выглядит как удаленное чтение из форматов .zarr, .tdb, .orc, .txt, .parquet и .csv,Это правильно? Если да, есть ли рекомендуемый обходной путь для доступа к удаленным файлам .tiff?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Есть много способов сделать это. Вероятно, я бы использовал библиотеку типа skimage.io.imread вместе с dask.delayed для параллельного чтения файлов TIFF, а затем упорядочил их в массив Dask

. Я рекомендую вам взглянуть на этот пост назагрузка данных изображения с помощью Dask , что делает нечто подобное.

Я полагаю, что функция skimage.io.imread с радостью будет считывать данные с URL-адреса, хотя может и не знать, как взаимодействовать с GCS. Если данные в GCS также доступны по общедоступному URL-адресу (это легко сделать, если у вас есть доступ к корзине GCS), то это будет легко. В противном случае вы можете использовать библиотеку gcsfs , чтобы получить байты из файла, а затем передать эти байты в какой-либо считыватель изображений Python.

0 голосов
/ 21 октября 2019

Опираясь на ответ @ 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))
...