import os import cv2 from PIL import Image def is_image_corrupted(path): """ Returns True if the image cannot be opened by cv2 or PIL. """ # ---- Try reading with OpenCV ---- img = cv2.imread(path) if img is None: return True # cv2 failed to decode # ---- Try reading with PIL ---- try: with Image.open(path) as im: im.verify() # Validate without fully loading except Exception: return True # PIL failed to open / verify return False # Image is valid def delete_corrupted_images(directory): """ Deletes all unreadable / corrupted images in the directory. """ valid_extensions = {".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".webp"} deleted_count = 0 for filename in os.listdir(directory): path = os.path.join(directory, filename) # Skip folders if not os.path.isfile(path): continue # Check valid image extensions ext = os.path.splitext(filename)[1].lower() if ext not in valid_extensions: continue # Check corruption if is_image_corrupted(path): print(f"Deleting corrupted image: {filename}") os.remove(path) deleted_count += 1 print(f"\nDone. Deleted {deleted_count} corrupted images.") # --------- RUN ---------- directory = "/media/NAS/DATASET/wacv_safe_challenge_2025_dataset/physical_fakes/PS-Battles/originals/" # <-- change this delete_corrupted_images(directory)