|
| 1 | +{ |
| 2 | + "cells": [ |
| 3 | + { |
| 4 | + "cell_type": "raw", |
| 5 | + "id": "946884e8-1853-4c81-9dc8-5737204ac507", |
| 6 | + "metadata": { |
| 7 | + "editable": true, |
| 8 | + "slideshow": { |
| 9 | + "slide_type": "" |
| 10 | + }, |
| 11 | + "tags": [] |
| 12 | + }, |
| 13 | + "source": [ |
| 14 | + "# Writing an ome-zarr to the cloud\n", |
| 15 | + "\n", |
| 16 | + "In this notebook we will create a artificial image and save it to cloud storage." |
| 17 | + ] |
| 18 | + }, |
| 19 | + { |
| 20 | + "cell_type": "code", |
| 21 | + "execution_count": 1, |
| 22 | + "id": "05ad5179-6cf8-4f50-9dd7-0c35f4b41083", |
| 23 | + "metadata": { |
| 24 | + "editable": true, |
| 25 | + "slideshow": { |
| 26 | + "slide_type": "" |
| 27 | + }, |
| 28 | + "tags": [] |
| 29 | + }, |
| 30 | + "outputs": [], |
| 31 | + "source": [ |
| 32 | + "import ngff_zarr as nz\n", |
| 33 | + "import gcsfs\n", |
| 34 | + "import numpy as np\n", |
| 35 | + "import zarr\n", |
| 36 | + "import neuroglancer\n", |
| 37 | + "import matplotlib.pyplot as plt\n", |
| 38 | + "\n", |
| 39 | + "from IPython.display import display, HTML" |
| 40 | + ] |
| 41 | + }, |
| 42 | + { |
| 43 | + "cell_type": "code", |
| 44 | + "execution_count": 2, |
| 45 | + "id": "270f0185-2468-4217-a2c4-ad9c8781e7ca", |
| 46 | + "metadata": {}, |
| 47 | + "outputs": [], |
| 48 | + "source": [ |
| 49 | + "# Output path to use for the example below\n", |
| 50 | + "# The user running this process will need to be authenticated\n", |
| 51 | + "# gcloud auth login\n", |
| 52 | + "# and have write access to this bucket\n", |
| 53 | + "gcs_base = \"gs://ome-2025-test-data/ex1/out\"" |
| 54 | + ] |
| 55 | + }, |
| 56 | + { |
| 57 | + "cell_type": "code", |
| 58 | + "execution_count": 3, |
| 59 | + "id": "373a0084-2732-4d8c-960c-52ba000cfbc7", |
| 60 | + "metadata": {}, |
| 61 | + "outputs": [], |
| 62 | + "source": [ |
| 63 | + "# Create a very exciting array: a 3D checker board\n", |
| 64 | + "array = np.fromfunction(\n", |
| 65 | + " lambda i, j, k: ((i//8 + j//8 + k//8) % 2) * 255,\n", |
| 66 | + " (256, 1024, 1024),\n", |
| 67 | + " dtype=np.uint8)" |
| 68 | + ] |
| 69 | + }, |
| 70 | + { |
| 71 | + "cell_type": "code", |
| 72 | + "execution_count": 4, |
| 73 | + "id": "fe0870a9-6747-44d9-bd23-f785d5c9cf83", |
| 74 | + "metadata": { |
| 75 | + "editable": true, |
| 76 | + "slideshow": { |
| 77 | + "slide_type": "" |
| 78 | + }, |
| 79 | + "tags": [] |
| 80 | + }, |
| 81 | + "outputs": [ |
| 82 | + { |
| 83 | + "data": { |
| 84 | + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGgCAYAAADsNrNZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGPZJREFUeJzt3Q1sVfX9wOHfxUJhQoviaGWCojFBRaOiIrhsySAjzs0xmZsJbviSLXOovKhTZmBZFEu2zE0XX6ZxusS3STLfWDZD0JHpEBQnkzkri2QwXatmo/WNYuj55xz/baigCPT22/Y+T3JD772H3nvOuT2fnnN/p7eUZVmWAKCHDejpBwQAAQIgjD0gAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAPSvAN10003psMMOS4MHD04TJ05Ma9asKddDAdAHlcrxt+B++9vfpm9/+9vp1ltvLeLzi1/8Ii1dujQ1NjamkSNHfuz/bW9vT6+99loaNmxYKpVK3f3UACizPCtvvfVWGjVqVBow4GP2c7IyOOWUU7LZs2d3Xt++fXs2atSorKGhYbf/d/PmzXkQXSwDrwGvAa+B1LeXQb49/zhV3V2+bdu2pbVr16YFCxZ03pYXcOrUqWnVqlU7Td/W1lZcdixnlJaWlh5/zNra2hTBvPbPdRuxXnPmtfxa+uD2KT+S9XG6PUBvvvlm2r59e6qrq+tye379pZde2mn6hoaG9OMf/zj1BjU1NalSmNf+yXrtv2r64PZpd2+jhI+Cy/eU8rJ3XDZv3hz9lADoAd2+B3TQQQel/fbbLzU3N3e5Pb9eX1+/0/TV1dXFBYDK0u17QIMGDUoTJkxIK1as6DKyLb8+adKk7n44APqobt8Dys2fPz/NmjUrnXTSSemUU04phmG/88476fzzzy/HwwHQB5UlQN/85jfTG2+8kRYtWpSamprS8ccfn/74xz/uNDABgMpVlhNR90Vra2vY0OSIRRF1sq157Z/rNurH2byWX9YHt0/5wLKPG70XPgoOgMokQACEECAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIapSL9XS0pJqamp69DFLpVLqaVmWpQjmtX+u24j1mjOv5VfqQ9un1tbWVFtbu9vp7AEBEEKAAAghQACEECAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAkCAAKgc9oAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQlSlXqq2trbHHzPLsh5/zFKplCKY1/65biPWa868ll/WD7dP9oAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIDeH6CGhoZ08sknp2HDhqWRI0em6dOnp8bGxi7TbN26Nc2ePTuNGDEiDR06NM2YMSM1Nzd39/MGoJICtHLlyiIuTz/9dFq+fHl6//330xe/+MX0zjvvdE4zb9689Oijj6alS5cW07/22mvprLPOKsdzB6APK2X78CETb7zxRrEnlIfmc5/7XGppaUmf/vSn07333pu+/vWvF9O89NJL6aijjkqrVq1Kp5566k7fo62trbh0aG1tTaNHj04R+uPnbXwU81p+PiOnvCrps4/66s9s3oSampryvAeUf/PcgQceWPy7du3aYq9o6tSpndOMGzcujRkzpgjQRx3Wyz98ruMSFR8AetZeB6i9vT3NnTs3nXbaaWn8+PHFbU1NTWnQoEFp+PDhXaatq6sr7tuVBQsWFCHruGzevHlvnxIAlfCR3Pl7QevXr09PPvnkPj2B6urq4gJAZdmrPaCLL744LVu2LD3xxBPpkEMO6by9vr4+bdu2LW3ZsqXL9PkouPw+ANirAOVvguXxefDBB9Pjjz+exo4d2+X+CRMmpIEDB6YVK1Z03pYP0960aVOaNGnSnjwUAP1c1Z4edstHuD388MPFuUAd7+vkgweGDBlS/HvhhRem+fPnFwMT8tEPl1xySRGfXY2AA6By7dEw7I8aknfnnXem8847r/NE1Msuuyzdd999xfDqadOmpZtvvvkTH4LLh2HnIYvQF4c57i3zWn6GYZeXYdh9fxj2Pp0HVA4C1DMEqPwEqLwEqMLPAwKAvSVAAIQQIABCCBAAIQQIgL71p3jKbXejJ8rBqKXyMmqp/AzrL79Keh1nezmvn3Q0sz0gAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQAAIEACVwx4QACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQIiq1EvV1tb2+GNmWdbjj1kqlVIE89o/123Ees2Z1/LL+uH2yR4QACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIAQAgRACAECoO8FaMmSJalUKqW5c+d23rZ169Y0e/bsNGLEiDR06NA0Y8aM1Nzc3B3PFYB+pGpv/+MzzzyTfvWrX6Xjjjuuy+3z5s1Lv//979PSpUtTbW1tuvjii9NZZ52VnnrqqT36/i0tLammpib1pDymPS3LshTBvPbPdRuxXnPmtfxKfWj71NraWmz/y7IH9Pbbb6eZM2em22+/PR1wwAFdonHHHXek66+/Pn3hC19IEyZMSHfeeWf6y1/+kp5++uldfq+2trbiye54AaD/26sA5YfYzjjjjDR16tQut69duza9//77XW4fN25cGjNmTFq1atUuv1dDQ0NRyo7L6NGj9+YpAdDfA3T//fen5557rgjHhzU1NaVBgwal4cOHd7m9rq6uuG9XFixYUOw5dVw2b968p08JgP7+HlAehzlz5qTly5enwYMHd8sTqK6uLi4AVJY92gPKD7G9/vrr6cQTT0xVVVXFZeXKlenGG28svs73dLZt25a2bNnS5f/lo+Dq6+u7+7kDUCl7QFOmTEkvvPBCl9vOP//84n2eK6+8snj/ZuDAgWnFihXF8OtcY2Nj2rRpU5o0aVL3PnMAKidAw4YNS+PHj+9y2/7771+c89Nx+4UXXpjmz5+fDjzwwGIY9SWXXFLE59RTT+3eZw5AZZ4H9FF+/vOfpwEDBhR7QPkQ62nTpqWbb765ux8GgD6ulEWdCbmbE5iciFpefemktn3l5MzycyJq+ZX60M/sJ92O+1twAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEFWpl6qtre3xx8yyrMcfs1QqpQjmtX+u24j1mjOv5Zf1w+2TPSAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIAQAgRAiKrUS7W0tKSampoefcxSqZR6WpZlKYJ57Z/rNmK95sxr+ZX60PaptbU11dbW7nY6e0AAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEDfCNCrr76azj333DRixIg0ZMiQdOyxx6Znn322y19PXbRoUTr44IOL+6dOnZo2bNjQ3c8bgEoK0P/+97902mmnpYEDB6Y//OEP6cUXX0w/+9nP0gEHHNA5zU9+8pN04403pltvvTWtXr067b///mnatGlp69at5Xj+APRRpWwPPvDhqquuSk899VT685//vMv78281atSodNlll6XLL7+883N96urq0l133ZXOOeecnf5PW1tbcdnxcyRGjx7t84DKrC99tsi+8hk55efzgMqv1Ac/D2h3n+u2R3tAjzzySDrppJPS2WefnUaOHJlOOOGEdPvtt3fev3HjxtTU1FQcduuQP4mJEyemVatW7fJ7NjQ0FNN0XPL4AND/7VGAXnnllXTLLbekI488Mj322GPpoosuSpdeemn6zW9+U9yfxyeX7/HsKL/ecd+HLViwoKhkx2Xz5s17PzcA9M+P5G5vby/2gK677rrier4HtH79+uL9nlmzZu3VE6iuri4uAFSWPdoDyke2HX300V1uO+qoo9KmTZuKr+vr64t/m5ubu0yTX++4DwD2OED5CLjGxsYut7388svp0EMPLb4eO3ZsEZoVK1Z0eTMqHw03adIkSxyAvTsEN2/evDR58uTiENw3vvGNtGbNmnTbbbcVl45RGnPnzk3XXntt8T5RHqSFCxcWI+OmT5++Jw8FQH+X7aFHH300Gz9+fFZdXZ2NGzcuu+2227rc397eni1cuDCrq6srppkyZUrW2Nj4ib9/S0tLPu6v+Len5Y/b05co5rV/rtuI9Wpe+++63VufdDu+R+cB9YRPOn680sfZ7yvzWn7OjSmvSjq/q6/9zJblPCAA6C4CBEAIAQIghAABEEKAAOj95wH1pHwERU8zaqm8jFoqPyO0yq+SXselMs+rPSAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIAQAgRAiKrUS7W0tKSampoefcxSqZR6WpZlKYJ57Z/rNmK95sxr+ZX60PaptbU11dbW7nY6e0AAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiA3h+g7du3p4ULF6axY8emIUOGpCOOOCJdc801KcuyzmnyrxctWpQOPvjgYpqpU6emDRs2lOO5A9CXZXtg8eLF2YgRI7Jly5ZlGzduzJYuXZoNHTo0u+GGGzqnWbJkSVZbW5s99NBD2bp167IzzzwzGzt2bPbee+99osdoaWnJaxZyiWBe++d6jVq35rV/rtfUR7dP+fb845T+/0E+kS9/+cuprq4u3XHHHZ23zZgxo9jTufvuu4u9n1GjRqXLLrssXX755cX9LS0txf+566670jnnnLPT92xraysuHVpbW9Po0aNThD1YFN2mVCqlCOa1f67biPWaM6/ll/XB7VO+/a+pqemeQ3CTJ09OK1asSC+//HJxfd26denJJ59Mp59+enF948aNqampqTjs1qG2tjZNnDgxrVq1apffs6GhoZim4xIVHwB6VtWeTHzVVVcVeyjjxo1L++23X/Ge0OLFi9PMmTOL+/P45PI9nh3l1zvu+7AFCxak+fPn94o9IAB6aYAeeOCBdM8996R77703HXPMMen5559Pc+fOLQ67zZo1a6+eQHV1dXEBoLLsUYCuuOKKYi+o472cY489Nv3rX/8qDqPlAaqvry9ub25uLkbBdcivH3/88d393AHow/boPaB33303DRjQ9b/kh+La29uLr/Ph2XmE8veJdjyktnr16jRp0qTues4AVNoe0Fe+8pXiPZ8xY8YUh+D++te/puuvvz5dcMEFnSMm8kNy1157bTryyCOLIOXnDeWH6KZPn16ueQCgL9qTMeGtra3ZnDlzsjFjxmSDBw/ODj/88Ozqq6/O2traOqdpb2/PFi5cmNXV1WXV1dXZlClTssbGxk/8GM4Dck5Bfzh/Ilcp54qY1/67blNvOg+oJ+SH7PLh2BH64jj7vWVey8+5MeVVSec89dWf2W49DwgAuosAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEqEq9VEtLS6qpqenRxyyVSqmnZVmWIpjX/rluI9ZrzryWX6kPbZ9aW1tTbW3tbqezBwRACAECIIQAARBCgAAIIUAAhBAgAEIIEAAhBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBEAIAQIghAABEEKAAAghQACEECAAQggQACEECIAQAgRACAECIIQAARBCgAAIUZV6qdra2h5/zCzLevwxS6VSimBe++e6jVivOfNaflk/3D7ZAwIghAABEEKAAAghQACEECAAQggQACEECIAQAgRACAECIIQAARBCgAAIIUAAhBAgAEL0ur+GHfXXfHOtra2pUpjX/sl67b9a++D2aXfb81IWucXfhX//+99p9OjR0U8DgH20efPmdMghh/SdALW3t6fXXnutKOeYMWOKGaipqYl+Wr36t6I82JaT5eT15Oeut8i332+99VYaNWpUGjBgQN85BJc/2byYHbubeXwEaPcsp0/GcrKcupPX0759qKhBCACEECAAQvTaAFVXV6cf/ehHxb9YTl5Pfu56E9un7tHrBiEAUBl67R4QAP2bAAEQQoAACCFAAIQQIABC9NoA3XTTTemwww5LgwcPThMnTkxr1qxJlaqhoSGdfPLJadiwYWnkyJFp+vTpqbGxscs0W7duTbNnz04jRoxIQ4cOTTNmzEjNzc2pki1ZsiSVSqU0d+7cztsspw+8+uqr6dxzzy1eL0OGDEnHHntsevbZZzuXUz44dtGiRenggw8u7p86dWrasGFDqiTbt29PCxcuTGPHji2WwRFHHJGuueaaLn9g03LaR1kvdP/992eDBg3Kfv3rX2d///vfs+985zvZ8OHDs+bm5qwSTZs2Lbvzzjuz9evXZ88//3z2pS99KRszZkz29ttvd07zve99Lxs9enS2YsWK7Nlnn81OPfXUbPLkyVmlWrNmTXbYYYdlxx13XDZnzpzO2y2nLPvvf/+bHXroodl5552XrV69OnvllVeyxx57LPvnP//ZuZyWLFmS1dbWZg899FC2bt267Mwzz8zGjh2bvffee1mlWLx4cTZixIhs2bJl2caNG7OlS5dmQ4cOzW644YbOaSynfdMrA3TKKadks2fP7ry+ffv2bNSoUVlDQ0Po8+otXn/99fxXsGzlypXF9S1btmQDBw4sfkA6/OMf/yimWbVqVVZp3nrrrezII4/Mli9fnn3+85/vDJDl9IErr7wy++xnP/uRy6+9vT2rr6/PfvrTn3beli+76urq7L777ssqxRlnnJFdcMEFXW4766yzspkzZxZfW077rtcdgtu2bVtau3Ztscu/4x8oza+vWrUq9Ln1Fi0tLcW/Bx54YPFvvrzef//9Lsts3LhxxV8Tr8Rllh+KPOOMM7osj5zl9IFHHnkknXTSSenss88uDumecMIJ6fbbb+9cThs3bkxNTU1dll/+hyXzQ+GV9HqaPHlyWrFiRXr55ZeL6+vWrUtPPvlkOv3004vrltO+63V/DfvNN98sjr3W1dV1uT2//tJLL6VKl39cRf6exmmnnZbGjx9f3JZvLAYNGpSGDx++0zLL76sk999/f3ruuefSM888s9N9ltMHXnnllXTLLbek+fPnpx/+8IfFsrr00kuL19CsWbM6XzO7+hmspNfTVVddVfxV/vyXuf3226/YLi1evDjNnDmzuN9y6ocBYve/3a9fv774TYyu8s9EmjNnTlq+fHkxeIWP/iUm3wO67rrriuv5HlD+mrr11luLAPGBBx54IN1zzz3p3nvvTcccc0x6/vnni1/+8s+4sZy6R687BHfQQQcVv218eARXfr2+vj5VsosvvjgtW7YsPfHEE10+ZTBfLvmhyy1btlT0MssPsb3++uvpxBNPTFVVVcVl5cqV6cYbbyy+zn+Dt5xSMbLt6KOP7rLsjjrqqLRp06bi647XTKX/DF5xxRXFXtA555xTjBL81re+lebNm1eMSs1ZTv0wQPlhgAkTJhTHXnf8jS2/PmnSpFSJ8sEieXwefPDB9PjjjxfDQneUL6+BAwd2WWb5MO18g1JJy2zKlCnphRdeKH5T7bjkv+nnh0w6vracUnH49sPD+PP3OQ499NDi6/z1lW9cd3w95YeiVq9eXVGvp3fffXenT/PMfznOt0c5y6kbZL10GHY+4uauu+7KXnzxxey73/1uMQy7qakpq0QXXXRRMST2T3/6U/af//yn8/Luu+92GV6cD81+/PHHi2HYkyZNKi6VbsdRcDnL6YMh6lVVVcUw4w0bNmT33HNP9qlPfSq7++67uwwvzn/mHn744exvf/tb9tWvfrXihmHPmjUr+8xnPtM5DPt3v/tddtBBB2U/+MEPOqexnPZNrwxQ7pe//GWxQc3PB8qHZT/99NNZpcp/T9jVJT83qEO+Yfj+97+fHXDAAcXG5Gtf+1oRqUr34QBZTh949NFHs/Hjxxe/6I0bNy677bbbuiy3fIjxwoULs7q6umKaKVOmZI2NjVklaW1tLV47+XZo8ODB2eGHH55dffXVWVtbW+c0ltO+8XlAAITode8BAVAZBAiAEAIEQAgBAiCEAAEQQoAACCFAAIQQIABCCBAAIQQIgBACBECK8H8mFydYBtpi/gAAAABJRU5ErkJggg==", |
| 85 | + "text/plain": [ |
| 86 | + "<Figure size 640x480 with 1 Axes>" |
| 87 | + ] |
| 88 | + }, |
| 89 | + "metadata": {}, |
| 90 | + "output_type": "display_data" |
| 91 | + } |
| 92 | + ], |
| 93 | + "source": [ |
| 94 | + "# Visualize a small 2D cutout\n", |
| 95 | + "plt.imshow(array[0,0:100,0:100], cmap='gray', vmin=0, vmax=255)\n", |
| 96 | + "plt.show()" |
| 97 | + ] |
| 98 | + }, |
| 99 | + { |
| 100 | + "cell_type": "code", |
| 101 | + "execution_count": 5, |
| 102 | + "id": "e09ff8dd-8b4e-458e-8dda-9afc479e0a75", |
| 103 | + "metadata": {}, |
| 104 | + "outputs": [], |
| 105 | + "source": [ |
| 106 | + "# Pass the array into ngff-zarr to add ngff metadata\n", |
| 107 | + "image = nz.to_ngff_image(array, dims=['z','y','x'])" |
| 108 | + ] |
| 109 | + }, |
| 110 | + { |
| 111 | + "cell_type": "code", |
| 112 | + "execution_count": 6, |
| 113 | + "id": "07ce155e-46ac-46e7-b039-205f18f33e7d", |
| 114 | + "metadata": {}, |
| 115 | + "outputs": [], |
| 116 | + "source": [ |
| 117 | + "# Create a multiscales version\n", |
| 118 | + "multiscale_image = nz.to_multiscales(image,\n", |
| 119 | + " scale_factors=[2,4],\n", |
| 120 | + " chunks=64)" |
| 121 | + ] |
| 122 | + }, |
| 123 | + { |
| 124 | + "cell_type": "code", |
| 125 | + "execution_count": 7, |
| 126 | + "id": "8b2f7732-6b8e-412d-9b5d-883eca8cf25a", |
| 127 | + "metadata": { |
| 128 | + "editable": true, |
| 129 | + "slideshow": { |
| 130 | + "slide_type": "" |
| 131 | + }, |
| 132 | + "tags": [] |
| 133 | + }, |
| 134 | + "outputs": [ |
| 135 | + { |
| 136 | + "name": "stdout", |
| 137 | + "output_type": "stream", |
| 138 | + "text": [ |
| 139 | + "Saving ngff to gs://ome-2025-test-data/ex1/out ...\n", |
| 140 | + "Done.\n" |
| 141 | + ] |
| 142 | + } |
| 143 | + ], |
| 144 | + "source": [ |
| 145 | + "checker_url = f'{gcs_base}/checkerboard.zarr'\n", |
| 146 | + "print(f\"Saving ngff to {gcs_base} ...\")\n", |
| 147 | + "nz.to_ngff_zarr(checker_url,\n", |
| 148 | + " multiscale_image, chunks_per_shard=8,\n", |
| 149 | + " version=\"0.5\")\n", |
| 150 | + "print(\"Done.\")" |
| 151 | + ] |
| 152 | + }, |
| 153 | + { |
| 154 | + "cell_type": "code", |
| 155 | + "execution_count": 8, |
| 156 | + "id": "1e45ae1d-d0a3-4d61-bd9b-df2f510b5f22", |
| 157 | + "metadata": {}, |
| 158 | + "outputs": [ |
| 159 | + { |
| 160 | + "name": "stdout", |
| 161 | + "output_type": "stream", |
| 162 | + "text": [ |
| 163 | + "\n", |
| 164 | + "\n", |
| 165 | + "Updates are available for some Google Cloud CLI components. To install them,\n", |
| 166 | + "please run:\n", |
| 167 | + " $ gcloud components update\n", |
| 168 | + "\n", |
| 169 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/:\n", |
| 170 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/zarr.json\n", |
| 171 | + "\n", |
| 172 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/:\n", |
| 173 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/zarr.json\n", |
| 174 | + "\n", |
| 175 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/:\n", |
| 176 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/zarr.json\n", |
| 177 | + "\n", |
| 178 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/:\n", |
| 179 | + "\n", |
| 180 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/:\n", |
| 181 | + "\n", |
| 182 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/0/:\n", |
| 183 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/0/0\n", |
| 184 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/0/1\n", |
| 185 | + "\n", |
| 186 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/1/:\n", |
| 187 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/1/0\n", |
| 188 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale0/image/c/0/1/1\n", |
| 189 | + "\n", |
| 190 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/:\n", |
| 191 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/zarr.json\n", |
| 192 | + "\n", |
| 193 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/image/:\n", |
| 194 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/image/zarr.json\n", |
| 195 | + "\n", |
| 196 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/image/c/:\n", |
| 197 | + "\n", |
| 198 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/image/c/0/:\n", |
| 199 | + "\n", |
| 200 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/image/c/0/0/:\n", |
| 201 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale1/image/c/0/0/0\n", |
| 202 | + "\n", |
| 203 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/:\n", |
| 204 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/zarr.json\n", |
| 205 | + "\n", |
| 206 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/image/:\n", |
| 207 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/image/zarr.json\n", |
| 208 | + "\n", |
| 209 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/image/c/:\n", |
| 210 | + "\n", |
| 211 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/image/c/0/:\n", |
| 212 | + "\n", |
| 213 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/image/c/0/0/:\n", |
| 214 | + "gs://ome-2025-test-data/ex1/out/checkerboard.zarr/scale2/image/c/0/0/0\n" |
| 215 | + ] |
| 216 | + } |
| 217 | + ], |
| 218 | + "source": [ |
| 219 | + "# List the files generated\n", |
| 220 | + "!gsutil ls -r $checker_url" |
| 221 | + ] |
| 222 | + }, |
| 223 | + { |
| 224 | + "cell_type": "markdown", |
| 225 | + "id": "99434b9f-6d7a-4bdc-aa2a-49a9e078a2a6", |
| 226 | + "metadata": {}, |
| 227 | + "source": [ |
| 228 | + "## Web-based viewers\n", |
| 229 | + "\n", |
| 230 | + "Once data has been saved to the cloud, we can immediately use web based viewers to examine.\n", |
| 231 | + "\n", |
| 232 | + "_Note_: This assumes that the storage layer has public object access enabled and CORS heaeders set." |
| 233 | + ] |
| 234 | + }, |
| 235 | + { |
| 236 | + "cell_type": "code", |
| 237 | + "execution_count": 9, |
| 238 | + "id": "0d38fb48-0402-4044-941f-e677dfe1b40e", |
| 239 | + "metadata": {}, |
| 240 | + "outputs": [], |
| 241 | + "source": [ |
| 242 | + "# Let's view the data\n", |
| 243 | + "# Rewrite the gcs url to it's public https form\n", |
| 244 | + "https_url = checker_url.replace(\"gs://\", \"https://storage.googleapis.com/\")" |
| 245 | + ] |
| 246 | + }, |
| 247 | + { |
| 248 | + "cell_type": "code", |
| 249 | + "execution_count": 10, |
| 250 | + "id": "18704cee-b661-4fab-af00-14dc6816c23a", |
| 251 | + "metadata": {}, |
| 252 | + "outputs": [ |
| 253 | + { |
| 254 | + "data": { |
| 255 | + "text/html": [ |
| 256 | + "<a href=\"https://ome.github.io/ome-ngff-validator/?source=https://storage.googleapis.com/ome-2025-test-data/ex1/out/checkerboard.zarr\">View NGFF Validator</a>" |
| 257 | + ], |
| 258 | + "text/plain": [ |
| 259 | + "<IPython.core.display.HTML object>" |
| 260 | + ] |
| 261 | + }, |
| 262 | + "metadata": {}, |
| 263 | + "output_type": "display_data" |
| 264 | + } |
| 265 | + ], |
| 266 | + "source": [ |
| 267 | + "# OME NGFF Validator\n", |
| 268 | + "validator_url = f\"https://ome.github.io/ome-ngff-validator/?source={https_url}\"\n", |
| 269 | + "display(HTML(f'<a href=\"{validator_url}\">View NGFF Validator</a>'))" |
| 270 | + ] |
| 271 | + }, |
| 272 | + { |
| 273 | + "cell_type": "code", |
| 274 | + "execution_count": 11, |
| 275 | + "id": "021a9a97-03b0-440d-9def-51aaaf308bbf", |
| 276 | + "metadata": {}, |
| 277 | + "outputs": [ |
| 278 | + { |
| 279 | + "data": { |
| 280 | + "text/html": [ |
| 281 | + "<a href=\"https://biongff.github.io/biongff-viewer/?source=https://storage.googleapis.com/ome-2025-test-data/ex1/out/checkerboard.zarr\">View in biongff</a>" |
| 282 | + ], |
| 283 | + "text/plain": [ |
| 284 | + "<IPython.core.display.HTML object>" |
| 285 | + ] |
| 286 | + }, |
| 287 | + "metadata": {}, |
| 288 | + "output_type": "display_data" |
| 289 | + } |
| 290 | + ], |
| 291 | + "source": [ |
| 292 | + "# biongff: https://github.com/BioNGFF/biongff-viewer\n", |
| 293 | + "biongff_url = f\"https://biongff.github.io/biongff-viewer/?source={https_url}\"\n", |
| 294 | + "display(HTML(f'<a href=\"{biongff_url}\">View in biongff</a>'))" |
| 295 | + ] |
| 296 | + }, |
| 297 | + { |
| 298 | + "cell_type": "code", |
| 299 | + "execution_count": 12, |
| 300 | + "id": "c439c679-2d3c-4435-812b-12a427ae41ab", |
| 301 | + "metadata": {}, |
| 302 | + "outputs": [ |
| 303 | + { |
| 304 | + "data": { |
| 305 | + "text/html": [ |
| 306 | + "<a href=\"https://neuroglancer-demo.appspot.com#!%7B%22layers%22:%5B%7B%22type%22:%22image%22,%22source%22:%22gs://ome-2025-test-data/ex1/out/checkerboard.zarr/%7Czarr3:%22,%22tab%22:%22source%22,%22name%22:%22checkerboard.zarr%22%7D%5D%7D\">View in neuroglancer</a>" |
| 307 | + ], |
| 308 | + "text/plain": [ |
| 309 | + "<IPython.core.display.HTML object>" |
| 310 | + ] |
| 311 | + }, |
| 312 | + "metadata": {}, |
| 313 | + "output_type": "display_data" |
| 314 | + } |
| 315 | + ], |
| 316 | + "source": [ |
| 317 | + "# neuroglancer: generate a state and encode it into the url\n", |
| 318 | + "ng_state = {\n", |
| 319 | + " \"layers\": [\n", |
| 320 | + " {\n", |
| 321 | + " \"type\": \"image\",\n", |
| 322 | + " \"source\": \"gs://ome-2025-test-data/ex1/out/checkerboard.zarr/|zarr3:\",\n", |
| 323 | + " \"tab\": \"source\",\n", |
| 324 | + " \"name\": \"checkerboard.zarr\"\n", |
| 325 | + " }\n", |
| 326 | + " ]\n", |
| 327 | + "}\n", |
| 328 | + "ng_url = neuroglancer.url_state.to_url(ng_state)\n", |
| 329 | + "display(HTML(f'<a href=\"{ng_url}\">View in neuroglancer</a>'))" |
| 330 | + ] |
| 331 | + } |
| 332 | + ], |
| 333 | + "metadata": { |
| 334 | + "kernelspec": { |
| 335 | + "display_name": "Python 3 (ipykernel)", |
| 336 | + "language": "python", |
| 337 | + "name": "python3" |
| 338 | + }, |
| 339 | + "language_info": { |
| 340 | + "codemirror_mode": { |
| 341 | + "name": "ipython", |
| 342 | + "version": 3 |
| 343 | + }, |
| 344 | + "file_extension": ".py", |
| 345 | + "mimetype": "text/x-python", |
| 346 | + "name": "python", |
| 347 | + "nbconvert_exporter": "python", |
| 348 | + "pygments_lexer": "ipython3", |
| 349 | + "version": "3.13.7" |
| 350 | + } |
| 351 | + }, |
| 352 | + "nbformat": 4, |
| 353 | + "nbformat_minor": 5 |
| 354 | +} |
0 commit comments