Пример #1
0
    def refresh_images(self):
        from core.models.image import Image
        # collect local images
        images = Image.objects.all()
        images_dict = {}
        for image in images:
            images_dict[image.name] = image

        # collect glance images
        glance_images = self.client.glance.get_images()
        glance_images_dict = {}
        for glance_image in glance_images:
            glance_images_dict[glance_image['name']] = glance_image

        # add new images
        new_image_names = set(glance_images_dict.keys()).difference(
            images_dict.keys())
        for name in new_image_names:
            image = Image(
                image_id=glance_images_dict[name]['id'],
                name=glance_images_dict[name]['name'],
                disk_format=glance_images_dict[name]['disk_format'],
                container_format=glance_images_dict[name]['container_format'])
            image.save()

        # remove old images
        old_image_names = set(images_dict.keys()).difference(
            glance_images_dict.keys())
        Image.objects.filter(name__in=old_image_names).delete()
Пример #2
0
    def fetch_pending(self, deleted):
        # Images come from the back end
        # You can't delete them
        if (deleted):
            return []

        # get list of images on disk
        images_path = Config().observer_images_directory

        available_images = {}
        if os.path.exists(images_path):
            for f in os.listdir(images_path):
                filename = os.path.join(images_path, f)
                if os.path.isfile(filename):
                    available_images[f] = filename

        images = Image.objects.all()
        image_names = [image.name for image in images]

        for image_name in available_images:
            #remove file extension
            clean_name = ".".join(image_name.split('.')[:-1])
            if clean_name not in image_names:
                image = Image(name=clean_name,
                              disk_format='raw',
                              container_format='bare', 
                              path = available_images[image_name])
                image.save()

        return Image.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
Пример #3
0
    def fetch_pending(self, deletion):
        if (deletion):
            return []

        images = Image.objects.all()
        image_names = [image.name for image in images]

        new_images = []

        try:
            aws_images = json.loads(open(XOS_DIR + '/aws-images').read())
        except:
            aws_images = aws_run('ec2 describe-images --owner 099720109477')
            open(XOS_DIR + '/aws-images', 'w').write(json.dumps(aws_images))

        aws_images = aws_images['Images']
        aws_images = filter(lambda x: x['ImageType'] == 'machine',
                            aws_images)[:50]

        names = set([])
        for aws_image in aws_images:
            desc_ok = True

            try:
                desc = aws_image['Description']
            except:
                try:
                    desc = aws_image['ImageLocation']
                except:
                    desc_ok = False

            if (desc_ok):
                try:
                    desc_ok = desc and desc not in names and desc not in image_names and '14.04' in desc
                except KeyError:
                    desc_ok = False

            if desc_ok and aws_image['ImageType'] == 'machine':
                image = Image(disk_format=aws_image['ImageLocation'],
                              name=desc,
                              container_format=aws_image['Hypervisor'],
                              path=aws_image['ImageId'])
                new_images.append(image)
                names.add(image.name)

        #print new_images
        return new_images
Пример #4
0
    def attention(self, image: Image) -> Image:
        img_path = image.path.as_posix()

        width, height = self.config.width, self.config.height
        img = k_image.load_img(img_path, target_size=(width, height))
        x = k_image.img_to_array(img)
        x = np.expand_dims(x, axis=0)
        x = preprocess_input(x)

        vgg16 = self.model.get_layer("vgg16")
        last_conv_layer = vgg16.get_layer("block5_conv3")

        o = vgg16.get_output_at(0)[:, 8]
        grads = k_backend.gradients(o, last_conv_layer.output)[0]
        pooled_grads = k_backend.mean(grads, axis=(0, 1, 2))
        iterate = k_backend.function([vgg16.get_input_at(0)],
                                     [pooled_grads, last_conv_layer.output[0]])
        pooled_grads_value, conv_layer_output_value = iterate([x])
        for i in range(512):
            conv_layer_output_value[:, :, i] *= pooled_grads_value[i]
        heatmap = np.mean(conv_layer_output_value, axis=-1)
        heatmap = np.maximum(heatmap, 0)
        heatmap /= np.max(heatmap)

        cv2_image = cv2.imread(img_path)
        heatmap = cv2.resize(heatmap, (cv2_image.shape[1], cv2_image.shape[0]))
        heatmap = np.uint8(255 * heatmap)
        heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)
        superimposed_img = heatmap * 0.4 + cv2_image

        # cv2.imwrite("pneumo.jpg", superimposed_img)

        cache_dir = image.path.parent.joinpath("cache")
        cache_dir.mkdir(parents=True, exist_ok=True)

        new_image_path = cache_dir.joinpath(image.path.name)
        cv2.imwrite(new_image_path.as_posix(), superimposed_img)

        return Image(new_image_path)
Пример #5
0
    def fetch_pending(self, deleted):
        # Images come from the back end
        # You can't delete them
        if (deleted):
            logger.info("SyncImages: returning because deleted=True")
            return []

        # get list of images on disk
        images_path = Config().observer_images_directory

        logger.info("SyncImages: deleted=False, images_path=%s" % images_path)

        available_images = {}
        if os.path.exists(images_path):
            for f in os.listdir(images_path):
                filename = os.path.join(images_path, f)
                if os.path.isfile(filename) and filename.endswith(".img"):
                    available_images[f] = filename

        logger.info("SyncImages: available_images = %s" %
                    str(available_images))

        images = Image.objects.all()
        image_names = [image.name for image in images]

        for image_name in available_images:
            #remove file extension
            clean_name = ".".join(image_name.split('.')[:-1])
            if clean_name not in image_names:
                logger.info("SyncImages: adding %s" % clean_name)
                image = Image(name=clean_name,
                              disk_format='raw',
                              container_format='bare',
                              path=available_images[image_name])
                image.save()

        return Image.objects.filter(
            Q(enacted__lt=F('updated')) | Q(enacted=None))
Пример #6
0
 def _load_paths(self, paths: List[Path]) -> None:
     for each in paths:
         image = Image(each)
         self.images_vm.add(image)