Viewer pyramidal pour lames virtuelles au format OME-Zarr avec support des archives ZIP et des annotations GeoJSON.
Pathologie numérique — Projet open source
- Navigation pyramidale : Zoom fluide multi-niveaux avec cache de tuiles LRU
- Support ZIP : Lecture directe des archives
.zarr.zipet.ome.zarr.zip - Double mode d'affichage : Liste arborescente ou grille de vignettes
- Vignettes automatiques : Génération asynchrone des previews
- Annotations GeoJSON : Affichage des polygones, points et lignes avec couleurs par classe
- Centrage automatique : L'image s'ouvre centrée dans la vue
- Contraintes de navigation : Impossible de sortir des limites de l'image
Ubuntu/Debian :
sudo apt install python3-tkmacOS / Windows : tkinter est inclus avec Python.
pip install -r requirements.txtOu manuellement :
pip install zarr numpy Pillowpython viewer3.pyL'interface est divisée en deux panneaux :
| Panneau gauche | Panneau droit |
|---|---|
| Liste des fichiers | Viewer d'image |
| Boutons de navigation | Contrôles de zoom |
| Mode liste/vignettes | Barre de statut |
- Dossier racine : Cliquer sur
📂 Dossierpour scanner un répertoire - Fichier unique : Cliquer sur
📄 Ouvrir fichierpour un seul OME-Zarr - Double-clic : Sur un fichier dans la liste pour le charger
| Action | Commande |
|---|---|
| Déplacer | Clic gauche + glisser |
| Zoom avant | Molette ↑ |
| Zoom arrière | Molette ↓ |
| Centrer | Bouton ⌂ ou touche Home |
| Changer niveau | Menu déroulant "Niveau" |
| Touche | Action |
|---|---|
Home |
Centrer la vue |
F5 |
Rafraîchir la liste |
A |
Afficher/masquer les annotations |
Le viewer détecte automatiquement :
- Zarr v2 :
.zgroup,.zattrs - Zarr v3 :
zarr.json - Extensions :
.zarr,.ome.zarr
Formats reconnus :
*.zarr.zip*.ome.zarr.zip- Tout ZIP contenant "zarr" dans le nom
Le viewer charge les annotations depuis :
- Attributs Zarr :
zarr_store.attrs['annotations'] - Fichiers GeoJSON :
*.geojsonou*.jsondans le dossier Zarr - Dans les ZIP : Fichiers JSON/GeoJSON intégrés
Format GeoJSON supporté :
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[x1, y1], [x2, y2], ...]]
},
"properties": {
"level_id": 2,
"class_name": "villosité",
"color": "#8BC34A"
}
}
]
}Arborescence classique avec icônes :
📁Dossier🔬Fichier OME-Zarr📦Archive ZIP
Grille de previews générées automatiquement depuis le niveau le plus bas de la pyramide.
Le bouton 🔍 affiche une fenêtre de diagnostic montrant :
- Contenu du dossier scanné
- Marqueurs Zarr détectés (
.zgroup,.zattrs,zarr.json) - Fichiers OME-Zarr validés
Le viewer utilise un cache LRU de 100 tuiles par défaut. Modifiable dans le code :
self.tile_cache = TileCache(max_size=100)self.thumbnail_size = 80 # pixelsviewer3.py
├── TileCache # Cache LRU pour les tuiles
└── OMEZarrViewer # Application principale
├── _setup_ui() # Construction de l'interface
├── _scan_zarr_files() # Détection des OME-Zarr
├── _load_zarr() # Chargement (dossier ou ZIP)
├── _render() # Rendu de l'image
├── _draw_annotations() # Superposition des annotations
└── _generate_thumbnail() # Création des previews
Ce viewer est compatible avec les fichiers générés par :
mrxszarr6.py(convertisseur MRXS → OME-Zarr)omezarr_annotator2.py(annotations hiérarchiques)
Les annotations créées avec l'annotateur s'affichent automatiquement avec leurs couleurs de classe.
| Opération | Temps typique |
|---|---|
| Scan dossier (non-récursif) | < 1s |
| Chargement OME-Zarr | < 500ms |
| Chargement ZIP | < 1s |
| Génération vignette | ~200ms |
| Rendu tuile (cache miss) | ~50ms |
| Rendu tuile (cache hit) | < 1ms |
- Vérifier que les fichiers ont l'extension
.zarrou.ome.zarr - Utiliser le bouton
🔍pour diagnostiquer la structure - Le scan est non-récursif pour éviter les dossiers MRXS volumineux
- Vérifier que la checkbox
📝 Annotationsest cochée - Appuyer sur
Apour basculer l'affichage - Les annotations doivent être au format GeoJSON valide
Le nom doit contenir "zarr" :
- ✅
lame.ome.zarr.zip - ✅
lame.zarr.zip - ✅
lame_zarr.zip - ❌
lame.zip
Projet open source développé sur le temps libre de l'auteur, qui luttait contre l'attrait de son chat pour le clavier. 🐱⌨️
MIT License - Utilisation libre.