|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import json |
|
import logging |
|
from typing import Dict, Mapping, Optional |
|
|
|
import numpy as np |
|
from monai.config import NdarrayOrTensor, PathLike |
|
from monai.data import ImageWriter |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
class ClassificationWriter(ImageWriter): |
|
def __init__(self, label_index_map: Optional[Dict[str, str]] = None, **kwargs): |
|
super().__init__(**kwargs) |
|
self.label_index_map = ( |
|
label_index_map |
|
if label_index_map |
|
else {"0": "Other", "1": "Inflammatory", "2": "Epithelial", "3": "Spindle-Shaped"} |
|
) |
|
|
|
def set_data_array( |
|
self, |
|
data_array: NdarrayOrTensor, |
|
channel_dim: Optional[int] = 0, |
|
squeeze_end_dims: bool = True, |
|
contiguous: bool = False, |
|
**kwargs, |
|
): |
|
self.data_obj: np.ndarray = super().create_backend_obj(data_array) |
|
|
|
def set_metadata(self, meta_dict: Optional[Mapping] = None, resample: bool = True, **options): |
|
pass |
|
|
|
def write(self, filename: PathLike, verbose: bool = False, **kwargs): |
|
super().write(filename, verbose=verbose) |
|
result = [] |
|
for idx, score in enumerate(self.data_obj): |
|
name = f"label_{idx}" |
|
name = self.label_index_map.get(str(idx)) if self.label_index_map else name |
|
if name: |
|
result.append({"idx": idx, "label": name, "score": float(score)}) |
|
|
|
with open(filename, "w") as fp: |
|
json.dump(result, fp) |
|
|