mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 01:55:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			170 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| """
 | |
| Demo Script for Newspaper Image Cleaning Pipeline
 | |
| 
 | |
| This script demonstrates the cleaning pipeline on the sample images
 | |
| and shows the available functionality.
 | |
| """
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| from pathlib import Path
 | |
| 
 | |
| # Add current directory to Python path
 | |
| sys.path.append(str(Path(__file__).parent))
 | |
| 
 | |
| try:
 | |
|     from image_cleaner import NewspaperImageCleaner, create_comparison_image
 | |
|     import cv2
 | |
|     import numpy as np
 | |
|     print("✓ All required libraries imported successfully")
 | |
| except ImportError as e:
 | |
|     print(f"✗ Import error: {e}")
 | |
|     print("Please install required packages: pip install -r requirements.txt")
 | |
|     sys.exit(1)
 | |
| 
 | |
| 
 | |
| def demo_single_image(image_path):
 | |
|     """Demonstrate processing a single image."""
 | |
|     print(f"\n=== Processing Single Image: {image_path} ===")
 | |
| 
 | |
|     if not os.path.exists(image_path):
 | |
|         print(f"Image not found: {image_path}")
 | |
|         return False
 | |
| 
 | |
|     try:
 | |
|         # Initialize cleaner
 | |
|         cleaner = NewspaperImageCleaner()
 | |
| 
 | |
|         # Process image
 | |
|         output_path = f"demo_cleaned_{Path(image_path).name}"
 | |
|         processed, original = cleaner.process_image(image_path, output_path)
 | |
| 
 | |
|         # Create comparison
 | |
|         comparison_path = f"demo_comparison_{Path(image_path).name}"
 | |
|         create_comparison_image(original, processed, comparison_path)
 | |
| 
 | |
|         print(f"✓ Processed image saved: {output_path}")
 | |
|         print(f"✓ Comparison saved: {comparison_path}")
 | |
|         return True
 | |
| 
 | |
|     except Exception as e:
 | |
|         print(f"✗ Error processing {image_path}: {str(e)}")
 | |
|         return False
 | |
| 
 | |
| 
 | |
| def demo_step_by_step(image_path):
 | |
|     """Demonstrate individual processing steps."""
 | |
|     print(f"\n=== Step-by-Step Processing: {image_path} ===")
 | |
| 
 | |
|     if not os.path.exists(image_path):
 | |
|         print(f"Image not found: {image_path}")
 | |
|         return
 | |
| 
 | |
|     try:
 | |
|         # Load image
 | |
|         original = cv2.imread(image_path)
 | |
|         if original is None:
 | |
|             print(f"Could not load image: {image_path}")
 | |
|             return
 | |
| 
 | |
|         # Resize if too large for demo
 | |
|         height, width = original.shape[:2]
 | |
|         if height > 1000 or width > 1000:
 | |
|             scale = min(1000/height, 1000/width)
 | |
|             new_width = int(width * scale)
 | |
|             new_height = int(height * scale)
 | |
|             original = cv2.resize(original, (new_width, new_height))
 | |
|             print(f"Resized to {new_width}x{new_height} for demo")
 | |
| 
 | |
|         cleaner = NewspaperImageCleaner()
 | |
| 
 | |
|         # Process step by step
 | |
|         steps = [
 | |
|             ('original', original),
 | |
|             ('denoised', cleaner.reduce_noise(original.copy())),
 | |
|             ('contrast_enhanced', cleaner.enhance_contrast(original.copy())),
 | |
|             ('background_cleaned', cleaner.clean_background(original.copy())),
 | |
|             ('sharpened', cleaner.sharpen_image(original.copy()))
 | |
|         ]
 | |
| 
 | |
|         # Save each step
 | |
|         for step_name, image in steps:
 | |
|             output_path = f"demo_step_{step_name}_{Path(image_path).name}"
 | |
|             cv2.imwrite(output_path, image)
 | |
|             print(f"✓ Saved {step_name}: {output_path}")
 | |
| 
 | |
|         print("✓ Individual processing steps completed")
 | |
| 
 | |
|     except Exception as e:
 | |
|         print(f"✗ Error in step-by-step processing: {str(e)}")
 | |
| 
 | |
| 
 | |
| def show_image_info():
 | |
|     """Show information about available images."""
 | |
|     print("\n=== Available Sample Images ===")
 | |
| 
 | |
|     image_files = []
 | |
|     for ext in ['*.jpg', '*.jpeg', '*.JPG', '*.JPEG']:
 | |
|         image_files.extend(Path('.').glob(ext))
 | |
| 
 | |
|     if not image_files:
 | |
|         print("No image files found in current directory")
 | |
|         return []
 | |
| 
 | |
|     for img_file in image_files:
 | |
|         try:
 | |
|             # Load image to get dimensions
 | |
|             img = cv2.imread(str(img_file))
 | |
|             if img is not None:
 | |
|                 height, width = img.shape[:2]
 | |
|                 file_size = img_file.stat().st_size / (1024*1024)  # MB
 | |
|                 print(f"  {img_file.name}: {width}x{height} pixels, {file_size:.1f}MB")
 | |
|             else:
 | |
|                 print(f"  {img_file.name}: Could not load")
 | |
|         except Exception as e:
 | |
|             print(f"  {img_file.name}: Error - {str(e)}")
 | |
| 
 | |
|     return image_files
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     """Main demo function."""
 | |
|     print("Historical Newspaper Image Cleaning Pipeline - Demo")
 | |
|     print("=" * 55)
 | |
| 
 | |
|     # Show available images
 | |
|     image_files = show_image_info()
 | |
| 
 | |
|     if not image_files:
 | |
|         print("\nNo images found. Please add some image files to test.")
 | |
|         return
 | |
| 
 | |
|     # Select first image for demo
 | |
|     sample_image = image_files[0]
 | |
|     print(f"\nUsing sample image: {sample_image.name}")
 | |
| 
 | |
|     # Demo single image processing
 | |
|     success = demo_single_image(str(sample_image))
 | |
| 
 | |
|     if success:
 | |
|         # Demo step-by-step processing
 | |
|         demo_step_by_step(str(sample_image))
 | |
| 
 | |
|         print(f"\n=== Demo Complete ===")
 | |
|         print("Generated files:")
 | |
|         print("  - demo_cleaned_*.jpg (cleaned image)")
 | |
|         print("  - demo_comparison_*.jpg (before/after comparison)")
 | |
|         print("  - demo_step_*.jpg (individual processing steps)")
 | |
| 
 | |
|         print(f"\nNext steps:")
 | |
|         print(f"  - Try: python config_tuner.py {sample_image.name}")
 | |
|         print(f"  - Try: python batch_process.py")
 | |
|         print(f"  - Adjust parameters in config.json for better results")
 | |
| 
 | |
|     else:
 | |
|         print("\nDemo failed. Please check your Python environment and dependencies.")
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main() | 
