Открытие пирамидальных изображений с помощью Google Collab: large_image getTileSource не работает с Google Collab (для ndpi недоступен источник листов)
Я использовал все эти команды, чтобы убедиться, что у меня есть все необходимое для загрузки пирамидальных изображений dpi в Google Collab, но пока безуспешно.
!pip install large_image
!apt update && apt install -y openslide-tools
!pip install openslide-python
!pip install libtiff openslide_python pyvips gdal mapnik pyproj glymur -f https://girder.github.io/large_image_wheels
Я получаю следующую ошибку:
---------------------------------------------------------------------------
TileSourceException Traceback (most recent call last)
<ipython-input-23-0584be72095d> in <module>()
27 print(os.listdir(ndpi_dir))
28 print(target_filename)
---> 29 ts = large_image.getTileSource(target_filename)
30
31 # print(ts.getMetadata())
1 frames
/usr/local/lib/python3.6/dist-packages/large_image/tilesource/__init__.py in getTileSourceFromDict(availableSources, pathOrUri, *args, **kwargs)
65 if availableSources[sourceName].canRead(sourceObj, *args, **kwargs):
66 return availableSources[sourceName](sourceObj, *args, **kwargs)
---> 67 raise TileSourceException('No available tilesource for %s' % pathOrUri)
68
69
TileSourceException: No available c for ndpi_images/Li88TDCLAMP.ndpi
Я убедился, что файл есть, он нормально загружается на других платформах с помощью той же команды, так что это не файл.
Как я могу решить эту проблему?
Благодарность
1 ответ
Оказывается (по крайней мере, сегодня, а может и не тогда, когда был опубликован исходный вопрос), вы можете попросить Google CoLab проксировать порт. Сlarge_image >= 1.23.5
, есть несколько удобных функций, которые помогут в этом. Здесь есть образец блокнота: https://github.com/girder/large_image/blob/master/docs/large_image_examples.ipynb .
Основной метод: учитывая локальный файлsample.npdi
:
# The find-links pulls from some non-official pre-built wheels for openslide, etc.
!pip install large_image[all] --find-links https://girder.github.io/large_image_wheels
!pip install ipyleaflet
import large_image
ts = large_image.open('sample.ndpi')
import importlib.util
if importlib.util.find_spec('google.colab'):
# colab intercepts localhost
large_image.tilesource.jupyter.IPyLeafletMixin.JUPYTER_PROXY = 'https://localhost'
else:
# JupyterLab proxies from its own host
large_image.tilesource.jupyter.IPyLeafletMixin.JUPYTER_PROXY = True
# Look at our tile source; it will be shown as an ipyleaflet map
ts
Внутри есть много работы по получению слоя тайлов в пиксельных координатах в iPyLeaflet (и, по крайней мере, сейчас я только выяснил, как располагать пиксельные координаты снизу вверх (y, x), а не сверху вниз (x,y), чего и следовало ожидать.