seifbenayed commited on
Commit
8ecb82d
·
1 Parent(s): c382687
Files changed (1) hide show
  1. app.py +10 -36
app.py CHANGED
@@ -434,12 +434,7 @@ def process_image(input_image, damage_model_path, deepfake_model_path, deepfake_
434
  progress_info = []
435
 
436
  # Debug: log input parameters
437
- progress_info.append(f"Processing with:")
438
- progress_info.append(f"- Damage model: {damage_model_path}")
439
- progress_info.append(f"- Deepfake model: {deepfake_model_path}")
440
- progress_info.append(f"- Config: {deepfake_cfg_path}")
441
- progress_info.append(f"- Thresholds: Damage={damage_threshold}, Deepfake={deepfake_threshold}")
442
-
443
  # Check model files
444
  if not skip_damage and damage_model_path:
445
  if not os.path.exists(damage_model_path):
@@ -469,11 +464,9 @@ def process_image(input_image, damage_model_path, deepfake_model_path, deepfake_
469
  except Exception as e:
470
  return None, f"Error loading image: {str(e)}"
471
 
472
- progress_info.append("Image loaded successfully")
473
 
474
  # Setup device
475
  device = setup_device(device_str)
476
- progress_info.append(f"Using device: {device}")
477
 
478
  # Initialize models
479
  damage_detector = None
@@ -482,41 +475,22 @@ def process_image(input_image, damage_model_path, deepfake_model_path, deepfake_
482
 
483
  # Setup damage detector
484
  if not skip_damage and damage_model_path:
485
- progress_info.append("Setting up damage detector...")
486
  damage_detector, _ = setup_damage_detector(damage_model_path, float(damage_threshold))
487
- if damage_detector is None:
488
- progress_info.append("Warning: Failed to initialize damage detector")
489
- else:
490
- progress_info.append("Damage detector ready")
491
-
492
  # Setup deepfake detector
493
  if deepfake_model_path and deepfake_cfg_path:
494
- progress_info.append("Setting up deepfake detector...")
495
  deepfake_model, deepfake_cfg = load_deepfake_model(deepfake_model_path, deepfake_cfg_path, device)
496
- if deepfake_model is None:
497
- progress_info.append("Warning: Failed to initialize deepfake detector")
498
- else:
499
- progress_info.append("Deepfake detector ready")
500
-
501
- # Check if we have at least one working detector
502
- if damage_detector is None and deepfake_model is None:
503
- return None, "\n".join(progress_info) + "\nError: No working detectors available"
504
-
505
  # Step 1: Detect damage
506
- progress_info.append("Detecting damage regions...")
507
  start_time = time.time()
508
  img, damage_outputs, damage_regions = detect_damage(img, damage_detector)
509
  damage_time = time.time() - start_time
510
 
511
- if damage_regions:
512
- progress_info.append(f"Found {len(damage_regions)} damage regions in {damage_time:.2f}s")
513
- else:
514
- progress_info.append("No damage regions found, analyzing whole image")
515
-
516
  # Step 2: Check for deepfakes
517
  deepfake_results = []
518
  if deepfake_model is not None:
519
- progress_info.append("Checking for deepfakes...")
520
  start_time = time.time()
521
  deepfake_results = check_deepfake(
522
  img, damage_regions, deepfake_model, deepfake_cfg, device, float(deepfake_threshold)
@@ -524,7 +498,6 @@ def process_image(input_image, damage_model_path, deepfake_model_path, deepfake_
524
  deepfake_time = time.time() - start_time
525
 
526
  if deepfake_results:
527
- progress_info.append(f"Deepfake analysis completed in {deepfake_time:.2f}s")
528
 
529
  # Generate report
530
  for result in deepfake_results:
@@ -532,23 +505,24 @@ def process_image(input_image, damage_model_path, deepfake_model_path, deepfake_
532
  region_id = result["region_id"]
533
  fake_prob = result["deepfake_prob"]
534
  is_fake = result["is_fake"]
535
- progress_info.append(f"Region {region_id}: {'⚠️ FAKE' if is_fake else '✅ REAL'} ({fake_prob*100:.2f}%)")
536
  elif "region" in result and result["region"] == "full_image":
537
  fake_prob = result["deepfake_prob"]
538
  is_fake = result["is_fake"]
539
- progress_info.append(f"Whole image: {'⚠️ FAKE' if is_fake else '✅ REAL'} ({fake_prob*100:.2f}%)")
540
  else:
541
  progress_info.append("No deepfake detection results")
542
 
 
 
 
 
 
543
  # Step 3: Visualize results
544
- progress_info.append("Generating visualization...")
545
  result_img = visualize_results(img, damage_outputs, deepfake_results, float(damage_threshold))
546
 
547
  # Convert back to RGB for Gradio
548
  if len(result_img.shape) == 3 and result_img.shape[2] == 3:
549
  result_img = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)
550
 
551
- progress_info.append("✅ Analysis complete!")
552
 
553
  return result_img, "\n".join(progress_info)
554
 
 
434
  progress_info = []
435
 
436
  # Debug: log input parameters
437
+
 
 
 
 
 
438
  # Check model files
439
  if not skip_damage and damage_model_path:
440
  if not os.path.exists(damage_model_path):
 
464
  except Exception as e:
465
  return None, f"Error loading image: {str(e)}"
466
 
 
467
 
468
  # Setup device
469
  device = setup_device(device_str)
 
470
 
471
  # Initialize models
472
  damage_detector = None
 
475
 
476
  # Setup damage detector
477
  if not skip_damage and damage_model_path:
 
478
  damage_detector, _ = setup_damage_detector(damage_model_path, float(damage_threshold))
479
+
 
 
 
 
480
  # Setup deepfake detector
481
  if deepfake_model_path and deepfake_cfg_path:
 
482
  deepfake_model, deepfake_cfg = load_deepfake_model(deepfake_model_path, deepfake_cfg_path, device)
483
+
484
+
 
 
 
 
 
 
 
485
  # Step 1: Detect damage
 
486
  start_time = time.time()
487
  img, damage_outputs, damage_regions = detect_damage(img, damage_detector)
488
  damage_time = time.time() - start_time
489
 
490
+
 
 
 
 
491
  # Step 2: Check for deepfakes
492
  deepfake_results = []
493
  if deepfake_model is not None:
 
494
  start_time = time.time()
495
  deepfake_results = check_deepfake(
496
  img, damage_regions, deepfake_model, deepfake_cfg, device, float(deepfake_threshold)
 
498
  deepfake_time = time.time() - start_time
499
 
500
  if deepfake_results:
 
501
 
502
  # Generate report
503
  for result in deepfake_results:
 
505
  region_id = result["region_id"]
506
  fake_prob = result["deepfake_prob"]
507
  is_fake = result["is_fake"]
 
508
  elif "region" in result and result["region"] == "full_image":
509
  fake_prob = result["deepfake_prob"]
510
  is_fake = result["is_fake"]
 
511
  else:
512
  progress_info.append("No deepfake detection results")
513
 
514
+ fake_regions = [r for r in deepfake_results if r.get("is_fake", False)]
515
+ if fake_regions:
516
+ progress_info.append("\n🚨 VERDICT: This image contains FAKE damage 🚨")
517
+ else:
518
+ progress_info.append("\n✅ VERDICT: All damage appears REAL")
519
  # Step 3: Visualize results
 
520
  result_img = visualize_results(img, damage_outputs, deepfake_results, float(damage_threshold))
521
 
522
  # Convert back to RGB for Gradio
523
  if len(result_img.shape) == 3 and result_img.shape[2] == 3:
524
  result_img = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)
525
 
 
526
 
527
  return result_img, "\n".join(progress_info)
528