import os import cv2 import numpy as np import matplotlib.pyplot as plt from deepfake_detector import DeepfakeDetector from image_processor import ImageProcessor from labeling import ThreatLabeler from heatmap_generator import HeatmapGenerator from combined_visualization import CombinedVisualizer def ensure_dir(directory): """Ensure directory exists""" if not os.path.exists(directory): os.makedirs(directory) def demo_combined_visualization(image1_path, image2_path, output_dir, threshold=30, min_area=100): """ Demonstrate the combined visualization that overlays difference image, low and medium threat heatmaps, and bounding boxes. Args: image1_path: Path to original image image2_path: Path to modified image output_dir: Directory to save outputs threshold: Threshold for difference detection min_area: Minimum area for region detection """ # Initialize components detector = DeepfakeDetector() labeler = ThreatLabeler() heatmap_gen = HeatmapGenerator() img_processor = ImageProcessor() visualizer = CombinedVisualizer() # Create output directory ensure_dir(output_dir) # Get base filename for outputs base_name = os.path.splitext(os.path.basename(image1_path))[0] print(f"Processing images: {image1_path} and {image2_path}") # Step 1: Verification Module - Process the image pair results = detector.process_image_pair(image1_path, image2_path, threshold, min_area) # Step 2: Labeling System - Label detected regions by threat level original_image = img_processor.load_image(image1_path) modified_image = img_processor.load_image(image2_path) labeled_image, labeled_regions = labeler.label_regions( original_image, results['difference_image'], results['bounding_boxes']) # Get threat summary threat_summary = labeler.get_threat_summary(labeled_regions) # Step 3: Generate multi-level heatmaps multi_heatmaps = heatmap_gen.generate_multi_level_heatmap(original_image, labeled_regions) # Prepare results for combined visualization image_pair_results = { 'original_image': original_image, 'modified_image': modified_image, 'difference_image': results['difference_image'], 'threshold_image': results['threshold_image'], 'annotated_image': results['annotated_image'], 'labeled_image': labeled_image, 'multi_heatmaps': multi_heatmaps, 'bounding_boxes': results['bounding_boxes'], 'labeled_regions': labeled_regions, 'threat_summary': threat_summary, 'smi_score': results['smi_score'] } # Create combined visualization output_path = os.path.join(output_dir, f"{base_name}_combined_overlay.png") visualizer.create_combined_visualization( image_pair_results, output_path, alpha_diff=0.4, # Transparency for difference image alpha_low=0.3, # Transparency for low threat heatmap alpha_medium=0.4 # Transparency for medium threat heatmap ) # Print summary information print(f"\nAnalysis Results:") print(f"SMI Score: {results['smi_score']:.4f} (1.0 = identical, 0.0 = completely different)") print(f"Total regions detected: {threat_summary['total_regions']}") print(f"Threat counts: Low={threat_summary['threat_counts']['low']}, " f"Medium={threat_summary['threat_counts']['medium']}, " f"High={threat_summary['threat_counts']['high']}") if threat_summary['max_threat']: print(f"Maximum threat: {threat_summary['max_threat']['level'].upper()} " f"({threat_summary['max_threat']['percentage']:.1f}%)") print(f"Average difference: {threat_summary['average_difference']:.1f}%") print(f"\nCombined visualization saved to: {output_path}") return output_path if __name__ == "__main__": import sys if len(sys.argv) < 3: print("Usage: python demo_combined_visualization.py [output_dir]") sys.exit(1) image1_path = sys.argv[1] image2_path = sys.argv[2] output_dir = sys.argv[3] if len(sys.argv) > 3 else "./output" demo_combined_visualization(image1_path, image2_path, output_dir)