Beispiel #1
0
def crop(path, dataset_id):
    pil_image = Image.open(path)

    directory = os.path.dirname(path)
    base_name = os.path.basename(path)

    width, height = pil_image.size

    crop_width = width / 2
    crop_height = height / 2

    top_left_box = (0, 0, crop_width, crop_height)
    top_right_box = (crop_width, 0, width, crop_height)
    bottom_left_box = (0, crop_height, crop_width, height)
    bottom_right_box = (crop_width, crop_height, width, height)

    file_names = [os.path.join(directory, f"{base_name}_{f_name}") \
        for f_name in ["topleft.png", "topright.png", "bottomleft.png", "bottomright.png"]]

    # pil_image.crop(top_left_box).save(os.path.join(directory, f"{base_name}_topleft.png"))
    # pil_image.crop(top_right_box).save(os.path.join(directory, f"{base_name}_topright.png"))
    # pil_image.crop(bottom_left_box).save(os.path.join(directory, f"{base_name}_bottomleft.png"))
    # pil_image.crop(bottom_right_box).save(os.path.join(directory, f"{base_name}_bottomright.png"))

    pil_image.crop(top_left_box).save(file_names[0])
    pil_image.crop(top_right_box).save(file_names[1])
    pil_image.crop(bottom_left_box).save(file_names[2])
    pil_image.crop(bottom_right_box).save(file_names[3])

    for fn in file_names:
        ImageModel.create_from_path(fn, dataset_id).save()
    def on_any_event(self, event):

        path = event.dest_path if event.event_type == "moved" else event.src_path

        if (event.is_directory
                # check if its a hidden file
                or bool(re.search(r'\/\..*?\/', path)) or
                not path.lower().endswith(self.pattern)):
            return

        self._log(f'File {path} for {event.event_type}')

        image = ImageModel.objects(path=event.src_path).first()

        if image is None and event.event_type != 'deleted':
            self._log(f'Adding new file to database: {path}')
            ImageModel.create_from_path(path).save()

        elif event.event_type == 'moved':
            self._log(f'Moving image from {event.src_path} to {path}')
            image.update(path=path)

        elif event.event_type == 'deleted':
            self._log(f'Deleting image from database {path}')
            ImageModel.objects(path=path).delete()
Beispiel #3
0
 def create_image_by_path(self, path):
     if path.endswith(ImageModel.PATTERN):
         db_image = ImageModel.objects(path=path).first()
         if db_image is not None:
             raise ValueError('Image Should Not Exist In This Path: ' + path)
         
         try:
             ImageModel.create_from_path(path, self.dataset.id).save()
         except:
             raise ValueError('Create Image Failed Given Path: ' + path + ', Dataset Id: ' + int(self.dataset.id))
Beispiel #4
0
def create_image_by_path(path):
    created_image_size = 0
    if path.endswith(ImageModel.PATTERN):
        db_image = ImageModel.objects(path=path).first()
        if db_image is not None:
            return 0
        try:
            ImageModel.create_from_path(path, dataset.id).save()
            created_image_size += 1
            task.info(f"New file found: {path}")
        except:
            task.warning(f"Could not read {path}")
    return created_image_size
Beispiel #5
0
def scan_dataset(task_id, dataset_id):

    task = TaskModel.objects.get(id=task_id)
    dataset = DatasetModel.objects.get(id=dataset_id)

    task.update(status="PROGRESS")
    socket = create_socket()

    directory = dataset.directory
    toplevel = list(os.listdir(directory))
    task.info(f"Scanning {directory}")

    count = 0
    for root, dirs, files in os.walk(directory):

        try:
            youarehere = toplevel.index(root.split('/')[-1])
            progress = int(((youarehere) / len(toplevel)) * 100)
            task.set_progress(progress, socket=socket)
        except:
            pass

        if root.split('/')[-1].startswith('.'):
            continue

        for file in files:
            path = os.path.join(root, file)

            if path.endswith(ImageModel.PATTERN):
                db_image = ImageModel.objects(path=path).first()

                if db_image is not None:
                    continue

                try:
                    ImageModel.create_from_path(path, dataset.id).save()
                    count += 1
                    task.info(f"New file found: {path}")
                except:
                    task.warning(f"Could not read {path}")

    [
        thumbnail_generate_single_image.delay(image.id)
        for image in ImageModel.objects(regenerate_thumbnail=True).all()
    ]

    task.info(f"Created {count} new image(s)")
    task.set_progress(100, socket=socket)
Beispiel #6
0
    def post(self):
        """ Creates an image """
        args = image_upload.parse_args()
        image = args['image']

        dataset_id = args['dataset_id']
        try:
            dataset = DatasetModel.objects.get(id=dataset_id)
        except:
            return {'message': 'dataset does not exist'}, 400

        # check if current user exists or dataset is public
        if current_user or dataset['is_public']:

            directory = dataset.directory
            path = os.path.join(directory, image.filename)

            if os.path.exists(path):
                return {'message': 'file already exists'}, 400

            pil_image = Image.open(io.BytesIO(image.read()))

            pil_image.save(path)

            image.close()
            pil_image.close()
            db_image = ImageModel.create_from_path(
                path, dataset_id, current_user.username).save()
            # to do @sriram
            # generate thubnail immediately after uploading
            return db_image.id
        else:
            return {'message': 'Upload not permitted'}, 400
Beispiel #7
0
    def post(self):
        """ Creates an image """
        args = image_upload.parse_args()
        image = args['image']

        dataset_id = args['dataset_id']
        try:
            dataset = DatasetModel.objects.get(id=dataset_id)
        except:
            return {'message': 'dataset does not exist'}, 400
        directory = dataset.directory
        path = os.path.join(directory, image.filename)

        if os.path.exists(path):
            return {'message': 'file already exists'}, 400

        pil_image = Image.open(io.BytesIO(image.read()))

        pil_image.save(path)

        image.close()
        pil_image.close()
        try:
            db_image = ImageModel.create_from_path(path, dataset_id).save()
        except NotUniqueError:
            db_image = ImageModel.objects.get(path=path)
        return db_image.id
Beispiel #8
0
    def on_any_event(self, event):
        print("hello")
        path = event.dest_path if event.event_type == "moved" else event.src_path

        if event.is_directory:
            # Listen to directory events as some file systems don't generate
            # per-file `deleted` events when moving/deleting directories
            if event.event_type == 'deleted':
                self._log(f'Deleting images from database {path}')
                ImageModel.objects(path=re.compile('^' +
                                                   re.escape(path))).delete()
            return

        if (
                # check if its a hidden file
                bool(re.search(r'\/\..*?\/', path))
                or not path.lower().endswith(self.pattern)):
            return

        self._log(f'File {path} for {event.event_type}')

        image = ImageModel.objects(path=event.src_path).first()

        if image is None and event.event_type != 'deleted':
            self._log(f'Adding new file to database: {path}')
            image = ImageModel.create_from_path(path).save()

            #generate_thumbnail(image)

        elif event.event_type == 'moved':
            self._log(f'Moving image from {event.src_path} to {path}')
            image.update(path=path)
            #generate_thumbnail(image)

        elif event.event_type == 'deleted':
            self._log(f'Deleting image from database {path}')
            ImageModel.objects(path=path).delete()