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.