Spaces:
Runtime error
Runtime error
Commit
·
8ecb82d
1
Parent(s):
c382687
V0
Browse files
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 |
-
|
| 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 |
-
|
| 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 |
-
|
| 497 |
-
|
| 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 |
-
|
| 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 |
|