Source code for datasets.preprocess

from pathlib import Path
from typing import Literal

import pandas as pd
from PIL import Image


[docs] def crop_image( image: Image, new_size: tuple[int, int], orientation: Literal["center", "left", "right"] = "center" ) -> Image: """ Crop image to new_size with specified orientation. :param image: The image to be cropped. :type image: Image :param new_size: The new size of the cropped image. :type new_size: tuple[int, int] :param orientation: The orientation of the cropped image. Valid values are "center", "left", or "right". :type orientation: Literal["center", "left", "right"], optional :return: The cropped image. :rtype: Image :raises ValueError: If the specified orientation is invalid. """ width, height = image.size left = (width - new_size[0]) // 2 right = (width + new_size[0]) // 2 top = (height - new_size[1]) // 2 bottom = (height + new_size[1]) // 2 match orientation: case "center": return image.crop((left, top, right, bottom)) case "left": return image.crop((0, top, new_size[0], bottom)) case "right": return image.crop((width - new_size[0], top, width, bottom)) case _: raise ValueError("Invalid orientation")
[docs] def load_dataset_csv_file(file_path: str | Path) -> pd.DataFrame: """ Load a dataset from a CSV file and add a column with the file path of each image. Args: file_path (str or Path): The path to the CSV file. Returns: pd.DataFrame: The loaded dataset with an additional "file_path" column. """ if isinstance(file_path, str): file_path = Path(file_path) images_dir = file_path.parent / "images" df = pd.read_csv(file_path) df["file_path"] = images_dir / df["filename"] return df