File size: 2,453 Bytes
9f494d8 | 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 | #!/usr/bin/env python3
import os
import sys
from PIL import Image
import numpy as np
from pathlib import Path
from tqdm import tqdm
def is_blank_image(image_path, threshold=0.98):
"""
Check if an image is blank (mostly white).
threshold: Pixel similarity threshold, default is 98% of pixels being the same to consider it blank.
"""
try:
with Image.open(image_path) as img:
# Convert to RGB mode
img_rgb = img.convert('RGB')
img_array = np.array(img_rgb)
# Check for pure white (255, 255, 255)
white_pixels = np.all(img_array == [255, 255, 255], axis=2)
white_ratio = np.sum(white_pixels) / (img_array.shape[0] * img_array.shape[1])
return white_ratio >= threshold
except Exception as e:
print(f"Error processing {image_path}: {e}")
return False
def check_blank_images(directory):
"""Check all image files in the directory for blank images."""
image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp'}
blank_images = []
# First collect all image file paths
all_images = []
for root, dirs, files in os.walk(directory):
for file in files:
if Path(file).suffix.lower() in image_extensions:
image_path = os.path.join(root, file)
all_images.append(image_path)
total_images = len(all_images)
# Use tqdm to show progress
for image_path in tqdm(all_images, desc="Checking images", unit="img"):
if is_blank_image(image_path):
blank_images.append(image_path)
tqdm.write(f"Blank image found: {image_path}") # Use tqdm.write to avoid breaking the progress bar
print(f"\nSummary:")
print(f"Total images: {total_images}")
print(f"Blank images: {len(blank_images)}")
print(f"Blank ratio: {len(blank_images)/total_images*100:.2f}%" if total_images > 0 else "No images found")
return len(blank_images) > 0
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python check_blank_images.py <directory>")
sys.exit(1)
directory = sys.argv[1]
if not os.path.exists(directory):
print(f"Directory {directory} does not exist")
sys.exit(1)
has_blank = check_blank_images(directory)
sys.exit(1 if has_blank else 0) # Return 1 if blank images are found, else 0 |