Skip to content
Snippets Groups Projects
Commit de6f2ecd authored by Christopher Randolph Rhodes's avatar Christopher Randolph Rhodes
Browse files

Moved ilastik to its own extensions package

parent 232e4419
No related branches found
No related tags found
No related merge requests found
Showing
with 31 additions and 88 deletions
from fastapi import FastAPI, HTTPException
from model_server.ilastik import IlastikImageToImageModel, IlastikPixelClassifierModel, IlastikObjectClassifierModel
from model_server.model import DummyImageToImageModel, ParameterExpectedError
from extensions.ilastik.models import IlastikImageToImageModel, IlastikPixelClassifierModel, IlastikObjectClassifierModel
from model_server.models import DummyImageToImageModel, ParameterExpectedError
from model_server.session import Session
from model_server.workflow import infer_image_to_image
from model_server.workflow_ilastik import infer_px_then_ob_model
from model_server.workflows import infer_image_to_image
from extensions.ilastik.workflows import infer_px_then_ob_model
app = FastAPI(debug=True)
session = Session()
......
File moved
File moved
......@@ -4,9 +4,9 @@ from pathlib import Path
import numpy as np
import vigra
import conf.ilastik
from model_server.image import GenericImageDataAccessor, InMemoryDataAccessor
from model_server.model import ImageToImageModel, ParameterExpectedError
import extensions.ilastik.conf
from model_server.accessors import GenericImageDataAccessor, InMemoryDataAccessor
from model_server.models import ImageToImageModel, ParameterExpectedError
class IlastikImageToImageModel(ImageToImageModel):
......@@ -14,7 +14,7 @@ class IlastikImageToImageModel(ImageToImageModel):
def __init__(self, params, autoload=True):
self.project_file = Path(params['project_file'])
params['project_file'] = self.project_file.__str__()
pap = conf.ilastik.paths['project_files'] / self.project_file
pap = extensions.ilastik.conf.paths['project_files'] / self.project_file
self.project_file_abspath = pap
if not pap.exists():
raise FileNotFoundError(f'Project file does not exist: {pap}')
......@@ -53,7 +53,7 @@ class IlastikPixelClassifierModel(IlastikImageToImageModel):
@staticmethod
def get_workflow():
from ilastik.workflows.pixelClassification import PixelClassificationWorkflow
from ilastik.workflows import PixelClassificationWorkflow
return PixelClassificationWorkflow
def infer(self, input_img: GenericImageDataAccessor) -> (np.ndarray, dict):
......
......@@ -4,9 +4,9 @@ import unittest
import numpy as np
import conf.testing
from model_server.image import CziImageFileAccessor, InMemoryDataAccessor, write_accessor_data_to_file
from model_server.ilastik import IlastikObjectClassifierModel, IlastikPixelClassifierModel
from model_server.workflow import infer_image_to_image
from model_server.accessors import CziImageFileAccessor, InMemoryDataAccessor, write_accessor_data_to_file
from extensions.ilastik.models import IlastikObjectClassifierModel, IlastikPixelClassifierModel
from model_server.workflows import infer_image_to_image
from tests.test_api import TestServerBaseClass
class TestIlastikPixelClassification(unittest.TestCase):
......
......@@ -2,13 +2,11 @@
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.ilastik import IlastikPixelClassifierModel, IlastikObjectClassifierModel
from model_server.image import generate_file_accessor, write_accessor_data_to_file
from model_server.model import Model
from model_server.workflow import Timer
from extensions.ilastik.models import IlastikPixelClassifierModel, IlastikObjectClassifierModel
from model_server.accessors import generate_file_accessor, write_accessor_data_to_file
from model_server.workflows import Timer
from pydantic import BaseModel
......
File moved
......@@ -4,7 +4,7 @@ import os
import numpy as np
from model_server.image import GenericImageDataAccessor, InMemoryDataAccessor
from model_server.accessors import GenericImageDataAccessor, InMemoryDataAccessor
class Model(ABC):
......
......@@ -6,9 +6,9 @@ from time import strftime, localtime
from typing import Dict
import conf.defaults
from model_server.model import Model
from model_server.models import Model
from model_server.share import SharedImageDirectory
from model_server.workflow import WorkflowRunRecord
from model_server.workflows import WorkflowRunRecord
def create_manifest_json():
pass
......@@ -17,9 +17,6 @@ class Session(object):
"""
Singleton class for a server session that persists data between API calls
"""
# inbound = SharedImageDirectory(conf.defaults.paths['inbound_images'])
# outbound = SharedImageDirectory(conf.defaults.paths['outbound_images'])
# where_records = conf.defaults.paths['logs']
def __new__(cls):
if not hasattr(cls, 'instance'):
......@@ -31,8 +28,6 @@ class Session(object):
self.models = {} # model_id : model object
self.manifest = [] # paths to data as well as other metadata from each inference run
self.paths = self.make_paths(root)
# self.session_id = self.create_session_id(self.paths['logs'])
# self.session_id = self.create_session_id(self.paths)
self.session_log = self.paths['logs'] / f'session.log'
self.log_event('Initialized session')
self.manifest_json = self.paths['logs'] / f'manifest.json'
......
"""
Classes that manage data sharing between server and outside processes. Currently just a directory on a shared
filesystem; but may expand to include data transfer over API, shared memory objects, etc.
"""
import os
import pathlib
......
......@@ -5,8 +5,8 @@ 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 model_server.accessors import generate_file_accessor, write_accessor_data_to_file
from model_server.models import Model
from pydantic import BaseModel
......
from multiprocessing import Process
import os
import requests
import unittest
import uvicorn
import conf.server
# run server in subprocess
host = '127.0.0.1'
port = 5000
server_process = Process(
target=uvicorn.run,
args=('api:app', ),
kwargs={'host': host, 'port': port, 'log_level': 'debug'},
daemon=True
)
uri = f'http://{host}:{port}/'
server_process.start()
# configure and validate folders etc.
paths = conf.server.paths
paths['automic_watch_folder'] = paths['images']['inbound']
paths['test_source_files'] = ''
# load models by API
# prompt user start AutoMic loop
# move files from one folder to another
def copy_one_input_image_files(copy=True):
pattern = ''
os.listdir(paths['test_source_files'])
# order by increaseing alpha order? timestamp?
if copy:
# copy image from test source files to automic watch folder
else:
# move them
# recursive repeat until nothign is left
# point to server session logs
# shut down server
server_process.terminate()
# do something with the data?
......@@ -4,7 +4,7 @@ import requests
import unittest
from conf.testing import czifile
from model_server.model import DummyImageToImageModel
from model_server.models import DummyImageToImageModel
class TestServerBaseClass(unittest.TestCase):
def setUp(self) -> None:
......
......@@ -3,7 +3,7 @@ import unittest
import numpy as np
from conf.testing import czifile, output_path
from model_server.image import CziImageFileAccessor, DataShapeError, InMemoryDataAccessor, write_accessor_data_to_file
from model_server.accessors import CziImageFileAccessor, DataShapeError, InMemoryDataAccessor, write_accessor_data_to_file
class TestCziImageFileAccess(unittest.TestCase):
......
import unittest
from conf.testing import czifile
from model_server.image import CziImageFileAccessor
from model_server.model import DummyImageToImageModel, CouldNotLoadModelError
from model_server.accessors import CziImageFileAccessor
from model_server.models import DummyImageToImageModel, CouldNotLoadModelError
class TestCziImageFileAccess(unittest.TestCase):
def setUp(self) -> None:
......
import unittest
from model_server.model import DummyImageToImageModel
from model_server.models import DummyImageToImageModel
from model_server.session import Session
class TestGetSessionObject(unittest.TestCase):
......@@ -38,7 +38,7 @@ class TestGetSessionObject(unittest.TestCase):
def test_session_records_workflow(self):
import json
from model_server.workflow import WorkflowRunRecord
from model_server.workflows import WorkflowRunRecord
sesh = Session()
di = WorkflowRunRecord(
model_id='test_model',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment