bhimrazy's picture
Add script for cropping and resizing images
cc095d7
raw
history blame
1.66 kB
import os
import argparse
from src.concurrent_task_executor import concurrent_task_executor
from src.utils import crop_and_pad_image, track_files
from typing import NamedTuple, Tuple
parser = argparse.ArgumentParser(description="Crop and Resize Images in a folder")
parser.add_argument("--src", type=str, help="source folder", required=True)
parser.add_argument("--dest", type=str, help="destination folder", required=True)
parser.add_argument("--size", type=Tuple[int,int], help="Size of image in pixels, given as a (width, height) tuple", default=(512, 512))
class FileInfo(NamedTuple):
src: str
dest: str
size: Tuple[int, int] # (width, height) tuple.
def crop_and_save_image(file_info: FileInfo):
try:
cropped_image = crop_and_pad_image(file_info.src, target_size=file_info.size)
cropped_image.save(file_info.dest)
except Exception as e:
print(f"Error processing image: {str(e)}")
if __name__ == "__main__":
args = parser.parse_args()
src_folder = args.src
dst_folder = args.dest
size = args.size
# check if destination folder exists
if not os.path.exists(dst_folder):
print("Destination folder does not exist. Creating folder...")
os.makedirs(dst_folder, exist_ok=True)
files = [
FileInfo(
src_image_path,
os.path.join(dst_folder, os.path.basename(src_image_path)),
size
)
for src_image_path in track_files(src_folder)
]
# cropping and resizing images and saving them to the destination folder
concurrent_task_executor(crop_and_save_image, files, description="Processing images")