import logging
import argparse
import sys
import traceback
from pathlib import Path
from cellmil.interfaces import FeatureExtractorConfig
from cellmil.features import FeatureExtractor
from cellmil.interfaces.FeatureExtractorConfig import ExtractorType
from cellmil.interfaces.CellSegmenterConfig import ModelType
# Setup logging with enhanced format
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[logging.StreamHandler()],
)
logger = logging.getLogger(__name__)
[docs]def setup_parser() -> argparse.ArgumentParser:
"""Set up command line argument parser"""
parser = argparse.ArgumentParser(
description="CLI tool for preparing data from whole slide images"
)
# Patch extraction arguments
parser.add_argument(
"--extractor",
type=str,
required=True,
choices=ExtractorType.values(),
help="Feature extractor to use, options are: " + ", ".join(ExtractorType.values()),
)
parser.add_argument(
"--wsi_path",
type=Path,
required=False,
default=None,
help="Path to the whole slide image"
)
parser.add_argument(
"--patched_slide_path",
type=Path,
required=True,
help="Path to the patched slide image folder",
)
parser.add_argument(
"--segmentation_model",
type=str,
required=False,
choices=ModelType.values(),
default=None,
help="Segmentation model used to extract cells",
)
parser.add_argument(
"--graph_method",
type=str,
required=False,
default=None,
help="Graph method to use for feature extraction",
)
return parser
[docs]def main():
"""Entry point for the CLI tool."""
parser = setup_parser()
args = parser.parse_args()
# Call patch extraction directly
feature_extraction(args)
if __name__ == "__main__":
main()