6
0
Eric Tröbs 4 ani în urmă
părinte
comite
8d40a178d9

+ 5 - 2
pycs/pipeline/PipelineManager.py

@@ -25,9 +25,12 @@ class PipelineManager:
         job = Job('detect-faces', self.project['id'], media_file)
         result = tpool.execute(lambda p, j: p.execute(j), self.pipeline, job)
 
-        # TODO filter predictions
+        # 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)
+            media_file.add_result(prediction, origin='pipeline')
 
     def __load_pipeline(self, pipeline_identifier):
         model_distribution = self.project.parent.parent['models'][pipeline_identifier]

+ 16 - 6
pycs/projects/MediaFile.py

@@ -13,25 +13,35 @@ class MediaFile(ObservableDict):
 
         super().__init__(obj, parent)
 
-    def __get_file(self, id):
+    def __get_file(self, identifier):
         file_directory = path.join(getcwd(), 'projects', self.parent['id'], 'data')
-        file_name = id + self['extension']
+        file_name = identifier + self['extension']
 
         return file_directory, file_name
 
     def get_file(self):
         return self.__get_file(self['id'])
 
-    def add_result(self, result):
+    def add_result(self, result, origin='user'):
         result['id'] = str(uuid1())
+        result['origin'] = origin
+
         self['predictionResults'][result['id']] = result
 
     def remove_result(self, identifier):
         del self['predictionResults'][identifier]
 
-    def update_result(self, identifier, value):
-        value['id'] = identifier
-        self['predictionResults'][identifier] = value
+    def remove_pipeline_results(self):
+        remove = list(filter(lambda k: self['predictionResults'][k]['origin'] == 'pipeline', self['predictionResults'].keys()))
+
+        for key in remove:
+            del self['predictionResults'][key]
+
+    def update_result(self, identifier, result, origin='user'):
+        result['id'] = identifier
+        result['origin'] = origin
+
+        self['predictionResults'][identifier] = result
 
     def resize(self, maximum_width):
         # check if resized file already exists

+ 1 - 1
webui/src/components/media/annotated-image.vue

@@ -11,7 +11,7 @@
                     :immutable="true"/>
 
     <annotation-box v-for="(result, index) in predictions"
-                    type="server"
+                    :type="result.origin"
                     :key="index"
                     :id="result.id"
                     :image="image"

+ 3 - 2
webui/src/components/media/annotation-box.vue

@@ -25,9 +25,10 @@ export default {
   computed: {
     backgroundColor: function () {
       switch (this.type) {
-        case 'server':
+        case 'user':
           return 'rgba(255, 0, 0, 0.3)';
-
+        case 'pipeline':
+          return 'rgba(0, 0, 255, 0.3)';
         default:
           return 'rgba(255, 255, 255, 0.3)';
       }