-
Christopher Randolph Rhodes authored
Implemented workflow and endpoint for two-stage (px -> ob) classification in ilastik; tests pass and image data is correct
Christopher Randolph Rhodes authoredImplemented workflow and endpoint for two-stage (px -> ob) classification in ilastik; tests pass and image data is correct
workflow.py 1.71 KiB
"""
Implementation of image analysis work behind API endpoints, without knowledge of persistent data in server session.
"""
from pathlib import Path
from time import perf_counter
from typing import Dict
from model_server.image import generate_file_accessor, write_accessor_data_to_file
from model_server.model import Model
from pydantic import BaseModel
class Timer(object):
tfunc = perf_counter
def __init__(self):
self.events = {}
self.last = self.tfunc()
def click(self, key):
self.events[key] = self.tfunc() - self.last
self.last = self.tfunc()
class WorkflowRunRecord(BaseModel):
model_id: str
input_filepath: str
output_filepath: str
success: bool
timer_results: Dict[str, float]
def infer_image_to_image(fpi: Path, model: Model, where_output: Path, **kwargs) -> WorkflowRunRecord:
"""
Generic workflow where a model processes an input image into an output image
:param fpi: Path object that references input image file
:param model: model object
:param where_output: Path object that references output image directory
:param kwargs: variable-length keyword arguments
:return: record object
"""
ti = Timer()
ch = kwargs.get('channel')
img = generate_file_accessor(fpi).get_one_channel_data(ch)
ti.click('file_input')
outdata, _ = model.infer(img)
ti.click('inference')
outpath = where_output / (model.model_id + '_' + fpi.stem + '.tif')
write_accessor_data_to_file(outpath, outdata)
ti.click('file_output')
return WorkflowRunRecord(
model_id=model.model_id,
input_filepath=str(fpi),
output_filepath=str(outpath),
success=True,
timer_results=ti.events,
)