spacr 0.9.4__tar.gz → 0.9.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spacr-0.9.4/spacr.egg-info → spacr-0.9.7}/PKG-INFO +2 -1
- {spacr-0.9.4 → spacr-0.9.7}/setup.py +2 -1
- {spacr-0.9.4 → spacr-0.9.7}/spacr/core.py +29 -43
- {spacr-0.9.4 → spacr-0.9.7}/spacr/gui_core.py +97 -6
- {spacr-0.9.4 → spacr-0.9.7}/spacr/io.py +44 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/plot.py +48 -1
- {spacr-0.9.4 → spacr-0.9.7}/spacr/settings.py +24 -7
- {spacr-0.9.4 → spacr-0.9.7}/spacr/spacr_cellpose.py +59 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/utils.py +102 -3
- {spacr-0.9.4 → spacr-0.9.7/spacr.egg-info}/PKG-INFO +2 -1
- {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/requires.txt +1 -0
- {spacr-0.9.4 → spacr-0.9.7}/LICENSE +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/MANIFEST.in +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/README.rst +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/deploy_docs.sh +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/.doctrees/environment.pickle +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_images/logo_spacr.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/SetupDict.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/BasePredictor.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/BaseTrainer.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/Baseline/Predictor.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/Baseline/Trainer.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/Baseline/utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/EnsemblePredictor.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/Predictor.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/Trainer.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/evaluate.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/generate_mapping.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/main.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/predict.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_annotate.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_classify.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_make_masks.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_mask.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_measure.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_sequencing.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_umap.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/chat_bot.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/core.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/deep_spacr.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui_core.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui_elements.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui_utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/io.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/logger.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/measure.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/mediar.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/ml.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/plot.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/sequencing.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/settings.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/sim.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/sp_stats.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/spacr_cellpose.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/submodules.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/timelapse.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/toxo.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/version.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/custom/CellAware.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/custom/LoadImage.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/custom/NormalizeImage.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/datasetter.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/transforms.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/measures.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/models/MEDIARFormer.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/utils.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/SetupDict/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/BasePredictor/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/BaseTrainer/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/Predictor/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/Trainer/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/EnsemblePredictor/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/Predictor/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/Trainer/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/evaluate/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/generate_mapping/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/main/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/predict/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_annotate/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_classify/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_make_masks/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_mask/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_measure/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_sequencing/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_umap/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/chat_bot/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/core/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/deep_spacr/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui_core/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui_elements/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui_utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/io/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/logger/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/measure/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/mediar/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/ml/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/openai/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/plot/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/sequencing/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/settings/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/sim/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/sp_stats/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/spacr_cellpose/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/submodules/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/timelapse/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/toxo/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/version/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/CellAware/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/LoadImage/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/NormalizeImage/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/datasetter/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/transforms/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/measures/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/models/MEDIARFormer/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/models/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/utils/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/index.rst.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/basic.css +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/badge_only.css +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold-italic.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal-italic.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/theme.css +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/doctools.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/documentation_options.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/file.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/graphviz.css +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/js/badge_only.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/js/theme.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/js/versions.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/language_data.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/logo_spacr.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/minus.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/plus.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/pygments.css +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/searchtools.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/_static/sphinx_highlight.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/SetupDict/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/BasePredictor/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/BaseTrainer/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/Predictor/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/Trainer/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/EnsemblePredictor/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/Predictor/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/Trainer/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/evaluate/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/generate_mapping/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/main/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/predict/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_annotate/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_classify/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_make_masks/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_mask/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_measure/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_sequencing/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_umap/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/chat_bot/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/core/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/deep_spacr/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui_core/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui_elements/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui_utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/io/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/logger/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/measure/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/mediar/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/ml/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/openai/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/plot/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/sequencing/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/settings/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/sim/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/sp_stats/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/spacr_cellpose/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/submodules/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/timelapse/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/toxo/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/version/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/CellAware/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/LoadImage/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/NormalizeImage/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/datasetter/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/transforms/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/measures/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/models/MEDIARFormer/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/models/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/utils/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/genindex.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/objects.inv +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/py-modindex.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/OFL.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/README.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/abort.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/classify.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/default.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/download.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/map_barcodes.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/mask.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/measure.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/regression.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/run.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/settings.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/001_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/002_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/003_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/004_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-03-41.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-07-50.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-06.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-19.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-37.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-55.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-03.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-20.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-34.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-43.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-56.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-10-25.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-04.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-11.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-18.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-27.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/gui.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_00_code.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_code.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_00_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_02_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_04_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_06_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_08_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_19_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_21_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_23_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_34_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_36_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_38_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_49_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_51_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_53_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_55_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_57_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_59_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_61_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_63_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_65_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_67_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_69_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_02_code.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/console_output.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/console_output.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img1.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img2.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img3.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img4.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img5.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/001_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/002_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/003_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/004_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_00_code.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_code.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_00_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_02_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_04_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_10_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_16_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_22_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_28_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_34_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_40_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_46_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_52_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_58_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_64_text.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_02_code.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/img1.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/img2.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/img3.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/001_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/002_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/003_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/004_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img1.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img2.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img3.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img4.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img5.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/001_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/002_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/003_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/004_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img1.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img2.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img3.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img4.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img5.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/001_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/002_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/003_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/004_placeholder.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img1.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img2.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img3.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img4.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img5.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/search.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/searchindex.js +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/source/_static/custom.css +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/source/_static/logo_spacr.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/source/conf.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/source/index.rst +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/1_mask_gen_gui.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/1_mask_gen_notebook.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/2_measure_gui.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/2_measure_notebook.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/3_classify_gui.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/3_classify_notebook.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/4_map_barcodes_gui.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/4_map_barcodes_notebook.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/5_regression_gui.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/5_regression_notebook.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/index.html +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/environment.yaml +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/fonts/OpenSans-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/requirements.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/rtd_trigger.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/setup.cfg +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/setup_docs.sh +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/__init__.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/__main__.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_annotate.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_classify.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_make_masks.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_mask.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_measure.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_sequencing.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/app_umap.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/chat_bot.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/deep_spacr.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/gui.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/gui_elements.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/gui_utils.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/logger.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/measure.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/ml.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/data/lopit.csv +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/data/toxoplasma_metadata.csv +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/OFL.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/README.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/abort.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/annotate.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/cellpose_all.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/cellpose_masks.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/classify.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/convert.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/default.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/download.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/flow_chart_v3.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/logo.pdf +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/logo_spacr.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/logo_spacr_1.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/make_masks.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/map_barcodes.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/mask.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/measure.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/ml_analyze.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/plaque.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/recruitment.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/regression.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/run.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/sequencing.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/settings.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/train_cellpose.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/umap.png +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/sequencing.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/sim.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/sp_stats.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/submodules.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/timelapse.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/toxo.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr/version.py +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/SOURCES.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/dependency_links.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/entry_points.txt +0 -0
- {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: spacr
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.7
|
4
4
|
Summary: Spatial phenotype analysis of crisp screens (SpaCr)
|
5
5
|
Home-page: https://github.com/EinarOlafsson/spacr
|
6
6
|
Author: Einar Birnir Olafsson
|
@@ -14,6 +14,7 @@ Requires-Dist: numpy<2.0,>=1.26.4
|
|
14
14
|
Requires-Dist: pandas<3.0,>=2.2.1
|
15
15
|
Requires-Dist: scipy<2.0,>=1.12.0
|
16
16
|
Requires-Dist: cellpose<5.0,>=4.0
|
17
|
+
Requires-Dist: segment-anything
|
17
18
|
Requires-Dist: scikit-image<1.0,>=0.22.0
|
18
19
|
Requires-Dist: scikit-learn<2.0,>=1.4.1
|
19
20
|
Requires-Dist: scikit-posthocs<0.20,>=0.10.0
|
@@ -10,6 +10,7 @@ dependencies = [
|
|
10
10
|
'pandas>=2.2.1,<3.0',
|
11
11
|
'scipy>=1.12.0,<2.0',
|
12
12
|
'cellpose>=4.0,<5.0', # changed max to 5 from 4 3.0.6
|
13
|
+
'segment-anything',
|
13
14
|
'scikit-image>=0.22.0,<1.0',
|
14
15
|
'scikit-learn>=1.4.1,<2.0',
|
15
16
|
'scikit-posthocs>=0.10.0, <0.20',
|
@@ -71,7 +72,7 @@ dependencies = [
|
|
71
72
|
'huggingface-hub>=0.24.0,<0.25'
|
72
73
|
]
|
73
74
|
|
74
|
-
VERSION = "0.9.
|
75
|
+
VERSION = "0.9.7"
|
75
76
|
|
76
77
|
setup(
|
77
78
|
name="spacr",
|
@@ -196,11 +196,12 @@ def preprocess_generate_masks(settings):
|
|
196
196
|
|
197
197
|
def generate_cellpose_masks(src, settings, object_type):
|
198
198
|
|
199
|
-
from .utils import _masks_to_masks_stack, _filter_cp_masks, _get_cellpose_batch_size, _get_cellpose_channels, _choose_model,
|
199
|
+
from .utils import _masks_to_masks_stack, _filter_cp_masks, _get_cellpose_batch_size, _get_cellpose_channels, _choose_model, all_elements_match, prepare_batch_for_segmentation
|
200
200
|
from .io import _create_database, _save_object_counts_to_database, _check_masks, _get_avg_object_size
|
201
201
|
from .timelapse import _npz_to_movie, _btrack_track_cells, _trackpy_track_cells
|
202
|
-
from .plot import
|
202
|
+
from .plot import plot_cellpose4_output
|
203
203
|
from .settings import set_default_settings_preprocess_generate_masks, _get_object_settings
|
204
|
+
from .spacr_cellpose import parse_cellpose4_output
|
204
205
|
|
205
206
|
gc.collect()
|
206
207
|
if not torch.cuda.is_available():
|
@@ -239,9 +240,12 @@ def generate_cellpose_masks(src, settings, object_type):
|
|
239
240
|
cellpose_channels = _get_cellpose_channels(src, settings['nucleus_channel'], settings['pathogen_channel'], settings['cell_channel'])
|
240
241
|
if settings['verbose']:
|
241
242
|
print(cellpose_channels)
|
242
|
-
|
243
|
+
|
244
|
+
if object_type not in cellpose_channels:
|
245
|
+
raise ValueError(f"Error: No channels were specified for object_type '{object_type}'. Check your settings.")
|
243
246
|
channels = cellpose_channels[object_type]
|
244
|
-
|
247
|
+
|
248
|
+
#cellpose_batch_size = _get_cellpose_batch_size()
|
245
249
|
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
246
250
|
|
247
251
|
if object_type == 'pathogen' and not settings['pathogen_model'] is None:
|
@@ -249,7 +253,8 @@ def generate_cellpose_masks(src, settings, object_type):
|
|
249
253
|
|
250
254
|
model = _choose_model(model_name, device, object_type=object_type, restore_type=None, object_settings=object_settings)
|
251
255
|
|
252
|
-
chans = [2, 1] if model_name == 'cyto2' else [0,0] if model_name == 'nucleus' else [2,0] if model_name == 'cyto' else [2, 0] if model_name == 'cyto3' else [2, 0]
|
256
|
+
#chans = [2, 1] if model_name == 'cyto2' else [0,0] if model_name == 'nucleus' else [2,0] if model_name == 'cyto' else [2, 0] if model_name == 'cyto3' else [2, 0]
|
257
|
+
|
253
258
|
paths = [os.path.join(src, file) for file in os.listdir(src) if file.endswith('.npz')]
|
254
259
|
|
255
260
|
count_loc = os.path.dirname(src)+'/measurements/measurements.db'
|
@@ -257,6 +262,7 @@ def generate_cellpose_masks(src, settings, object_type):
|
|
257
262
|
_create_database(count_loc)
|
258
263
|
|
259
264
|
average_sizes = []
|
265
|
+
average_count = []
|
260
266
|
time_ls = []
|
261
267
|
|
262
268
|
for file_index, path in enumerate(paths):
|
@@ -310,49 +316,30 @@ def generate_cellpose_masks(src, settings, object_type):
|
|
310
316
|
continue
|
311
317
|
|
312
318
|
batch = prepare_batch_for_segmentation(batch)
|
313
|
-
|
314
|
-
|
315
|
-
#if settings['denoise']:
|
316
|
-
# if object_type == 'cell':
|
317
|
-
# model_type = "denoise_cyto3"
|
318
|
-
# elif object_type == 'nucleus':
|
319
|
-
# model_type = "denoise_nucleus"
|
320
|
-
# else:
|
321
|
-
# raise ValueError(f"No denoise model for object_type: {object_type}")
|
322
|
-
# dn = denoise.DenoiseModel(model_type=model_type, gpu=device)
|
323
|
-
# batch = dn.eval(imgs=batch, channels=chans, diameter=object_settings['diameter'])
|
319
|
+
batch_list = [batch[i] for i in range(batch.shape[0])]
|
324
320
|
|
325
321
|
if timelapse:
|
326
322
|
movie_path = os.path.join(os.path.dirname(src), 'movies')
|
327
323
|
os.makedirs(movie_path, exist_ok=True)
|
328
324
|
save_path = os.path.join(movie_path, f'timelapse_{object_type}_{name}.mp4')
|
329
325
|
_npz_to_movie(batch, batch_filenames, save_path, fps=2)
|
330
|
-
|
331
|
-
output = model.eval(x=
|
332
|
-
batch_size=
|
326
|
+
|
327
|
+
output = model.eval(x=batch_list,
|
328
|
+
batch_size=batch_size,
|
333
329
|
normalize=False,
|
334
|
-
|
335
|
-
|
330
|
+
channel_axis=-1,
|
331
|
+
channels=channels,
|
336
332
|
diameter=object_settings['diameter'],
|
337
333
|
flow_threshold=flow_threshold,
|
338
334
|
cellprob_threshold=cellprob_threshold,
|
339
335
|
rescale=None,
|
340
336
|
resample=object_settings['resample'])
|
341
|
-
|
342
|
-
|
343
|
-
masks, flows, _, _ = output
|
344
|
-
elif len(output) == 3:
|
345
|
-
masks, flows, _ = output
|
346
|
-
else:
|
347
|
-
raise ValueError(f"Unexpected number of return values from model.eval(). Expected 3 or 4, got {len(output)}")
|
337
|
+
|
338
|
+
masks, flows, _, _, _ = parse_cellpose4_output(output)
|
348
339
|
|
349
340
|
if timelapse:
|
350
341
|
if settings['plot']:
|
351
|
-
|
352
|
-
if idx == 0:
|
353
|
-
num_objects = mask_object_count(mask)
|
354
|
-
print(f'Number of objects: {num_objects}')
|
355
|
-
plot_masks(batch=image, masks=mask, flows=flow, cmap='inferno', figuresize=figuresize, nr=1, file_type='.npz', print_object_number=True)
|
342
|
+
plot_cellpose4_output(batch_list, masks, flows, cmap='inferno', figuresize=figuresize, nr=1, print_object_number=True)
|
356
343
|
|
357
344
|
_save_object_counts_to_database(masks, object_type, batch_filenames, count_loc, added_string='_timelapse')
|
358
345
|
if object_type in timelapse_objects:
|
@@ -431,24 +418,23 @@ def generate_cellpose_masks(src, settings, object_type):
|
|
431
418
|
mask_stack = _masks_to_masks_stack(masks)
|
432
419
|
|
433
420
|
if settings['plot']:
|
434
|
-
|
435
|
-
if idx == 0:
|
436
|
-
num_objects = mask_object_count(mask)
|
437
|
-
print(f'Number of objects, : {num_objects}')
|
438
|
-
plot_masks(batch=image, masks=mask, flows=flow, cmap='inferno', figuresize=figuresize, nr=1, file_type='.npz', print_object_number=True)
|
421
|
+
plot_cellpose4_output(batch_list, masks, flows, cmap='inferno', figuresize=figuresize, nr=1, print_object_number=True)
|
439
422
|
|
440
423
|
if not np.any(mask_stack):
|
441
|
-
average_obj_size = 0
|
424
|
+
avg_num_objects_per_image, average_obj_size = 0, 0
|
442
425
|
else:
|
443
|
-
average_obj_size = _get_avg_object_size(mask_stack)
|
444
|
-
|
426
|
+
avg_num_objects_per_image, average_obj_size = _get_avg_object_size(mask_stack)
|
427
|
+
|
428
|
+
average_count.append(avg_num_objects_per_image)
|
445
429
|
average_sizes.append(average_obj_size)
|
446
430
|
overall_average_size = np.mean(average_sizes) if len(average_sizes) > 0 else 0
|
447
|
-
|
431
|
+
overall_average_count = np.mean(average_count) if len(average_count) > 0 else 0
|
432
|
+
print(f'Found {overall_average_count} {object_type}/FOV. average size: {overall_average_size:.3f} px2')
|
448
433
|
|
449
434
|
if not timelapse:
|
450
435
|
if settings['plot']:
|
451
|
-
|
436
|
+
plot_cellpose4_output(batch_list, masks, flows, cmap='inferno', figuresize=figuresize, nr=batch_size)
|
437
|
+
|
452
438
|
if settings['save']:
|
453
439
|
for mask_index, mask in enumerate(mask_stack):
|
454
440
|
output_filename = os.path.join(output_folder, batch_filenames[mask_index])
|
@@ -103,6 +103,11 @@ def display_figure(fig):
|
|
103
103
|
new_canvas = FigureCanvasTkAgg(fig, master=canvas_widget.master)
|
104
104
|
new_canvas.draw()
|
105
105
|
new_canvas.get_tk_widget().grid(row=0, column=0, sticky="nsew")
|
106
|
+
|
107
|
+
# Store existing text labels on each axis for zoom visibility control (new feature)
|
108
|
+
for ax in fig.get_axes():
|
109
|
+
texts = ax.texts
|
110
|
+
ax._label_annotations = texts
|
106
111
|
|
107
112
|
# Update the global canvas and canvas_widget references
|
108
113
|
canvas = new_canvas
|
@@ -169,14 +174,100 @@ def display_figure(fig):
|
|
169
174
|
else:
|
170
175
|
#flash_feedback("right")
|
171
176
|
show_next_figure()
|
177
|
+
|
178
|
+
def zoom(event):
|
179
|
+
# Define zoom factors
|
180
|
+
zoom_in_factor = 1 / 1.2
|
181
|
+
zoom_out_factor = 1.2
|
182
|
+
|
183
|
+
if event.num == 4 or (hasattr(event, 'delta') and event.delta > 0):
|
184
|
+
factor = zoom_in_factor
|
185
|
+
elif event.num == 5 or (hasattr(event, 'delta') and event.delta < 0):
|
186
|
+
factor = zoom_out_factor
|
187
|
+
else:
|
188
|
+
return
|
189
|
+
|
190
|
+
for ax in canvas.figure.get_axes():
|
191
|
+
# Convert canvas pixel (event.x, event.y) to axis data coordinates
|
192
|
+
# EVEN IF the mouse is over a different axis, we use the same pixel to data mapping for each
|
193
|
+
inv = ax.transData.inverted()
|
194
|
+
try:
|
195
|
+
data_x, data_y = inv.transform((event.x, event.y))
|
196
|
+
except ValueError:
|
197
|
+
continue # e.g. axis has no data
|
198
|
+
|
199
|
+
xlim = ax.get_xlim()
|
200
|
+
ylim = ax.get_ylim()
|
201
|
+
|
202
|
+
# Zoom around (data_x, data_y) in *that axis's* data space
|
203
|
+
new_xlim = [data_x - (data_x - xlim[0]) * factor,
|
204
|
+
data_x + (xlim[1] - data_x) * factor]
|
205
|
+
new_ylim = [data_y - (data_y - ylim[0]) * factor,
|
206
|
+
data_y + (ylim[1] - data_y) * factor]
|
207
|
+
|
208
|
+
ax.set_xlim(new_xlim)
|
209
|
+
ax.set_ylim(new_ylim)
|
210
|
+
|
211
|
+
# Clip text labels
|
212
|
+
for label in ax.texts:
|
213
|
+
label.set_clip_on(True)
|
214
|
+
|
215
|
+
# Update label visibility
|
216
|
+
if hasattr(ax, '_label_annotations'):
|
217
|
+
for label in ax._label_annotations:
|
218
|
+
x, y = label.get_position()
|
219
|
+
is_visible = (new_xlim[0] <= x <= new_xlim[1]) and (new_ylim[0] <= y <= new_ylim[1])
|
220
|
+
label.set_visible(is_visible)
|
221
|
+
|
222
|
+
canvas.draw_idle()
|
172
223
|
|
173
|
-
def
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
224
|
+
def zoom_v2(event):
|
225
|
+
# Define zoom factors
|
226
|
+
zoom_in_factor = 1 / 1.2
|
227
|
+
zoom_out_factor = 1.2
|
228
|
+
|
229
|
+
if event.num == 4 or (hasattr(event, 'delta') and event.delta > 0):
|
230
|
+
factor = zoom_in_factor
|
231
|
+
elif event.num == 5 or (hasattr(event, 'delta') and event.delta < 0):
|
232
|
+
factor = zoom_out_factor
|
233
|
+
else:
|
234
|
+
return
|
235
|
+
|
236
|
+
for ax in canvas.figure.get_axes():
|
237
|
+
# Translate mouse position to figure coordinates
|
238
|
+
mouse_x, mouse_y = event.x, event.y
|
239
|
+
inv = ax.transData.inverted()
|
240
|
+
data_x, data_y = inv.transform((mouse_x, mouse_y))
|
241
|
+
|
242
|
+
xlim = ax.get_xlim()
|
243
|
+
ylim = ax.get_ylim()
|
244
|
+
|
245
|
+
# Compute new limits centered on the mouse data position
|
246
|
+
new_width = (xlim[1] - xlim[0]) * factor
|
247
|
+
new_height = (ylim[1] - ylim[0]) * factor
|
248
|
+
|
249
|
+
new_xlim = [data_x - (data_x - xlim[0]) * factor,
|
250
|
+
data_x + (xlim[1] - data_x) * factor]
|
251
|
+
new_ylim = [data_y - (data_y - ylim[0]) * factor,
|
252
|
+
data_y + (ylim[1] - data_y) * factor]
|
253
|
+
|
254
|
+
ax.set_xlim(new_xlim)
|
255
|
+
ax.set_ylim(new_ylim)
|
256
|
+
|
257
|
+
# Clip all text labels to the axes area
|
258
|
+
for label in ax.texts:
|
259
|
+
label.set_clip_on(True)
|
260
|
+
|
261
|
+
# Update label visibility based on new limits
|
262
|
+
if hasattr(ax, '_label_annotations'):
|
263
|
+
for label in ax._label_annotations:
|
264
|
+
x, y = label.get_position()
|
265
|
+
is_visible = (new_xlim[0] <= x <= new_xlim[1]) and (new_ylim[0] <= y <= new_ylim[1])
|
266
|
+
label.set_visible(is_visible)
|
267
|
+
|
268
|
+
canvas.draw_idle()
|
178
269
|
|
179
|
-
def
|
270
|
+
def zoom_v1(event):
|
180
271
|
# Fixed zoom factors (adjust these if you want faster or slower zoom)
|
181
272
|
zoom_in_factor = 0.9 # When zooming in, ranges shrink by 10%
|
182
273
|
zoom_out_factor = 1.1 # When zooming out, ranges increase by 10%
|
@@ -1699,6 +1699,50 @@ def _check_masks(batch, batch_filenames, output_folder):
|
|
1699
1699
|
return np.array(filtered_batch), filtered_filenames
|
1700
1700
|
|
1701
1701
|
def _get_avg_object_size(masks):
|
1702
|
+
"""
|
1703
|
+
Calculate:
|
1704
|
+
- average number of objects per image
|
1705
|
+
- average object size over all objects
|
1706
|
+
|
1707
|
+
Parameters:
|
1708
|
+
masks (list): A list of 2D or 3D masks with labeled objects.
|
1709
|
+
|
1710
|
+
Returns:
|
1711
|
+
tuple:
|
1712
|
+
avg_num_objects_per_image (float)
|
1713
|
+
avg_object_size (float)
|
1714
|
+
"""
|
1715
|
+
per_image_counts = []
|
1716
|
+
all_areas = []
|
1717
|
+
|
1718
|
+
for idx, mask in enumerate(masks):
|
1719
|
+
if mask.ndim in [2, 3] and np.any(mask):
|
1720
|
+
props = measure.regionprops(mask)
|
1721
|
+
areas = [prop.area for prop in props]
|
1722
|
+
per_image_counts.append(len(areas))
|
1723
|
+
all_areas.extend(areas)
|
1724
|
+
else:
|
1725
|
+
per_image_counts.append(0)
|
1726
|
+
if not np.any(mask):
|
1727
|
+
print(f"Warning: Mask {idx} is empty.")
|
1728
|
+
elif mask.ndim not in [2, 3]:
|
1729
|
+
print(f"Warning: Mask {idx} has invalid dimension: {mask.ndim}")
|
1730
|
+
|
1731
|
+
# Average number of objects per image
|
1732
|
+
if per_image_counts:
|
1733
|
+
avg_num_objects_per_image = sum(per_image_counts) / len(per_image_counts)
|
1734
|
+
else:
|
1735
|
+
avg_num_objects_per_image = 0
|
1736
|
+
|
1737
|
+
# Average object size over all objects
|
1738
|
+
if all_areas:
|
1739
|
+
avg_object_size = sum(all_areas) / len(all_areas)
|
1740
|
+
else:
|
1741
|
+
avg_object_size = 0
|
1742
|
+
|
1743
|
+
return avg_num_objects_per_image, avg_object_size
|
1744
|
+
|
1745
|
+
def _get_avg_object_size_v1(masks):
|
1702
1746
|
"""
|
1703
1747
|
Calculate the average size of objects in a list of masks.
|
1704
1748
|
|
@@ -34,7 +34,6 @@ from collections import defaultdict
|
|
34
34
|
from matplotlib.gridspec import GridSpec
|
35
35
|
from matplotlib_venn import venn2
|
36
36
|
|
37
|
-
#filter_dict={'cell':[(0,100000), (0, 65000)],'nucleus':[(3000,100000), (1500, 65000)],'pathogen':[(500,100000), (0, 65000)]}
|
38
37
|
def plot_image_mask_overlay(
|
39
38
|
file,
|
40
39
|
channels,
|
@@ -367,6 +366,54 @@ def plot_image_mask_overlay(
|
|
367
366
|
|
368
367
|
return fig
|
369
368
|
|
369
|
+
def plot_cellpose4_output(batch, masks, flows, cmap='inferno', figuresize=10, nr=1, print_object_number=True):
|
370
|
+
"""
|
371
|
+
Plot the masks and flows for a given batch of images.
|
372
|
+
|
373
|
+
Args:
|
374
|
+
batch (numpy.ndarray): The batch of images.
|
375
|
+
masks (list or numpy.ndarray): The masks corresponding to the images.
|
376
|
+
flows (list or numpy.ndarray): The flows corresponding to the images.
|
377
|
+
cmap (str, optional): The colormap to use for displaying the images. Defaults to 'inferno'.
|
378
|
+
figuresize (int, optional): The size of the figure. Defaults to 20.
|
379
|
+
nr (int, optional): The maximum number of images to plot. Defaults to 1.
|
380
|
+
file_type (str, optional): The file type of the flows. Defaults to '.npz'.
|
381
|
+
print_object_number (bool, optional): Whether to print the object number on the mask. Defaults to True.
|
382
|
+
|
383
|
+
Returns:
|
384
|
+
None
|
385
|
+
"""
|
386
|
+
|
387
|
+
from .utils import _generate_mask_random_cmap, mask_object_count
|
388
|
+
|
389
|
+
font = figuresize/2
|
390
|
+
index = 0
|
391
|
+
|
392
|
+
for image, mask, flow in zip(batch, masks, flows):
|
393
|
+
#if print_object_number:
|
394
|
+
# num_objects = mask_object_count(mask)
|
395
|
+
# print(f'Number of objects: {num_objects}')
|
396
|
+
random_cmap = _generate_mask_random_cmap(mask)
|
397
|
+
|
398
|
+
if index < nr:
|
399
|
+
index += 1
|
400
|
+
chans = image.shape[-1]
|
401
|
+
fig, ax = plt.subplots(1, image.shape[-1] + 2, figsize=(4 * figuresize, figuresize))
|
402
|
+
for v in range(0, image.shape[-1]):
|
403
|
+
ax[v].imshow(image[..., v], cmap=cmap, interpolation='nearest')
|
404
|
+
ax[v].set_title('Image - Channel'+str(v))
|
405
|
+
ax[chans].imshow(mask, cmap=random_cmap, interpolation='nearest')
|
406
|
+
ax[chans].set_title('Mask')
|
407
|
+
if print_object_number:
|
408
|
+
unique_objects = np.unique(mask)[1:]
|
409
|
+
for obj in unique_objects:
|
410
|
+
cy, cx = ndi.center_of_mass(mask == obj)
|
411
|
+
ax[chans].text(cx, cy, str(obj), color='white', fontsize=font, ha='center', va='center')
|
412
|
+
ax[chans+1].imshow(flow, cmap='viridis', interpolation='nearest')
|
413
|
+
ax[chans+1].set_title('Flow')
|
414
|
+
plt.show()
|
415
|
+
return
|
416
|
+
|
370
417
|
def plot_masks(batch, masks, flows, cmap='inferno', figuresize=10, nr=1, file_type='.npz', print_object_number=True):
|
371
418
|
"""
|
372
419
|
Plot the masks and flows for a given batch of images.
|
@@ -64,9 +64,9 @@ def set_default_settings_preprocess_generate_masks(settings={}):
|
|
64
64
|
settings.setdefault('nucleus_background', 100)
|
65
65
|
settings.setdefault('nucleus_Signal_to_noise', 10)
|
66
66
|
settings.setdefault('nucleus_CP_prob', 0)
|
67
|
-
settings.setdefault('nucleus_FT',
|
68
|
-
settings.setdefault('cell_FT',
|
69
|
-
settings.setdefault('pathogen_FT',
|
67
|
+
settings.setdefault('nucleus_FT', 1.0)
|
68
|
+
settings.setdefault('cell_FT', 1.0)
|
69
|
+
settings.setdefault('pathogen_FT', 1.0)
|
70
70
|
|
71
71
|
# Plot settings
|
72
72
|
settings.setdefault('plot', False)
|
@@ -97,6 +97,10 @@ def set_default_settings_preprocess_generate_masks(settings={}):
|
|
97
97
|
settings.setdefault('upscale', False)
|
98
98
|
settings.setdefault('upscale_factor', 2.0)
|
99
99
|
settings.setdefault('adjust_cells', False)
|
100
|
+
settings.setdefault('use_sam_cell', False)
|
101
|
+
settings.setdefault('use_sam_nucleus', False)
|
102
|
+
settings.setdefault('use_sam_pathogen', False)
|
103
|
+
|
100
104
|
return settings
|
101
105
|
|
102
106
|
def set_default_plot_data_from_db(settings):
|
@@ -173,6 +177,8 @@ def _get_object_settings(object_type, settings):
|
|
173
177
|
object_settings['maximum_size'] = (object_settings['diameter']**2)*10
|
174
178
|
else:
|
175
179
|
print(f'Cell diameter must be an integer or float, got {settings["cell_diamiter"]}')
|
180
|
+
if settings['use_sam_cell']:
|
181
|
+
object_settings['model_name'] = 'sam'
|
176
182
|
|
177
183
|
elif object_type == 'nucleus':
|
178
184
|
object_settings['model_name'] = 'nuclei'
|
@@ -187,6 +193,8 @@ def _get_object_settings(object_type, settings):
|
|
187
193
|
object_settings['maximum_size'] = (object_settings['diameter']**2)*10
|
188
194
|
else:
|
189
195
|
print(f'Nucleus diameter must be an integer or float, got {settings["nucleus_diamiter"]}')
|
196
|
+
if settings['use_sam_nucleus']:
|
197
|
+
object_settings['model_name'] = 'sam'
|
190
198
|
|
191
199
|
elif object_type == 'pathogen':
|
192
200
|
object_settings['model_name'] = 'cyto'
|
@@ -203,10 +211,13 @@ def _get_object_settings(object_type, settings):
|
|
203
211
|
object_settings['maximum_size'] = (object_settings['diameter']**2)*10
|
204
212
|
else:
|
205
213
|
print(f'Pathogen diameter must be an integer or float, got {settings["pathogen_diamiter"]}')
|
214
|
+
|
215
|
+
if settings['use_sam_pathogen']:
|
216
|
+
object_settings['model_name'] = 'sam'
|
206
217
|
|
207
218
|
else:
|
208
219
|
print(f'Object type: {object_type} not supported. Supported object types are : cell, nucleus and pathogen')
|
209
|
-
|
220
|
+
|
210
221
|
if settings['verbose']:
|
211
222
|
print(object_settings)
|
212
223
|
|
@@ -712,7 +723,7 @@ expected_types = {
|
|
712
723
|
"nucleus_background": int,
|
713
724
|
"nucleus_Signal_to_noise": float,
|
714
725
|
"nucleus_CP_prob": float,
|
715
|
-
"nucleus_FT": float,
|
726
|
+
"nucleus_FT": (int, float),
|
716
727
|
"cell_channel": (int, type(None)),
|
717
728
|
"cell_background": (int, float),
|
718
729
|
"cell_Signal_to_noise": (int, float),
|
@@ -1003,11 +1014,14 @@ expected_types = {
|
|
1003
1014
|
"nucleus_diamiter":int,
|
1004
1015
|
"pathogen_diamiter":int,
|
1005
1016
|
"consolidate":bool,
|
1017
|
+
'use_sam_cell':bool,
|
1018
|
+
'use_sam_nucleus':bool,
|
1019
|
+
'use_sam_pathogen':bool,
|
1006
1020
|
"distance_gaussian_sigma": (int, type(None))
|
1007
1021
|
}
|
1008
1022
|
|
1009
1023
|
categories = {"Paths":[ "src", "grna", "barcodes", "custom_model_path", "dataset","model_path","grna_csv","row_csv","column_csv", "metadata_files", "score_data","count_data"],
|
1010
|
-
"General": ["cell_mask_dim", "cytoplasm", "cell_chann_dim", "cell_channel", "nucleus_chann_dim", "nucleus_channel", "nucleus_mask_dim", "pathogen_mask_dim", "pathogen_chann_dim", "pathogen_channel",
|
1024
|
+
"General": ["cell_mask_dim", "cytoplasm", "cell_chann_dim", "cell_channel", "nucleus_chann_dim", "nucleus_channel", "nucleus_mask_dim", "pathogen_mask_dim", "pathogen_chann_dim", "pathogen_channel", "test_mode", "plot", "metadata_type", "custom_regex", "experiment", "channels", "magnification", "channel_dims", "apply_model_to_dataset", "generate_training_dataset", "train_DL_model", "delete_intermediate", "uninfected", ],
|
1011
1025
|
"Cellpose":["denoise","fill_in","from_scratch", "n_epochs", "width_height", "model_name", "custom_model", "resample", "rescale", "CP_prob", "flow_threshold", "percentiles", "invert", "diameter", "grayscale", "Signal_to_noise", "resize", "target_height", "target_width"],
|
1012
1026
|
"Cell": ["cell_diamiter","cell_intensity_range", "cell_size_range", "cell_background", "cell_Signal_to_noise", "cell_CP_prob", "cell_FT", "remove_background_cell", "cell_min_size", "cytoplasm_min_size", "adjust_cells", "cells", "cell_loc"],
|
1013
1027
|
"Nucleus": ["nucleus_diamiter","nucleus_intensity_range", "nucleus_size_range", "nucleus_background", "nucleus_Signal_to_noise", "nucleus_CP_prob", "nucleus_FT", "remove_background_nucleus", "nucleus_min_size", "nucleus_loc"],
|
@@ -1025,7 +1039,7 @@ categories = {"Paths":[ "src", "grna", "barcodes", "custom_model_path", "dataset
|
|
1025
1039
|
"Plot": ["split_axis_lims", "x_lim","log_x","log_y", "plot_control", "plot_nr", "examples_to_plot", "normalize_plots", "cmap", "figuresize", "plot_cluster_grids", "img_zoom", "row_limit", "color_by", "plot_images", "smooth_lines", "plot_points", "plot_outlines", "black_background", "plot_by_cluster", "heatmap_feature","grouping","min_max","cmap","save_figure"],
|
1026
1040
|
"Timelapse": ["timelapse", "fps", "timelapse_displacement", "timelapse_memory", "timelapse_frame_limits", "timelapse_remove_transient", "timelapse_mode", "timelapse_objects", "compartments"],
|
1027
1041
|
"Advanced": ["merge_edge_pathogen_cells", "test_images", "random_test", "test_nr", "test", "test_split", "normalize", "target_unique_count","threshold_multiplier", "threshold_method", "min_n","shuffle", "target_intensity_min", "cells_per_well", "nuclei_limit", "pathogen_limit", "background", "backgrounds", "schedule", "test_size","exclude","n_repeats","top_features", "model_type_ml", "model_type","minimum_cell_count","n_estimators","preprocess", "remove_background", "normalize", "lower_percentile", "merge_pathogens", "batch_size", "filter", "save", "masks", "verbose", "randomize", "n_jobs"],
|
1028
|
-
"Beta": ["all_to_mip", "upscale", "upscale_factor", "consolidate", "distance_gaussian_sigma"]
|
1042
|
+
"Beta": ["all_to_mip", "upscale", "upscale_factor", "consolidate", "distance_gaussian_sigma","use_sam_pathogen","use_sam_nucleus", "use_sam_cell"]
|
1029
1043
|
}
|
1030
1044
|
|
1031
1045
|
|
@@ -1415,6 +1429,9 @@ def generate_fields(variables, scrollable_frame):
|
|
1415
1429
|
"overlay": "(bool) - Overlay activation maps on the images.",
|
1416
1430
|
"shuffle": "(bool) - Shuffle the dataset bufore generating the activation maps",
|
1417
1431
|
"correlation": "(bool) - Calculate correlation between image channels and activation maps. Data is saved to .db.",
|
1432
|
+
"use_sam_cell": "(bool) - Whether to use SAM for cell segmentation.",
|
1433
|
+
"use_sam_nucleus": "(bool) - Whether to use SAM for nucleus segmentation.",
|
1434
|
+
"use_sam_pathogen": "(bool) - Whether to use SAM for pathogen segmentation.",
|
1418
1435
|
"normalize_input": "(bool) - Normalize the input images before passing them to the model.",
|
1419
1436
|
"normalize_plots": "(bool) - Normalize images before plotting.",
|
1420
1437
|
}
|
@@ -7,6 +7,65 @@ from multiprocessing import Pool
|
|
7
7
|
from skimage.transform import resize as resizescikit
|
8
8
|
from scipy.ndimage import binary_fill_holes
|
9
9
|
|
10
|
+
def parse_cellpose4_output(output):
|
11
|
+
"""
|
12
|
+
General parser for Cellpose eval output.
|
13
|
+
Handles:
|
14
|
+
- batched format (list of 4 arrays)
|
15
|
+
- per-image list of flows
|
16
|
+
Returns:
|
17
|
+
masks, flows0, flows1, flows2, flows3
|
18
|
+
"""
|
19
|
+
|
20
|
+
masks = output[0]
|
21
|
+
flows = output[1]
|
22
|
+
|
23
|
+
if not isinstance(flows, (list, tuple)):
|
24
|
+
raise ValueError(f"Unrecognized Cellpose flows type: {type(flows)}")
|
25
|
+
|
26
|
+
# Determine number of images
|
27
|
+
try:
|
28
|
+
num_images = len(masks)
|
29
|
+
except TypeError:
|
30
|
+
raise ValueError(f"Cannot determine number of images in masks (type={type(masks)})")
|
31
|
+
|
32
|
+
# Case A: batched format (4 arrays stacked over batch)
|
33
|
+
if len(flows) == 4 and all(isinstance(f, np.ndarray) for f in flows):
|
34
|
+
flow0_array, flow1_array, flow2_array, flow3_array = flows
|
35
|
+
|
36
|
+
flows0 = [flow0_array[i] for i in range(num_images)]
|
37
|
+
flows1 = [flow1_array[:, i] for i in range(num_images)]
|
38
|
+
flows2 = [flow2_array[i] for i in range(num_images)]
|
39
|
+
flows3 = [flow3_array[i] for i in range(num_images)]
|
40
|
+
|
41
|
+
return masks, flows0, flows1, flows2, flows3
|
42
|
+
|
43
|
+
# Case B: per-image format
|
44
|
+
elif len(flows) == num_images:
|
45
|
+
flows0, flows1, flows2, flows3 = [], [], [], []
|
46
|
+
|
47
|
+
for item in flows:
|
48
|
+
if isinstance(item, (list, tuple)):
|
49
|
+
n = len(item)
|
50
|
+
f0 = item[0] if n > 0 else None
|
51
|
+
f1 = item[1] if n > 1 else None
|
52
|
+
f2 = item[2] if n > 2 else None
|
53
|
+
f3 = item[3] if n > 3 else None
|
54
|
+
elif isinstance(item, np.ndarray):
|
55
|
+
f0, f1, f2, f3 = item, None, None, None
|
56
|
+
else:
|
57
|
+
f0 = f1 = f2 = f3 = None
|
58
|
+
|
59
|
+
flows0.append(f0)
|
60
|
+
flows1.append(f1)
|
61
|
+
flows2.append(f2)
|
62
|
+
flows3.append(f3)
|
63
|
+
|
64
|
+
return masks, flows0, flows1, flows2, flows3
|
65
|
+
|
66
|
+
# Unrecognized structure
|
67
|
+
raise ValueError(f"Unrecognized Cellpose flows format: type={type(flows)}, len={len(flows) if hasattr(flows,'__len__') else 'unknown'}")
|
68
|
+
|
10
69
|
def identify_masks_finetune(settings):
|
11
70
|
|
12
71
|
from .plot import print_mask_and_flows
|