Source code for tiatoolbox
"""Top-level package for TIA Toolbox."""
import importlib.util
import os
import sys
from pathlib import Path
import pkg_resources
import yaml
__author__ = """TIA Lab"""
__email__ = "tialab@dcs.warwick.ac.uk"
__version__ = "1.4.0"
# This will set the tiatoolbox external data
# default to be the user home folder, should work on both Window and Unix/Linux
# C:\Users\USER\.tiatoolbox
# /home/USER/.tiatoolbox
# Initialize internal logging facilities, such that models etc.
# can have reporting mechanism, may need to change protocol
import logging
# We only create a logger if root has no handler to prevent overwriting use existing
# logging
logging.captureWarnings(True)
if not logging.getLogger().hasHandlers():
formatter = logging.Formatter(
"|%(asctime)s.%(msecs)03d| [%(levelname)s] %(message)s",
datefmt="%Y-%m-%d|%H:%M:%S",
)
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setFormatter(formatter)
stdout_handler.addFilter(lambda record: record.levelno <= logging.INFO)
stderr_handler = logging.StreamHandler()
stderr_handler.setFormatter(formatter)
stderr_handler.setLevel(logging.WARNING)
logger = logging.getLogger() # get root logger
logger.setLevel(logging.INFO)
logger.addHandler(stdout_handler)
logger.addHandler(stderr_handler)
else:
logger = logging.getLogger()
[docs]class DuplicateFilter(logging.Filter):
def filter(self, record):
current_log = (record.module, record.levelno, record.msg)
if current_log != getattr(self, "last_log", None):
self.last_log = current_log
return True
return False
# runtime context parameters
rcParam = {"TIATOOLBOX_HOME": os.path.join(os.path.expanduser("~"), ".tiatoolbox")}
# Load a dictionary of sample files data (names and urls)
PRETRAINED_FILES_REGISTRY_PATH = pkg_resources.resource_filename(
"tiatoolbox", "data/pretrained_model.yaml"
)
with open(PRETRAINED_FILES_REGISTRY_PATH) as registry_handle:
PRETRAINED_INFO = yaml.safe_load(registry_handle)
rcParam["pretrained_model_info"] = PRETRAINED_INFO
def _lazy_import(name: str, module_location: Path):
spec = importlib.util.spec_from_file_location(name, module_location)
loader = importlib.util.LazyLoader(spec.loader)
spec.loader = loader
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module
loader.exec_module(module)
return module
if __name__ == "__main__":
print("tiatoolbox version:" + str(__version__))
location = Path(__file__).parent
annotation = _lazy_import("annotation", location)
models = _lazy_import("models", location)
tiatoolbox = _lazy_import("tiatoolbox", location)
tools = _lazy_import("tools", location)
utils = _lazy_import("utils", location)
wsicore = _lazy_import("wsicore", location)