Source code for mirar.processors.utils.header_annotate
"""
Module for adding metadata to Image headers
"""
import logging
from mirar.data import ImageBatch
from mirar.processors.base_processor import BaseImageProcessor
logger = logging.getLogger(__name__)
[docs]
class HeaderAnnotator(BaseImageProcessor):
"""
Processor for adding metadata to Image headers
"""
base_key = "header_annotator"
def __init__(
self,
input_keys: str | list[str],
output_key: str,
):
super().__init__()
if not isinstance(input_keys, list):
input_keys = [input_keys]
self.input_keys = input_keys
self.output_key = output_key
[docs]
def description(self) -> str:
return (
f"Updates image headers by adding values "
f"for '{self.output_key}' using '{' and '.join(self.input_keys)}'."
)
def _apply_to_images(
self,
batch: ImageBatch,
) -> ImageBatch:
for i, image in enumerate(batch):
if len(self.input_keys) > 1:
new_val = ""
for key in self.input_keys:
new_val += str(image[key])
else:
new_val = image[self.input_keys[0]]
image[self.output_key] = new_val
batch[i] = image
return batch
[docs]
class HeaderEditor(BaseImageProcessor):
"""
Processor for modifying metadata in Image headers
"""
base_key = "header_editor"
def __init__(
self,
edit_keys: str | list[str],
values: str | float | int | list,
):
super().__init__()
if not isinstance(edit_keys, list):
edit_keys = [edit_keys]
if not isinstance(values, list):
values = [values]
assert len(edit_keys) == len(values)
self.edit_keys = edit_keys
self.values = values
[docs]
def description(self) -> str:
vals = []
for i, key in enumerate(self.edit_keys):
vals.append(f"{key}={self.values[i]}")
return f"Modifies headers by " f"setting {'&'.join(vals)}"
def _apply_to_images(
self,
batch: ImageBatch,
) -> ImageBatch:
for i, image in enumerate(batch):
for ind, key in enumerate(self.edit_keys):
image[key] = self.values[ind]
batch[i] = image
return batch