Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
app.py
CHANGED
|
@@ -499,6 +499,70 @@ def run_segformer(img_rgb, morph_cleanup=False):
|
|
| 499 |
except Exception as e:
|
| 500 |
return img_rgb, None, f"SegFormer Error: {e}"
|
| 501 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 502 |
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 503 |
# Gradio Process Function
|
| 504 |
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -582,22 +646,23 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 582 |
|
| 583 |
**Custom Trained Models:**
|
| 584 |
|
| 585 |
-
1.
|
| 586 |
2. YOLO11x-seg
|
| 587 |
-
3.
|
| 588 |
-
4.
|
| 589 |
-
5.
|
| 590 |
-
6.
|
| 591 |
-
7. SAM + YOLO (Strategy
|
| 592 |
-
8. SAM + YOLO (Strategy
|
|
|
|
| 593 |
|
| 594 |
**Pretrained Zero-Shot Models:**
|
| 595 |
|
| 596 |
-
|
| 597 |
-
|
| 598 |
-
|
| 599 |
|
| 600 |
-
**Our Findings:** SegFormer and YOLO11x deliver the best performance with significantly sharper edge precision.
|
| 601 |
""")
|
| 602 |
|
| 603 |
with gr.Row():
|
|
@@ -614,12 +679,12 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 614 |
gr.Markdown("---")
|
| 615 |
gr.Markdown("## π Custom Trained Models")
|
| 616 |
|
| 617 |
-
gr.Markdown("### 1οΈβ£
|
| 618 |
with gr.Row():
|
| 619 |
-
|
| 620 |
-
|
| 621 |
-
|
| 622 |
-
|
| 623 |
gr.Markdown("---")
|
| 624 |
gr.Markdown("### 2οΈβ£ YOLO11x-seg")
|
| 625 |
with gr.Row():
|
|
@@ -628,42 +693,49 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 628 |
seq_yolo11_stats = gr.Textbox(label="YOLO11x Stats", interactive=False)
|
| 629 |
|
| 630 |
gr.Markdown("---")
|
| 631 |
-
gr.Markdown("### 3οΈβ£
|
| 632 |
with gr.Row():
|
| 633 |
-
|
| 634 |
-
|
| 635 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 636 |
|
| 637 |
gr.Markdown("---")
|
| 638 |
-
gr.Markdown("###
|
| 639 |
with gr.Row():
|
| 640 |
-
|
| 641 |
-
|
| 642 |
-
|
| 643 |
|
| 644 |
gr.Markdown("---")
|
| 645 |
-
gr.Markdown("###
|
| 646 |
with gr.Row():
|
| 647 |
seq_segf_morph_img = gr.Image(label="SegFormer + Morph Overlay", interactive=False)
|
| 648 |
seq_segf_morph_bw = gr.Image(label="SegFormer + Morph Binary Mask", interactive=False, image_mode="L")
|
| 649 |
seq_segf_morph_stats = gr.Textbox(label="SegFormer + Morph Stats", interactive=False)
|
| 650 |
|
| 651 |
gr.Markdown("---")
|
| 652 |
-
gr.Markdown("###
|
| 653 |
with gr.Row():
|
| 654 |
seq_sam1_img = gr.Image(label="SAM+YOLO Strat 1 Overlay", interactive=False)
|
| 655 |
seq_sam1_bw = gr.Image(label="SAM+YOLO Strat 1 Binary Mask", interactive=False, image_mode="L")
|
| 656 |
seq_sam1_stats = gr.Textbox(label="SAM+YOLO Strat 1 Stats", interactive=False)
|
| 657 |
|
| 658 |
gr.Markdown("---")
|
| 659 |
-
gr.Markdown("###
|
| 660 |
with gr.Row():
|
| 661 |
seq_sam2_img = gr.Image(label="SAM+YOLO Strat 2 Overlay", interactive=False)
|
| 662 |
seq_sam2_bw = gr.Image(label="SAM+YOLO Strat 2 Binary Mask", interactive=False, image_mode="L")
|
| 663 |
seq_sam2_stats = gr.Textbox(label="SAM+YOLO Strat 2 Stats", interactive=False)
|
| 664 |
|
| 665 |
gr.Markdown("---")
|
| 666 |
-
gr.Markdown("###
|
| 667 |
with gr.Row():
|
| 668 |
seq_sam3_img = gr.Image(label="SAM+YOLO Strat 3 Overlay", interactive=False)
|
| 669 |
seq_sam3_bw = gr.Image(label="SAM+YOLO Strat 3 Binary Mask", interactive=False, image_mode="L")
|
|
@@ -672,21 +744,21 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 672 |
gr.Markdown("---")
|
| 673 |
gr.Markdown("## π Pretrained Zero-Shot Models")
|
| 674 |
|
| 675 |
-
gr.Markdown("###
|
| 676 |
with gr.Row():
|
| 677 |
seq_dino_img = gr.Image(label="Grounding DINO Overlay", interactive=False)
|
| 678 |
seq_dino_bw = gr.Image(label="Grounding DINO Binary Mask", interactive=False, image_mode="L")
|
| 679 |
seq_dino_stats = gr.Textbox(label="Grounding DINO Stats", interactive=False)
|
| 680 |
|
| 681 |
gr.Markdown("---")
|
| 682 |
-
gr.Markdown("###
|
| 683 |
with gr.Row():
|
| 684 |
seq_gsam_img = gr.Image(label="Grounded SAM Overlay", interactive=False)
|
| 685 |
seq_gsam_bw = gr.Image(label="Grounded SAM Binary Mask", interactive=False, image_mode="L")
|
| 686 |
seq_gsam_stats = gr.Textbox(label="Grounded SAM Stats", interactive=False)
|
| 687 |
|
| 688 |
gr.Markdown("---")
|
| 689 |
-
gr.Markdown("### 1οΈβ£
|
| 690 |
with gr.Row():
|
| 691 |
seq_intell_img = gr.Image(label="Intelliarts Car Parts Overlay", interactive=False)
|
| 692 |
seq_intell_bw = gr.Image(label="Intelliarts Car Parts Binary Mask", interactive=False, image_mode="L")
|
|
@@ -694,63 +766,68 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 694 |
|
| 695 |
def run_all_models(img):
|
| 696 |
if img is None:
|
| 697 |
-
yield tuple([None]*
|
| 698 |
return
|
| 699 |
|
| 700 |
-
# Initialize empty array for all
|
| 701 |
-
results = [None] *
|
| 702 |
|
| 703 |
-
# 1.
|
| 704 |
-
results[0], results[1], results[2] =
|
| 705 |
yield tuple(results)
|
| 706 |
|
| 707 |
# 2. YOLO11x-seg
|
| 708 |
results[3], results[4], results[5] = process_image(img, "YOLO11x-seg", "", False)
|
| 709 |
yield tuple(results)
|
| 710 |
|
| 711 |
-
# 3.
|
| 712 |
-
results[6], results[7], results[8] =
|
|
|
|
|
|
|
|
|
|
|
|
|
| 713 |
yield tuple(results)
|
| 714 |
|
| 715 |
-
#
|
| 716 |
-
results[
|
| 717 |
yield tuple(results)
|
| 718 |
|
| 719 |
-
#
|
| 720 |
-
results[
|
| 721 |
yield tuple(results)
|
| 722 |
|
| 723 |
-
#
|
| 724 |
-
results[
|
| 725 |
yield tuple(results)
|
| 726 |
|
| 727 |
-
#
|
| 728 |
-
results[
|
| 729 |
yield tuple(results)
|
| 730 |
|
| 731 |
-
#
|
| 732 |
-
results[
|
| 733 |
yield tuple(results)
|
| 734 |
|
| 735 |
-
#
|
| 736 |
-
results[
|
| 737 |
yield tuple(results)
|
| 738 |
|
| 739 |
-
#
|
| 740 |
-
results[
|
| 741 |
yield tuple(results)
|
| 742 |
|
| 743 |
-
#
|
| 744 |
-
results[
|
| 745 |
yield tuple(results)
|
| 746 |
|
| 747 |
submit_btn_seq.click(
|
| 748 |
fn=run_all_models,
|
| 749 |
inputs=[input_image_seq],
|
| 750 |
-
outputs=[
|
| 751 |
seq_yolo11_img, seq_yolo11_bw, seq_yolo11_stats,
|
|
|
|
|
|
|
| 752 |
seq_mrcnn_img, seq_mrcnn_bw, seq_mrcnn_stats,
|
| 753 |
-
seq_segf_img, seq_segf_bw, seq_segf_stats,
|
| 754 |
seq_segf_morph_img, seq_segf_morph_bw, seq_segf_morph_stats,
|
| 755 |
seq_sam1_img, seq_sam1_bw, seq_sam1_stats,
|
| 756 |
seq_sam2_img, seq_sam2_bw, seq_sam2_stats,
|
|
|
|
| 499 |
except Exception as e:
|
| 500 |
return img_rgb, None, f"SegFormer Error: {e}"
|
| 501 |
|
| 502 |
+
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 503 |
+
# BiRefNet Function
|
| 504 |
+
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 505 |
+
def run_birefnet(img_rgb):
|
| 506 |
+
try:
|
| 507 |
+
from transformers import AutoModelForImageSegmentation
|
| 508 |
+
from torchvision import transforms
|
| 509 |
+
import torch.nn.functional as F
|
| 510 |
+
|
| 511 |
+
t0 = time.time()
|
| 512 |
+
|
| 513 |
+
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 514 |
+
|
| 515 |
+
# Paths to try (works for local PC and Hugging Face Cloud deployment)
|
| 516 |
+
paths_to_try = [
|
| 517 |
+
os.path.join(base_dir, "BiRefNet_Model", "best_model-20260624T051601Z-3-001", "best_model"), # Local PC
|
| 518 |
+
"birefnet_model", # Hugging Face Root / Root dir
|
| 519 |
+
os.path.join(os.path.dirname(os.path.abspath(__file__)), "birefnet_model"), # Next to app.py
|
| 520 |
+
"best_birefnet_model" # Extra fallback
|
| 521 |
+
]
|
| 522 |
+
|
| 523 |
+
model_path = None
|
| 524 |
+
for p in paths_to_try:
|
| 525 |
+
if os.path.exists(p) and os.path.exists(os.path.join(p, "config.json")):
|
| 526 |
+
model_path = p
|
| 527 |
+
break
|
| 528 |
+
|
| 529 |
+
# Final fallback: Download directly from Hugging Face Model Repo!
|
| 530 |
+
if model_path is None:
|
| 531 |
+
model_path = "Ayesha-Majeed/birefnet_car_window"
|
| 532 |
+
|
| 533 |
+
model = AutoModelForImageSegmentation.from_pretrained(model_path, trust_remote_code=True).to(DEVICE)
|
| 534 |
+
model.eval()
|
| 535 |
+
|
| 536 |
+
image_transform = transforms.Compose([
|
| 537 |
+
transforms.Resize((1024, 1024)),
|
| 538 |
+
transforms.ToTensor(),
|
| 539 |
+
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
|
| 540 |
+
])
|
| 541 |
+
|
| 542 |
+
from PIL import Image
|
| 543 |
+
pil_img = Image.fromarray(img_rgb)
|
| 544 |
+
input_tensor = image_transform(pil_img).unsqueeze(0).to(DEVICE)
|
| 545 |
+
|
| 546 |
+
with torch.no_grad():
|
| 547 |
+
if DEVICE == "cuda":
|
| 548 |
+
with torch.amp.autocast("cuda"):
|
| 549 |
+
preds = model(input_tensor)
|
| 550 |
+
final_pred = preds[-1] if isinstance(preds, (list, tuple)) else preds
|
| 551 |
+
else:
|
| 552 |
+
preds = model(input_tensor)
|
| 553 |
+
final_pred = preds[-1] if isinstance(preds, (list, tuple)) else preds
|
| 554 |
+
|
| 555 |
+
h, w = img_rgb.shape[:2]
|
| 556 |
+
final_pred = F.interpolate(final_pred, size=(h, w), mode="bilinear", align_corners=False)
|
| 557 |
+
pred_mask = (torch.sigmoid(final_pred) > 0.5).squeeze().cpu().numpy().astype(np.uint8)
|
| 558 |
+
|
| 559 |
+
elapsed = time.time() - t0
|
| 560 |
+
out = apply_mask_overlay(img_rgb, pred_mask > 0, color=(255, 0, 0)) # Red
|
| 561 |
+
bw_mask = (pred_mask * 255).astype(np.uint8)
|
| 562 |
+
return out, bw_mask, f"Found: 1 (Semantic) | Inference: {elapsed:.2f}s"
|
| 563 |
+
except Exception as e:
|
| 564 |
+
return img_rgb, None, f"BiRefNet Error: {e}"
|
| 565 |
+
|
| 566 |
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 567 |
# Gradio Process Function
|
| 568 |
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
| 646 |
|
| 647 |
**Custom Trained Models:**
|
| 648 |
|
| 649 |
+
1. SegFormer
|
| 650 |
2. YOLO11x-seg
|
| 651 |
+
3. BiRefNet
|
| 652 |
+
4. YOLOv8x-seg
|
| 653 |
+
5. Mask R-CNN
|
| 654 |
+
6. SegFormer + Morphological
|
| 655 |
+
7. SAM + YOLO (Strategy 1: Bbox + 5 Points)
|
| 656 |
+
8. SAM + YOLO (Strategy 2: Mask + 5 Points)
|
| 657 |
+
9. SAM + YOLO (Strategy 3: Direct Mask Prompting)
|
| 658 |
|
| 659 |
**Pretrained Zero-Shot Models:**
|
| 660 |
|
| 661 |
+
10. Grounding DINO
|
| 662 |
+
11. Grounded SAM
|
| 663 |
+
12. Intelliarts Car Parts
|
| 664 |
|
| 665 |
+
**Our Findings:** BiRefNet, SegFormer, and YOLO11x deliver the best performance with significantly sharper edge precision.
|
| 666 |
""")
|
| 667 |
|
| 668 |
with gr.Row():
|
|
|
|
| 679 |
gr.Markdown("---")
|
| 680 |
gr.Markdown("## π Custom Trained Models")
|
| 681 |
|
| 682 |
+
gr.Markdown("### 1οΈβ£ SegFormer (Transformer)")
|
| 683 |
with gr.Row():
|
| 684 |
+
seq_segf_img = gr.Image(label="SegFormer Overlay", interactive=False)
|
| 685 |
+
seq_segf_bw = gr.Image(label="SegFormer Binary Mask", interactive=False, image_mode="L")
|
| 686 |
+
seq_segf_stats = gr.Textbox(label="SegFormer Stats", interactive=False)
|
| 687 |
+
|
| 688 |
gr.Markdown("---")
|
| 689 |
gr.Markdown("### 2οΈβ£ YOLO11x-seg")
|
| 690 |
with gr.Row():
|
|
|
|
| 693 |
seq_yolo11_stats = gr.Textbox(label="YOLO11x Stats", interactive=False)
|
| 694 |
|
| 695 |
gr.Markdown("---")
|
| 696 |
+
gr.Markdown("### 3οΈβ£ BiRefNet (Boundary-Aware Model)")
|
| 697 |
with gr.Row():
|
| 698 |
+
seq_biref_img = gr.Image(label="BiRefNet Overlay", interactive=False)
|
| 699 |
+
seq_biref_bw = gr.Image(label="BiRefNet Binary Mask", interactive=False, image_mode="L")
|
| 700 |
+
seq_biref_stats = gr.Textbox(label="BiRefNet Stats", interactive=False)
|
| 701 |
+
|
| 702 |
+
gr.Markdown("---")
|
| 703 |
+
gr.Markdown("### 4οΈβ£ YOLOv8x-seg")
|
| 704 |
+
with gr.Row():
|
| 705 |
+
seq_yolo_img = gr.Image(label="YOLO Overlay", interactive=False)
|
| 706 |
+
seq_yolo_bw = gr.Image(label="YOLO Binary Mask", interactive=False, image_mode="L")
|
| 707 |
+
seq_yolo_stats = gr.Textbox(label="YOLO Stats", interactive=False)
|
| 708 |
|
| 709 |
gr.Markdown("---")
|
| 710 |
+
gr.Markdown("### 5οΈβ£ Mask R-CNN (ResNet50-FPN)")
|
| 711 |
with gr.Row():
|
| 712 |
+
seq_mrcnn_img = gr.Image(label="Mask R-CNN Overlay", interactive=False)
|
| 713 |
+
seq_mrcnn_bw = gr.Image(label="Mask R-CNN Binary Mask", interactive=False, image_mode="L")
|
| 714 |
+
seq_mrcnn_stats = gr.Textbox(label="Mask R-CNN Stats", interactive=False)
|
| 715 |
|
| 716 |
gr.Markdown("---")
|
| 717 |
+
gr.Markdown("### 6οΈβ£ SegFormer + Morphological Cleanup (Holes Filled + Sharp Borders)")
|
| 718 |
with gr.Row():
|
| 719 |
seq_segf_morph_img = gr.Image(label="SegFormer + Morph Overlay", interactive=False)
|
| 720 |
seq_segf_morph_bw = gr.Image(label="SegFormer + Morph Binary Mask", interactive=False, image_mode="L")
|
| 721 |
seq_segf_morph_stats = gr.Textbox(label="SegFormer + Morph Stats", interactive=False)
|
| 722 |
|
| 723 |
gr.Markdown("---")
|
| 724 |
+
gr.Markdown("### 7οΈβ£ SAM + YOLO (Strategy 1: Bbox + 5 Points)")
|
| 725 |
with gr.Row():
|
| 726 |
seq_sam1_img = gr.Image(label="SAM+YOLO Strat 1 Overlay", interactive=False)
|
| 727 |
seq_sam1_bw = gr.Image(label="SAM+YOLO Strat 1 Binary Mask", interactive=False, image_mode="L")
|
| 728 |
seq_sam1_stats = gr.Textbox(label="SAM+YOLO Strat 1 Stats", interactive=False)
|
| 729 |
|
| 730 |
gr.Markdown("---")
|
| 731 |
+
gr.Markdown("### 8οΈβ£ SAM + YOLO (Strategy 2: Mask + 5 Points)")
|
| 732 |
with gr.Row():
|
| 733 |
seq_sam2_img = gr.Image(label="SAM+YOLO Strat 2 Overlay", interactive=False)
|
| 734 |
seq_sam2_bw = gr.Image(label="SAM+YOLO Strat 2 Binary Mask", interactive=False, image_mode="L")
|
| 735 |
seq_sam2_stats = gr.Textbox(label="SAM+YOLO Strat 2 Stats", interactive=False)
|
| 736 |
|
| 737 |
gr.Markdown("---")
|
| 738 |
+
gr.Markdown("### 9οΈβ£ SAM + YOLO (Strategy 3: Direct Mask Prompting)")
|
| 739 |
with gr.Row():
|
| 740 |
seq_sam3_img = gr.Image(label="SAM+YOLO Strat 3 Overlay", interactive=False)
|
| 741 |
seq_sam3_bw = gr.Image(label="SAM+YOLO Strat 3 Binary Mask", interactive=False, image_mode="L")
|
|
|
|
| 744 |
gr.Markdown("---")
|
| 745 |
gr.Markdown("## π Pretrained Zero-Shot Models")
|
| 746 |
|
| 747 |
+
gr.Markdown("### π Grounding DINO (Zero-Shot Detection)")
|
| 748 |
with gr.Row():
|
| 749 |
seq_dino_img = gr.Image(label="Grounding DINO Overlay", interactive=False)
|
| 750 |
seq_dino_bw = gr.Image(label="Grounding DINO Binary Mask", interactive=False, image_mode="L")
|
| 751 |
seq_dino_stats = gr.Textbox(label="Grounding DINO Stats", interactive=False)
|
| 752 |
|
| 753 |
gr.Markdown("---")
|
| 754 |
+
gr.Markdown("### 1οΈβ£1οΈβ£ Grounded SAM (Zero-Shot Segmentation)")
|
| 755 |
with gr.Row():
|
| 756 |
seq_gsam_img = gr.Image(label="Grounded SAM Overlay", interactive=False)
|
| 757 |
seq_gsam_bw = gr.Image(label="Grounded SAM Binary Mask", interactive=False, image_mode="L")
|
| 758 |
seq_gsam_stats = gr.Textbox(label="Grounded SAM Stats", interactive=False)
|
| 759 |
|
| 760 |
gr.Markdown("---")
|
| 761 |
+
gr.Markdown("### 1οΈβ£2οΈβ£ Intelliarts Car Parts (Detectron2)")
|
| 762 |
with gr.Row():
|
| 763 |
seq_intell_img = gr.Image(label="Intelliarts Car Parts Overlay", interactive=False)
|
| 764 |
seq_intell_bw = gr.Image(label="Intelliarts Car Parts Binary Mask", interactive=False, image_mode="L")
|
|
|
|
| 766 |
|
| 767 |
def run_all_models(img):
|
| 768 |
if img is None:
|
| 769 |
+
yield tuple([None]*36)
|
| 770 |
return
|
| 771 |
|
| 772 |
+
# Initialize empty array for all 36 outputs
|
| 773 |
+
results = [None] * 36
|
| 774 |
|
| 775 |
+
# 1. SegFormer
|
| 776 |
+
results[0], results[1], results[2] = run_segformer(img, morph_cleanup=False)
|
| 777 |
yield tuple(results)
|
| 778 |
|
| 779 |
# 2. YOLO11x-seg
|
| 780 |
results[3], results[4], results[5] = process_image(img, "YOLO11x-seg", "", False)
|
| 781 |
yield tuple(results)
|
| 782 |
|
| 783 |
+
# 3. BiRefNet
|
| 784 |
+
results[6], results[7], results[8] = run_birefnet(img)
|
| 785 |
+
yield tuple(results)
|
| 786 |
+
|
| 787 |
+
# 4. YOLOv8x-seg
|
| 788 |
+
results[9], results[10], results[11] = process_image(img, "YOLOv8x-seg", "", False)
|
| 789 |
yield tuple(results)
|
| 790 |
|
| 791 |
+
# 5. Mask R-CNN
|
| 792 |
+
results[12], results[13], results[14] = process_image(img, "Mask R-CNN", "", False)
|
| 793 |
yield tuple(results)
|
| 794 |
|
| 795 |
+
# 6. SegFormer + Morphology
|
| 796 |
+
results[15], results[16], results[17] = run_segformer(img, morph_cleanup=True)
|
| 797 |
yield tuple(results)
|
| 798 |
|
| 799 |
+
# 7. SAM + YOLO Strat 1
|
| 800 |
+
results[18], results[19], results[20] = process_image(img, "SAM + YOLO (Strategy 1: Bbox + 5 Points)", "", False)
|
| 801 |
yield tuple(results)
|
| 802 |
|
| 803 |
+
# 8. SAM + YOLO Strat 2
|
| 804 |
+
results[21], results[22], results[23] = process_image(img, "SAM + YOLO (Strategy 2: Mask + 5 Points)", "", False)
|
| 805 |
yield tuple(results)
|
| 806 |
|
| 807 |
+
# 9. SAM + YOLO Strat 3
|
| 808 |
+
results[24], results[25], results[26] = process_image(img, "SAM + YOLO (Strategy 3: Direct Mask Prompting)", "", False)
|
| 809 |
yield tuple(results)
|
| 810 |
|
| 811 |
+
# 10. Grounding DINO
|
| 812 |
+
results[27], results[28], results[29] = process_image(img, "Grounding DINO (Zero-Shot Detection)", "car window. car glass. windshield.", False)
|
| 813 |
yield tuple(results)
|
| 814 |
|
| 815 |
+
# 11. Grounded SAM
|
| 816 |
+
results[30], results[31], results[32] = process_image(img, "Grounded SAM (Zero-Shot Segmentation)", "car window. car glass. windshield.", False)
|
| 817 |
yield tuple(results)
|
| 818 |
|
| 819 |
+
# 12. Intelliarts
|
| 820 |
+
results[33], results[34], results[35] = process_image(img, "Intelliarts Car Parts (Detectron2)", "", False)
|
| 821 |
yield tuple(results)
|
| 822 |
|
| 823 |
submit_btn_seq.click(
|
| 824 |
fn=run_all_models,
|
| 825 |
inputs=[input_image_seq],
|
| 826 |
+
outputs=[seq_segf_img, seq_segf_bw, seq_segf_stats,
|
| 827 |
seq_yolo11_img, seq_yolo11_bw, seq_yolo11_stats,
|
| 828 |
+
seq_biref_img, seq_biref_bw, seq_biref_stats,
|
| 829 |
+
seq_yolo_img, seq_yolo_bw, seq_yolo_stats,
|
| 830 |
seq_mrcnn_img, seq_mrcnn_bw, seq_mrcnn_stats,
|
|
|
|
| 831 |
seq_segf_morph_img, seq_segf_morph_bw, seq_segf_morph_stats,
|
| 832 |
seq_sam1_img, seq_sam1_bw, seq_sam1_stats,
|
| 833 |
seq_sam2_img, seq_sam2_bw, seq_sam2_stats,
|