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)
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
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
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()
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
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)
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
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