12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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):
- # 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)
- # remove existing pipeline predictions from media_fle
- media_file.remove_pipeline_results()
- # add new predictions
- for prediction in result.predictions:
- media_file.add_result(prediction, origin='pipeline')
- 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()
- '''
|