ome/napari-ome-zarr

Failed to open a zarr file

bpavie opened this issue · 1 comments

Dear All,

I am trying to visualize ome.zarr file in napari on Windows 10.

I converted a dataset to zarr from the https://camelyon17.grand-challenge.org/Data/

I downloaded it using the following script

import argparse
import ftplib
import os


def download_camelyon16_image(filename):
    filename = filename.lower()
    if os.path.exists(filename):
        print(f"The image [{filename}] already exist locally.")
    else:
        print(f"Downloading '{filename}'...")
        prefix = filename.split("_")[0].lower()
        if prefix == "test":
            folder_name = "testing/images"
        elif prefix in ["normal", "tumor"]:
            folder_name = f"training/{prefix}"
        else:
            raise ValueError(
                f"'{filename}' not found on the server."
                " File name should be like 'test_001.tif', 'tumor_001.tif', or 'normal_001.tif'"
            )
        path = f"gigadb/pub/10.5524/100001_101000/100439/CAMELYON16/{folder_name}/"
        ftp = ftplib.FTP("parrot.genomics.cn")
        ftp.login("anonymous", "")
        ftp.cwd(path)
        ftp.retrbinary("RETR " + filename, open(filename, "wb").write)
        ftp.quit()


if __name__ == "__main__":
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument(
        "filename",
        type=str,
        help="The image name in Camelyon16 dataset to be downloaded.",
    )
    args = arg_parser.parse_args()
    download_camelyon16_image(args.filename)

I then converted it into zarr using the following sccript:

import numpy as np
import zarr
import os
#Just to load the openslide dll
os.add_dll_directory('openslide-win64-20171122/bin/')
from openslide import OpenSlide

#Require pip install openslide-python
slide = OpenSlide('data/tumor_001.tif')
file_name = 'data/tumor_001.zarr'

root = zarr.open_group(file_name, mode='a')

for i in range(0, 3):
    print(i, 10)
    shape = (slide.level_dimensions[i][0], slide.level_dimensions[i][1], 4)
    z1 = root.create_dataset(str(i), shape=shape, chunks=(300, 300, None),
                             dtype='uint8')

    # image = np.asarray(slide.read_region((0, 0), i,
    #                    slide.level_dimensions[i])).transpose(1, 0, 2)
    # z1[:] = image

    for j in range(slide.level_dimensions[i][0]//1528):
        print(j, slide.level_dimensions[i][0]/1528)
        image = np.asarray(slide.read_region((j*1528*(2**i), 0), i,
                           (1528, slide.level_dimensions[i][1]))).transpose(1, 0, 2)
        z1[j*1528:(j+1)*1528] = image

I installed the plugin for napari ( pip install ome-zarr )and tried to open it but get the following error:

napari "data\tumor_001.zarr"
10:46:57 ERROR exception calling callback for <Future at 0x2173e8e27c0 state=finished returned ChunkRequest>
Traceback (most recent call last):
  File "c:\gbw_myprograms\anaconda3\envs\napari-env2\lib\concurrent\futures\_base.py", line 328, in _invoke_callbacks
    callback(self)
  File "c:\gbw_myprograms\anaconda3\envs\napari-env2\lib\site-packages\napari\components\experimental\chunk\_pool.py", line 162, in _on_done
    self._on_done_loader(request)
  File "c:\gbw_myprograms\anaconda3\envs\napari-env2\lib\site-packages\napari\components\experimental\chunk\_loader.py", line 225, in _on_done
    self.cache.add_chunks(request)
  File "c:\gbw_myprograms\anaconda3\envs\napari-env2\lib\site-packages\napari\components\experimental\chunk\_cache.py", line 108, in add_chunks
    self.chunks[request.location] = request.chunks
  File "c:\gbw_myprograms\anaconda3\envs\napari-env2\lib\site-packages\napari\_vendor\experimental\cachetools\cachetools\lru.py", line 19, in __setitem__
    cache_setitem(self, key, value)
  File "c:\gbw_myprograms\anaconda3\envs\napari-env2\lib\site-packages\napari\_vendor\experimental\cachetools\cachetools\cache.py", line 47, in __setitem__
    raise ValueError('value too large')

Any tips will be appreciated
Benjamin

Hi Benjamin. Your conversion has produced a Zarr file but not an OME-Zarr image. You can see a similar thread under https://forum.image.sc/t/manually-creating-ome-zarr-from-a-folder-of-tiffs-pngs/59806/2

Support for opening raw Zarr files is provided directly from the napari team. Alternatively, we can help you to format the Zarr according to https://ngff.openmicroscopy.org/ in which case this would be the right repository.