from os import getcwd from os import path from eventlet import tpool 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() '''