I have setup the docker container to run the model evaluation.
Write function resize_image in python that open get a folder path as in put and looks for all of the images files in that folder using only pillow and resize them to 32x32 and overwrite it. Just give me the python code that I can run by python code.py and the default folder is /tmp
Write function resize_image in python that open get a folder path as in put and looks for all of the images files in that folder using only pillow and resize them to 32x32 and overwrite it. Just give me the python code that I can run by python code.py and the default folder is /tmp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | # code.py import os from PIL import Image import PIL # Required for the UnidentifiedImageError exception def resize_image(folder_path="/tmp"): """ Opens a folder, finds all image files, resizes them to 32x32, and overwrites the original files. Args: folder_path (str): The path to the folder containing images. Defaults to "/tmp". """ target_size = (32, 32) supported_formats = ('JPEG', 'PNG', 'GIF', 'BMP', 'TIFF', 'WEBP') # Common formats Pillow supports print(f"Starting image resizing in folder: {folder_path}") print(f"Target size: {target_size[0]}x{target_size[1]} pixels") # Check if the folder exists if not os.path.isdir(folder_path): print(f"Error: Folder '{folder_path}' not found.") return processed_count = 0 skipped_count = 0 # Iterate through all files in the specified directory for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) # Check if it's a file (and not a directory) if not os.path.isfile(file_path): continue try: # Use a 'with' statement for automatic resource management with Image.open(file_path) as img: # Check if the format is supported (optional but good practice) if img.format not in supported_formats: # print(f"Skipping '{filename}': Unsupported format '{img.format}'.") skipped_count += 1 continue print(f"Processing '{filename}'...") # Resize the image # Image.LANCZOS is a high-quality downsampling filter resized_img = img.resize(target_size, Image.Resampling.LANCZOS) # Overwrite the original file, preserving the original format # Note: Saving might fail if permissions are wrong, or for some complex formats. original_format = img.format # Ensure the image mode is suitable for saving in the original format (e.g., RGBA for PNG) # If the original was palette-based (P mode) and we resize, it might become RGB/RGBA. # Saving as the original format should handle this, but be aware. resized_img.save(file_path, format=original_format) print(f" Resized and saved '{filename}'") processed_count += 1 except PIL.UnidentifiedImageError: # This error occurs if Pillow cannot identify the file format # print(f"Skipping '{filename}': Not a recognized image file.") skipped_count += 1 except (IOError, OSError) as e: # Handle potential file errors (e.g., permissions, file corruption) print(f"Skipping '{filename}': Error processing file. Details: {e}") skipped_count += 1 except Exception as e: # Catch any other unexpected errors during image processing print(f"Skipping '{filename}': An unexpected error occurred. Details: {e}") skipped_count += 1 print("\nFinished processing.") print(f"Successfully resized and saved: {processed_count} image(s).") print(f"Skipped: {skipped_count} file(s) (non-images or errors).") # This block allows the script to be run directly if __name__ == "__main__": # You can change the default path here if needed, # but the function default is already "/tmp" as requested. resize_image() # Example of calling with a different path: # resize_image("/path/to/your/images") |
1 2 | pip install Pillow |
1 2 | python code.py |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | # code.py import os from PIL import Image import PIL # Required for the UnidentifiedImageError exception def resize_image(folder_path="/tmp"): """ Opens a folder, finds all image files, resizes them to 32x32, and overwrites the original files. Args: folder_path (str): The path to the folder containing images. Defaults to "/tmp". """ target_size = (32, 32) supported_formats = ('JPEG', 'PNG', 'GIF', 'BMP', 'TIFF', 'WEBP') # Common formats Pillow supports print(f"Starting image resizing in folder: {folder_path}") print(f"Target size: {target_size[0]}x{target_size[1]} pixels") # Check if the folder exists if not os.path.isdir(folder_path): print(f"Error: Folder '{folder_path}' not found.") return processed_count = 0 skipped_count = 0 # Iterate through all files in the specified directory for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) # Check if it's a file (and not a directory) if not os.path.isfile(file_path): continue try: # Use a 'with' statement for automatic resource management with Image.open(file_path) as img: # Check if the format is supported (optional but good practice) if img.format not in supported_formats: # print(f"Skipping '{filename}': Unsupported format '{img.format}'.") skipped_count += 1 continue print(f"Processing '{filename}'...") # Resize the image # Image.LANCZOS is a high-quality downsampling filter resized_img = img.resize(target_size, Image.Resampling.LANCZOS) # Overwrite the original file, preserving the original format # Note: Saving might fail if permissions are wrong, or for some complex formats. original_format = img.format # Ensure the image mode is suitable for saving in the original format (e.g., RGBA for PNG) # If the original was palette-based (P mode) and we resize, it might become RGB/RGBA. # Saving as the original format should handle this, but be aware. resized_img.save(file_path, format=original_format) print(f" Resized and saved '{filename}'") processed_count += 1 except PIL.UnidentifiedImageError: # This error occurs if Pillow cannot identify the file format # print(f"Skipping '{filename}': Not a recognized image file.") skipped_count += 1 except (IOError, OSError) as e: # Handle potential file errors (e.g., permissions, file corruption) print(f"Skipping '{filename}': Error processing file. Details: {e}") skipped_count += 1 except Exception as e: # Catch any other unexpected errors during image processing print(f"Skipping '{filename}': An unexpected error occurred. Details: {e}") skipped_count += 1 print("\nFinished processing.") print(f"Successfully resized and saved: {processed_count} image(s).") print(f"Skipped: {skipped_count} file(s) (non-images or errors).") # This block allows the script to be run directly if __name__ == "__main__": # You can change the default path here if needed, # but the function default is already "/tmp" as requested. # Before running, ensure the /tmp directory exists or change the path. # On some systems, you might need to create it manually or use a different path. if not os.path.exists("/tmp"): try: os.makedirs("/tmp") print("Created /tmp directory.") except OSError as e: print(f"Error creating /tmp directory: {e}. Please use an existing directory.") # Optionally exit or prompt user for a different path # exit(1) # Or, you could set a different default path: # default_path = os.path.expanduser("~/Desktop/image_resize_test") # Example for Desktop # if not os.path.exists(default_path): os.makedirs(default_path) # resize_image(default_path) # For now, we'll just proceed and let the function handle the error if /tmp still doesn't exist. resize_image() # Example of calling with a different path: # Make sure the target directory exists before calling # example_path = "/path/to/your/images" # if os.path.isdir(example_path): # resize_image(example_path) # else: # print(f"Example path '{example_path}' does not exist. Skipping example call.") |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | # code.py import os from PIL import Image import PIL # Required for the UnidentifiedImageError exception def resize_image(folder_path="/tmp"): """ Opens a folder, finds all image files, resizes them to 32x32, and overwrites the original files. Args: folder_path (str): The path to the folder containing images. Defaults to "/tmp". """ target_size = (32, 32) supported_formats = ('JPEG', 'PNG', 'GIF', 'BMP', 'TIFF', 'WEBP') # Common formats Pillow supports print(f"Starting image resizing in folder: {folder_path}") print(f"Target size: {target_size[0]}x{target_size[1]} pixels") # Check if the folder exists if not os.path.isdir(folder_path): print(f"Error: Folder '{folder_path}' not found.") return processed_count = 0 skipped_count = 0 # Iterate through all files in the specified directory for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) # Check if it's a file (and not a directory) if not os.path.isfile(file_path): continue try: # Use a 'with' statement for automatic resource management with Image.open(file_path) as img: # Check if the format is supported (optional but good practice) if img.format not in supported_formats: # print(f"Skipping '{filename}': Unsupported format '{img.format}'.") skipped_count += 1 continue print(f"Processing '{filename}'...") # Resize the image # Image.LANCZOS is a high-quality downsampling filter resized_img = img.resize(target_size, Image.Resampling.LANCZOS) # Overwrite the original file, preserving the original format # Note: Saving might fail if permissions are wrong, or for some complex formats. original_format = img.format # Ensure the image mode is suitable for saving in the original format (e.g., RGBA for PNG) # If the original was palette-based (P mode) and we resize, it might become RGB/RGBA. # Saving as the original format should handle this, but be aware. resized_img.save(file_path, format=original_format) print(f" Resized and saved '{filename}'") processed_count += 1 except PIL.UnidentifiedImageError: # This error occurs if Pillow cannot identify the file format # print(f"Skipping '{filename}': Not a recognized image file.") skipped_count += 1 except (IOError, OSError) as e: # Handle potential file errors (e.g., permissions, file corruption) print(f"Skipping '{filename}': Error processing file. Details: {e}") skipped_count += 1 except Exception as e: # Catch any other unexpected errors during image processing print(f"Skipping '{filename}': An unexpected error occurred. Details: {e}") skipped_count += 1 print("\nFinished processing.") print(f"Successfully resized and saved: {processed_count} image(s).") print(f"Skipped: {skipped_count} file(s) (non-images or errors).") # This block allows the script to be run directly if __name__ == "__main__": # You can change the default path here if needed, # but the function default is already "/tmp" as requested. # Before running, ensure the /tmp directory exists or change the path. # On some systems, you might need to create it manually or use a different path. if not os.path.exists("/tmp"): try: os.makedirs("/tmp") print("Created /tmp directory.") except OSError as e: print(f"Error creating /tmp directory: {e}. Please use an existing directory.") # Optionally exit or prompt user for a different path # exit(1) # Or, you could set a different default path: # default_path = os.path.expanduser("~/Desktop/image_resize_test") # Example for Desktop # if not os.path.exists(default_path): os.makedirs(default_path) # resize_image(default_path) # For now, we'll just proceed and let the function handle the error if /tmp still doesn't exist. resize_image() # Example of calling with a different path: # Make sure the target directory exists before calling # example_path = "/path/to/your/images" # if os.path.isdir(example_path): # resize_image(example_path) # else: # print(f"Example path '{example_path}' does not exist. Skipping example call.") |
Starting image resizing in folder: /tmp
Target size: 32x32 pixels
Processing 'random_image_7.jpeg'...
Resized and saved 'random_image_7.jpeg'
Processing 'random_image_9.jpg'...
Resized and saved 'random_image_9.jpg'
Processing 'random_image_1.jpg'...
Resized and saved 'random_image_1.jpg'
Processing 'random_image_2.jpg'...
Resized and saved 'random_image_2.jpg'
Processing 'random_image_5.jpeg'...
Resized and saved 'random_image_5.jpeg'
Processing 'random_image_10.jpg'...
Resized and saved 'random_image_10.jpg'
Processing 'random_image_4.jpg'...
Resized and saved 'random_image_4.jpg'
Processing 'random_image_3.jpeg'...
Resized and saved 'random_image_3.jpeg'
Processing 'random_image_8.jpeg'...
Resized and saved 'random_image_8.jpeg'
Processing 'random_image_6.jpeg'...
Resized and saved 'random_image_6.jpeg'
Finished processing.
Successfully resized and saved: 10 image(s).
Skipped: 0 file(s) (non-images or errors).
final: True Resulting in output: True