Skip to content
Snippets Groups Projects
api.py 2.59 KiB
Newer Older

from fastapi import FastAPI, HTTPException

from model_server.ilastik import IlastikPixelClassifierModel, IlastikObjectClassifierModel
from model_server.model import DummyImageToImageModel, ParameterExpectedError
from model_server.workflow import infer_image_to_image
session = Session()

@app.on_event("startup")
def startup():
    pass

@app.get('/')
def read_root():
    return {'success': True}
def list_bounce_back(par1=None, par2=None):
    return {'success': True, 'params': {'par1': par1, 'par2': par2}}

@app.get('/paths')
def list_session_paths():
def restart_session(root: str = None) -> dict:
    session.restart(root=root)
@app.get('/models')
def list_active_models():
def load_dummy_model() -> dict:
    return {'model_id': session.load_model(DummyImageToImageModel)}
def load_ilastik_model(model_class, project_file):
    try:
        result = {
            'model_id': session.load_model(
                model_class,
                {'project_file': project_file}
            )
        }
    except (FileNotFoundError, ParameterExpectedError):
        raise HTTPException(
            status_code=404,
            detail=f'Could not load project file {project_file}',
        )
    return result

@app.put('/models/ilastik/pixel_classification/load/')
def load_ilastik_pixel_classification_model(project_file: str) -> dict:
    return load_ilastik_model(IlastikPixelClassifierModel, project_file)
def load_ilastik_object_classification_model(project_file: str) -> dict:
    return load_ilastik_model(IlastikObjectClassifierModel, project_file)

@app.put('/infer/from_image_file')
def infer_img(model_id: str, input_filename: str, channel: int = None) -> dict:
    if model_id not in session.describe_loaded_models().keys():
        raise HTTPException(
            status_code=409,
            detail=f'Model {model_id} has not been loaded'
        )
    inpath = session.paths['inbound_images'] / input_filename
    if not inpath.exists():
        raise HTTPException(
            status_code=404,
            detail=f'Could not find file:\n{inpath}'
        )
        session.paths['outbound_images'],