from os import getcwd from os import path from eventlet import tpool from pycs.ApplicationStatus import ApplicationStatus from pycs.pipeline.Job import Job from pycs.pipeline.tf1.pipeline import Pipeline as TF1Pipeline from pycs.projects.Project import Project class PipelineManager: def __init__(self, project: Project): self.project = project self.pipeline = tpool.execute(self.__load_pipeline, project['pipeline']['model-distribution']) def __enter__(self): return self def __exit__(self, type, value, traceback): self.pipeline.close() def run(self, media_file): print('>>>', media_file) # create job list # TODO update job progress job = Job('detect-faces', self.project['id'], media_file) result = tpool.execute(lambda p, j: p.execute(j), self.pipeline, job) media_file['predictionResults'] = result.predictions print('<<<', media_file) def __load_pipeline(self, pipeline_identifier): model_distribution = self.project.parent.parent['models'][pipeline_identifier] if model_distribution['mode'] == 'tf1': model_root = path.join(getcwd(), 'models', model_distribution['name']) pipeline = TF1Pipeline() pipeline.load(model_root, model_distribution['pipeline']) return pipeline ''' def __update(self, data): # get current project path opened_projects = list(filter(lambda x: x['status'] == 'open', data)) if len(opened_projects) == 0: return current_project = opened_projects[0] # find images to predict if 'data' not in current_project.keys() or len(current_project['data']) == 0: return # load pipeline pipeline = tpool.execute(self.__load_pipeline, current_project['pipeline']['model-distribution']) # create job list for d in current_project['data']: print('keys:', d.keys()) if 'result' not in d.keys(): # TODO update job progress job = Job('detect-faces', current_project['id'], d) result = tpool.execute(lambda p, j: p.execute(j), pipeline, job) d['result'] = result.predictions # close pipeline pipeline.close() ''' ''' def __update(self, data): for current_project in data: print('>>>>>>>>>>') # find images to predict if 'data' not in current_project.keys() or len(current_project['data']) == 0: return # load pipeline pipeline = tpool.execute(self.__load_pipeline, current_project['pipeline']['model-distribution']) # create job list for d in current_project['data']: print('keys:', d.keys()) if 'result' not in d.keys(): # TODO update job progress job = Job('detect-faces', current_project['id'], d) result = tpool.execute(lambda p, j: p.execute(j), pipeline, job) d['result'] = result.predictions # close pipeline pipeline.close() '''