Ejemplo n.º 1
0
 def displayLabel(self, barplot, label):
     label_bool = labels_tools.labelStringToBoolean(label)
     ranges = [[x for x in l if x['ground_truth_label'] == label_bool]
               for l in self.ranges]
     dataset = PlotDataset(list(map(len, ranges)), label)
     dataset.setColor(colors_tools.getLabelColor(label))
     barplot.addDataset(dataset)
Ejemplo n.º 2
0
 def getLabels(self, num_instances):
     labels = [None] * num_instances
     families = [None] * num_instances
     gt_labels = [None] * num_instances
     gt_families = [None] * num_instances
     # Labels/Families
     benign_ids = annotations_db_tools.getLabelIds(
         self.experiment.session, self.experiment.experiment_id,
         labels_tools.BENIGN)
     malicious_ids = annotations_db_tools.getLabelIds(
         self.experiment.session, self.experiment.experiment_id,
         labels_tools.MALICIOUS)
     for instance_id in benign_ids + malicious_ids:
         label, family, method = annotations_db_tools.getAnnotationDetails(
             self.experiment.session, self.experiment.experiment_id,
             instance_id)
         labels[self.indexes[
             instance_id]] = labels_tools.labelStringToBoolean(label)
         families[self.indexes[instance_id]] = family
     # True Labels
     has_ground_truth = db_tables.hasGroundTruth(self.experiment)
     if has_ground_truth:
         gt_labels, gt_families = annotations_db_tools.getGroundTruth(
             self.experiment.session, self.experiment.experiment_id)
     return labels, families, gt_labels, gt_families
Ejemplo n.º 3
0
def getGroundTruth(session, experiment_id):
    dataset_id = getDatasetId(session, experiment_id)
    query = session.query(GroundTruthAlchemy)
    query = query.filter(GroundTruthAlchemy.dataset_id == dataset_id)
    query = query.order_by(GroundTruthAlchemy.instance_id)
    res = query.all()
    labels = [labels_tools.labelStringToBoolean(r.label) for r in res]
    families = [r.family for r in res]
    return labels, families
Ejemplo n.º 4
0
def changeFamilyLabel(session, experiment_id, label, family):
    annotations_id, _, _ = getAnnotationsId(session, experiment_id)
    query = session.query(AnnotationsAlchemy)
    query = query.filter(AnnotationsAlchemy.label == label)
    query = query.filter(AnnotationsAlchemy.family == family)
    query = query.filter(AnnotationsAlchemy.annotations_id == annotations_id)
    instances = query.all()
    new_label = labels_tools.labelBooleanToString(
        not(labels_tools.labelStringToBoolean(label)))
    for instance in instances:
        instance.label = new_label
    session.flush()
Ejemplo n.º 5
0
 def getFamiliesValues(self, label='all'):
     if label == 'all':
         indexes = range(self.ids.numInstances())
     else:
         l = labels_tools.labelStringToBoolean(label)
         indexes = [
             i for i in range(self.ids.numInstances())
             if self.labels[i] is not None and self.labels[i] == l
         ]
     families = set([
         self.families[i] for i in indexes if self.families[i] is not None
     ])
     return families
Ejemplo n.º 6
0
 def checkAnnotationsWithDB(self, experiment):
     for instance_id in self.instances.annotations.getAnnotatedIds():
         label = self.instances.annotations.getLabel(instance_id)
         family = self.instances.annotations.getFamily(instance_id)
         details = annotations_db_tools.getAnnotationDetails(
             experiment.session, experiment.experiment_id, instance_id)
         if details is None:
             # The instance is not annotated anymore
             self.instances.annotations.setLabelFamily(
                 instance_id, None, None)
         else:
             DB_label, DB_family, m = details
             DB_label = labels_tools.labelStringToBoolean(DB_label)
             if DB_label != label or DB_family != family:
                 self.instances.annotations.setLabelFamily(
                     instance_id, DB_label, DB_family)
Ejemplo n.º 7
0
 def getAnnotations(self):
     labels = [None] * self.num_instances
     families = [None] * self.num_instances
     benign_ids = annotations_db_tools.getLabelIds(
         self.experiment.session, self.experiment.experiment_id,
         labels_tools.BENIGN)
     malicious_ids = annotations_db_tools.getLabelIds(
         self.experiment.session, self.experiment.experiment_id,
         labels_tools.MALICIOUS)
     for instance_id in benign_ids + malicious_ids:
         label, family, method = annotations_db_tools.getAnnotationDetails(
             self.experiment.session, self.experiment.experiment_id,
             instance_id)
         labels[self.indexes[
             instance_id]] = labels_tools.labelStringToBoolean(label)
         families[self.indexes[instance_id]] = family
     return labels, families
Ejemplo n.º 8
0
 def update(self, instance_id, label, family):
     self.new_annotations = True
     self.instances.annotations.setLabelFamily(
         instance_id, labels_tools.labelStringToBoolean(label), family)
     # Update the annotation count
     self.num_annotations[label] += 1