| import os |
| from PIL import Image |
| from collections import Counter |
|
|
| def analyze_images(directory): |
| analysis_results = {} |
| |
| for root, dirs, files in os.walk(directory): |
| if files: |
| model_folder_name = os.path.basename(root) |
| if model_folder_name not in analysis_results: |
| analysis_results[model_folder_name] = { |
| 'image_count': 0, |
| 'total_size': 0, |
| 'resolutions': Counter() |
| } |
| |
| for file in files: |
| file_path = os.path.join(root, file) |
| |
| |
| analysis_results[model_folder_name]['image_count'] += 1 |
| |
| |
| try: |
| with Image.open(file_path) as img: |
| |
| file_size = os.path.getsize(file_path) |
| analysis_results[model_folder_name]['total_size'] += file_size |
| |
| |
| width, height = img.size |
| analysis_results[model_folder_name]['resolutions'][(width, height)] += 1 |
| except Exception as e: |
| print(f"Error reading file {file_path}: {e}") |
| |
| return analysis_results |
|
|
| def print_and_log_analysis_results(analysis_results, dataset_name, log_file): |
| |
| max_model_length = max(len(model) for model in analysis_results.keys()) |
| model_column_width = max(max_model_length, 20) |
| |
| |
| image_count_width = 12 |
| total_size_width = 14 |
| resolution_width = 25 |
| |
| |
| header = f"{'Model':<{model_column_width}} | {'Image Count':>{image_count_width}} | {'Total Size (MB)':>{total_size_width}} | {'Most Common Resolution':<{resolution_width}}" |
| separator = "-" * (model_column_width + image_count_width + total_size_width + resolution_width + 7) |
| |
| result_lines = [] |
| result_lines.append(f"Analysis for {dataset_name}:\n") |
| result_lines.append(header + "\n") |
| result_lines.append(separator + "\n") |
| |
| for model, data in analysis_results.items(): |
| total_size_mb = data['total_size'] / (1024 * 1024) |
| most_common_resolution = data['resolutions'].most_common(1) |
| |
| if most_common_resolution: |
| common_res = f"{most_common_resolution[0][0][0]}x{most_common_resolution[0][0][1]} ({most_common_resolution[0][1]} images)" |
| else: |
| common_res = "None" |
| |
| result_lines.append(f"{model:<{model_column_width}} | {data['image_count']:>{image_count_width}} | {total_size_mb:>{total_size_width}.2f} | {common_res:<{resolution_width}}\n") |
| |
| result_lines.append("\n") |
| |
| |
| for line in result_lines: |
| print(line, end='') |
| |
| |
| with open(log_file, 'a') as f: |
| f.writelines(result_lines) |
|
|
| def main(): |
| |
| generated_dir = 'resampledEvalSet' |
| real_dir = 'real' |
| log_file = 'analysis_results.txt' |
| |
| |
| with open(log_file, 'w') as f: |
| pass |
| |
| |
| generated_analysis_results = analyze_images(generated_dir) |
| print_and_log_analysis_results(generated_analysis_results, "Generated Images", log_file) |
| |
| |
| real_analysis_results = analyze_images(real_dir) |
| print_and_log_analysis_results(real_analysis_results, "Real Images", log_file) |
|
|
| if __name__ == "__main__": |
| main() |
|
|