Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
app.py
CHANGED
|
@@ -573,100 +573,33 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 573 |
Compare your custom trained YOLOv8 model against state-of-the-art Zero-Shot models!
|
| 574 |
""")
|
| 575 |
|
| 576 |
-
# ── TAB 1: Custom Models ──
|
| 577 |
-
with gr.Tab("Test Custom Models"):
|
| 578 |
-
with gr.Row():
|
| 579 |
-
with gr.Column(scale=1):
|
| 580 |
-
input_image_custom = gr.Image(type="numpy", label="Upload Window Image")
|
| 581 |
-
model_dropdown_custom = gr.Dropdown(
|
| 582 |
-
choices=[
|
| 583 |
-
"YOLOv8x-seg (Custom Window)",
|
| 584 |
-
"YOLOv8x-seg",
|
| 585 |
-
"YOLO11x-seg",
|
| 586 |
-
"SAM + YOLO (Strategy 1: Bbox + 5 Points)",
|
| 587 |
-
"SAM + YOLO (Strategy 2: Mask + 5 Points)",
|
| 588 |
-
"SAM + YOLO (Strategy 3: Direct Mask Prompting)",
|
| 589 |
-
"Mask R-CNN",
|
| 590 |
-
"SegFormer"
|
| 591 |
-
],
|
| 592 |
-
value="SegFormer",
|
| 593 |
-
label="Select Custom Model",
|
| 594 |
-
info="Choose between fine-tuned models and experimental architectures"
|
| 595 |
-
)
|
| 596 |
-
morph_checkbox = gr.Checkbox(
|
| 597 |
-
value=False,
|
| 598 |
-
label="Apply Morphological Cleanup",
|
| 599 |
-
info="Fills holes inside mask (Closing) and removes tiny noise blobs (Opening). Visual only — does not affect mAP metrics."
|
| 600 |
-
)
|
| 601 |
-
submit_btn_custom = gr.Button("Run Segmentation", variant="primary", size="lg")
|
| 602 |
-
with gr.Column(scale=1):
|
| 603 |
-
output_image_custom = gr.Image(label="Segmentation Result", interactive=False)
|
| 604 |
-
output_mask_custom = gr.Image(label="Binary Mask (White=Object, Black=Background)", interactive=False)
|
| 605 |
-
output_stats_custom = gr.Textbox(label="Detection Statistics", interactive=False)
|
| 606 |
|
| 607 |
-
if mirror_examples:
|
| 608 |
-
gr.Markdown("### Click any window image below to load it")
|
| 609 |
-
custom_gallery = gr.Gallery(value=mirror_examples, columns=10, height=120, object_fit="cover", allow_preview=False, show_label=False)
|
| 610 |
-
|
| 611 |
-
def load_mirror_img_custom(evt: gr.SelectData):
|
| 612 |
-
return mirror_examples[evt.index]
|
| 613 |
-
|
| 614 |
-
custom_gallery.select(fn=load_mirror_img_custom, inputs=None, outputs=input_image_custom)
|
| 615 |
|
| 616 |
-
|
| 617 |
-
|
| 618 |
-
|
| 619 |
-
|
| 620 |
-
)
|
| 621 |
|
| 622 |
-
|
| 623 |
-
with gr.Tab("Pretrained Zero-Shot Models"):
|
| 624 |
-
with gr.Row():
|
| 625 |
-
with gr.Column(scale=1):
|
| 626 |
-
input_image_pretrained = gr.Image(type="numpy", label="Upload Window Image")
|
| 627 |
-
model_dropdown_pretrained = gr.Dropdown(
|
| 628 |
-
choices=[
|
| 629 |
-
"Grounding DINO (Zero-Shot Detection)",
|
| 630 |
-
"Grounded SAM (Zero-Shot Segmentation)",
|
| 631 |
-
"Intelliarts Car Parts (Detectron2)"
|
| 632 |
-
],
|
| 633 |
-
value="Grounded SAM (Zero-Shot Segmentation)",
|
| 634 |
-
label="Select Pretrained Model",
|
| 635 |
-
info="Finds windows purely based on the text prompt you provide below!"
|
| 636 |
-
)
|
| 637 |
-
text_prompt = gr.Textbox(
|
| 638 |
-
value="car window. car glass. windshield.",
|
| 639 |
-
label="What to search for? (Text Prompt)",
|
| 640 |
-
info="Be sure to separate terms with a period."
|
| 641 |
-
)
|
| 642 |
-
submit_btn_pretrained = gr.Button("Run Zero-Shot Detection", variant="primary", size="lg")
|
| 643 |
-
with gr.Column(scale=1):
|
| 644 |
-
output_image_pretrained = gr.Image(label="Segmentation Result", interactive=False)
|
| 645 |
-
output_mask_pretrained = gr.Image(label="Binary Mask", interactive=False)
|
| 646 |
-
output_stats_pretrained = gr.Textbox(label="Detection Statistics", interactive=False)
|
| 647 |
|
| 648 |
-
|
| 649 |
-
|
| 650 |
-
|
| 651 |
-
|
| 652 |
-
|
| 653 |
-
|
| 654 |
-
|
| 655 |
-
pretrained_gallery.select(fn=load_mirror_img_pretrained, inputs=None, outputs=input_image_pretrained)
|
| 656 |
|
| 657 |
-
|
| 658 |
-
fn=process_image,
|
| 659 |
-
inputs=[input_image_pretrained, model_dropdown_pretrained, text_prompt],
|
| 660 |
-
outputs=[output_image_pretrained, output_mask_pretrained, output_stats_pretrained]
|
| 661 |
-
)
|
| 662 |
|
| 663 |
-
|
| 664 |
-
|
| 665 |
-
|
|
|
|
|
|
|
| 666 |
with gr.Row():
|
| 667 |
input_image_seq = gr.Image(type="numpy", label="Upload Window Image")
|
| 668 |
with gr.Row():
|
| 669 |
-
submit_btn_seq = gr.Button("Run All Models
|
| 670 |
|
| 671 |
if mirror_examples:
|
| 672 |
gr.Markdown("### Or click any example image below to load it:")
|
|
@@ -675,6 +608,8 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 675 |
compare_gallery.select(fn=load_compare_img, inputs=None, outputs=input_image_seq)
|
| 676 |
|
| 677 |
gr.Markdown("---")
|
|
|
|
|
|
|
| 678 |
gr.Markdown("### 1️⃣ YOLOv8x-seg")
|
| 679 |
with gr.Row():
|
| 680 |
seq_yolo_img = gr.Image(label="YOLO Overlay", interactive=False)
|
|
@@ -688,60 +623,114 @@ with gr.Blocks(theme=theme, title="Car Window Segmentation") as demo:
|
|
| 688 |
seq_yolo11_bw = gr.Image(label="YOLO11x Binary Mask", interactive=False, image_mode="L")
|
| 689 |
seq_yolo11_stats = gr.Textbox(label="YOLO11x Stats", interactive=False)
|
| 690 |
|
| 691 |
-
|
| 692 |
gr.Markdown("---")
|
| 693 |
-
gr.Markdown("###
|
| 694 |
with gr.Row():
|
| 695 |
seq_mrcnn_img = gr.Image(label="Mask R-CNN Overlay", interactive=False)
|
| 696 |
seq_mrcnn_bw = gr.Image(label="Mask R-CNN Binary Mask", interactive=False, image_mode="L")
|
| 697 |
seq_mrcnn_stats = gr.Textbox(label="Mask R-CNN Stats", interactive=False)
|
| 698 |
|
| 699 |
gr.Markdown("---")
|
| 700 |
-
gr.Markdown("###
|
| 701 |
with gr.Row():
|
| 702 |
seq_segf_img = gr.Image(label="SegFormer Overlay", interactive=False)
|
| 703 |
seq_segf_bw = gr.Image(label="SegFormer Binary Mask", interactive=False, image_mode="L")
|
| 704 |
seq_segf_stats = gr.Textbox(label="SegFormer Stats", interactive=False)
|
| 705 |
|
| 706 |
gr.Markdown("---")
|
| 707 |
-
gr.Markdown("###
|
| 708 |
with gr.Row():
|
| 709 |
seq_segf_morph_img = gr.Image(label="SegFormer + Morph Overlay", interactive=False)
|
| 710 |
seq_segf_morph_bw = gr.Image(label="SegFormer + Morph Binary Mask", interactive=False, image_mode="L")
|
| 711 |
seq_segf_morph_stats = gr.Textbox(label="SegFormer + Morph Stats", interactive=False)
|
| 712 |
|
| 713 |
-
|
| 714 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 715 |
|
| 716 |
-
# Run YOLO
|
| 717 |
yolo_out, yolo_mask, yolo_stats = process_image(img, "YOLOv8x-seg", "", False)
|
| 718 |
-
|
| 719 |
-
# Run YOLO11x
|
| 720 |
yolo11_out, yolo11_mask, yolo11_stats = process_image(img, "YOLO11x-seg", "", False)
|
| 721 |
-
|
| 722 |
-
# Run Mask R-CNN
|
| 723 |
mrcnn_out, mrcnn_mask, mrcnn_stats = process_image(img, "Mask R-CNN", "", False)
|
| 724 |
-
|
| 725 |
-
# Run SegFormer (Plain)
|
| 726 |
segf_out, segf_mask, segf_stats = run_segformer(img, morph_cleanup=False)
|
| 727 |
-
|
| 728 |
-
# Run SegFormer + Morphological Cleanup (Holes filled + Sharp borders)
|
| 729 |
segf_morph_out, segf_morph_mask, segf_morph_stats = run_segformer(img, morph_cleanup=True)
|
| 730 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 731 |
return (yolo_out, yolo_mask, yolo_stats,
|
| 732 |
yolo11_out, yolo11_mask, yolo11_stats,
|
| 733 |
mrcnn_out, mrcnn_mask, mrcnn_stats,
|
| 734 |
segf_out, segf_mask, segf_stats,
|
| 735 |
-
segf_morph_out, segf_morph_mask, segf_morph_stats
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 736 |
|
| 737 |
submit_btn_seq.click(
|
| 738 |
-
fn=
|
| 739 |
inputs=[input_image_seq],
|
| 740 |
outputs=[seq_yolo_img, seq_yolo_bw, seq_yolo_stats,
|
| 741 |
seq_yolo11_img, seq_yolo11_bw, seq_yolo11_stats,
|
| 742 |
seq_mrcnn_img, seq_mrcnn_bw, seq_mrcnn_stats,
|
| 743 |
seq_segf_img, seq_segf_bw, seq_segf_stats,
|
| 744 |
-
seq_segf_morph_img, seq_segf_morph_bw, seq_segf_morph_stats
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 745 |
)
|
| 746 |
|
| 747 |
if __name__ == "__main__":
|
|
|
|
| 573 |
Compare your custom trained YOLOv8 model against state-of-the-art Zero-Shot models!
|
| 574 |
""")
|
| 575 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 576 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 577 |
|
| 578 |
+
# ── TAB 3: Comprehensive Evaluation ──
|
| 579 |
+
with gr.Tab("Comprehensive Evaluation"):
|
| 580 |
+
gr.Markdown("### 🔍 Comprehensive Evaluation: Results from All Trained and Pretrained Models")
|
| 581 |
+
gr.Markdown("""**The following models will run and display their results below:**
|
|
|
|
| 582 |
|
| 583 |
+
**Custom Trained Models:**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 584 |
|
| 585 |
+
1. YOLOv8x-seg
|
| 586 |
+
2. YOLO11x-seg
|
| 587 |
+
3. Mask R-CNN
|
| 588 |
+
4. SegFormer
|
| 589 |
+
5. SegFormer + Morphological
|
| 590 |
+
6. SAM + YOLO (Strategy 1, 2, 3)
|
|
|
|
|
|
|
| 591 |
|
| 592 |
+
**Pretrained Zero-Shot Models:**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 593 |
|
| 594 |
+
1. Grounding DINO
|
| 595 |
+
2. Grounded SAM
|
| 596 |
+
3. Intelliarts Car Parts
|
| 597 |
+
""")
|
| 598 |
+
|
| 599 |
with gr.Row():
|
| 600 |
input_image_seq = gr.Image(type="numpy", label="Upload Window Image")
|
| 601 |
with gr.Row():
|
| 602 |
+
submit_btn_seq = gr.Button("Run All Models", variant="primary", size="lg")
|
| 603 |
|
| 604 |
if mirror_examples:
|
| 605 |
gr.Markdown("### Or click any example image below to load it:")
|
|
|
|
| 608 |
compare_gallery.select(fn=load_compare_img, inputs=None, outputs=input_image_seq)
|
| 609 |
|
| 610 |
gr.Markdown("---")
|
| 611 |
+
gr.Markdown("## 🚀 Custom Trained Models")
|
| 612 |
+
|
| 613 |
gr.Markdown("### 1️⃣ YOLOv8x-seg")
|
| 614 |
with gr.Row():
|
| 615 |
seq_yolo_img = gr.Image(label="YOLO Overlay", interactive=False)
|
|
|
|
| 623 |
seq_yolo11_bw = gr.Image(label="YOLO11x Binary Mask", interactive=False, image_mode="L")
|
| 624 |
seq_yolo11_stats = gr.Textbox(label="YOLO11x Stats", interactive=False)
|
| 625 |
|
|
|
|
| 626 |
gr.Markdown("---")
|
| 627 |
+
gr.Markdown("### 3️⃣ Mask R-CNN (ResNet50-FPN)")
|
| 628 |
with gr.Row():
|
| 629 |
seq_mrcnn_img = gr.Image(label="Mask R-CNN Overlay", interactive=False)
|
| 630 |
seq_mrcnn_bw = gr.Image(label="Mask R-CNN Binary Mask", interactive=False, image_mode="L")
|
| 631 |
seq_mrcnn_stats = gr.Textbox(label="Mask R-CNN Stats", interactive=False)
|
| 632 |
|
| 633 |
gr.Markdown("---")
|
| 634 |
+
gr.Markdown("### 4️⃣ SegFormer (Transformer - Best Model)")
|
| 635 |
with gr.Row():
|
| 636 |
seq_segf_img = gr.Image(label="SegFormer Overlay", interactive=False)
|
| 637 |
seq_segf_bw = gr.Image(label="SegFormer Binary Mask", interactive=False, image_mode="L")
|
| 638 |
seq_segf_stats = gr.Textbox(label="SegFormer Stats", interactive=False)
|
| 639 |
|
| 640 |
gr.Markdown("---")
|
| 641 |
+
gr.Markdown("### 5️⃣ SegFormer + Morphological Cleanup (Holes Filled + Sharp Borders)")
|
| 642 |
with gr.Row():
|
| 643 |
seq_segf_morph_img = gr.Image(label="SegFormer + Morph Overlay", interactive=False)
|
| 644 |
seq_segf_morph_bw = gr.Image(label="SegFormer + Morph Binary Mask", interactive=False, image_mode="L")
|
| 645 |
seq_segf_morph_stats = gr.Textbox(label="SegFormer + Morph Stats", interactive=False)
|
| 646 |
|
| 647 |
+
gr.Markdown("---")
|
| 648 |
+
gr.Markdown("### 6️⃣ SAM + YOLO (Strategy 1: Bbox + 5 Points)")
|
| 649 |
+
with gr.Row():
|
| 650 |
+
seq_sam1_img = gr.Image(label="SAM+YOLO Strat 1 Overlay", interactive=False)
|
| 651 |
+
seq_sam1_bw = gr.Image(label="SAM+YOLO Strat 1 Binary Mask", interactive=False, image_mode="L")
|
| 652 |
+
seq_sam1_stats = gr.Textbox(label="SAM+YOLO Strat 1 Stats", interactive=False)
|
| 653 |
+
|
| 654 |
+
gr.Markdown("---")
|
| 655 |
+
gr.Markdown("### 7️⃣ SAM + YOLO (Strategy 2: Mask + 5 Points)")
|
| 656 |
+
with gr.Row():
|
| 657 |
+
seq_sam2_img = gr.Image(label="SAM+YOLO Strat 2 Overlay", interactive=False)
|
| 658 |
+
seq_sam2_bw = gr.Image(label="SAM+YOLO Strat 2 Binary Mask", interactive=False, image_mode="L")
|
| 659 |
+
seq_sam2_stats = gr.Textbox(label="SAM+YOLO Strat 2 Stats", interactive=False)
|
| 660 |
+
|
| 661 |
+
gr.Markdown("---")
|
| 662 |
+
gr.Markdown("### 8️⃣ SAM + YOLO (Strategy 3: Direct Mask Prompting)")
|
| 663 |
+
with gr.Row():
|
| 664 |
+
seq_sam3_img = gr.Image(label="SAM+YOLO Strat 3 Overlay", interactive=False)
|
| 665 |
+
seq_sam3_bw = gr.Image(label="SAM+YOLO Strat 3 Binary Mask", interactive=False, image_mode="L")
|
| 666 |
+
seq_sam3_stats = gr.Textbox(label="SAM+YOLO Strat 3 Stats", interactive=False)
|
| 667 |
+
|
| 668 |
+
gr.Markdown("---")
|
| 669 |
+
gr.Markdown("## 🌍 Pretrained Zero-Shot Models")
|
| 670 |
+
|
| 671 |
+
gr.Markdown("### 9️⃣ Grounding DINO (Zero-Shot Detection)")
|
| 672 |
+
with gr.Row():
|
| 673 |
+
seq_dino_img = gr.Image(label="Grounding DINO Overlay", interactive=False)
|
| 674 |
+
seq_dino_bw = gr.Image(label="Grounding DINO Binary Mask", interactive=False, image_mode="L")
|
| 675 |
+
seq_dino_stats = gr.Textbox(label="Grounding DINO Stats", interactive=False)
|
| 676 |
+
|
| 677 |
+
gr.Markdown("---")
|
| 678 |
+
gr.Markdown("### 🔟 Grounded SAM (Zero-Shot Segmentation)")
|
| 679 |
+
with gr.Row():
|
| 680 |
+
seq_gsam_img = gr.Image(label="Grounded SAM Overlay", interactive=False)
|
| 681 |
+
seq_gsam_bw = gr.Image(label="Grounded SAM Binary Mask", interactive=False, image_mode="L")
|
| 682 |
+
seq_gsam_stats = gr.Textbox(label="Grounded SAM Stats", interactive=False)
|
| 683 |
+
|
| 684 |
+
gr.Markdown("---")
|
| 685 |
+
gr.Markdown("### 1️⃣1️⃣ Intelliarts Car Parts (Detectron2)")
|
| 686 |
+
with gr.Row():
|
| 687 |
+
seq_intell_img = gr.Image(label="Intelliarts Car Parts Overlay", interactive=False)
|
| 688 |
+
seq_intell_bw = gr.Image(label="Intelliarts Car Parts Binary Mask", interactive=False, image_mode="L")
|
| 689 |
+
seq_intell_stats = gr.Textbox(label="Intelliarts Car Parts Stats", interactive=False)
|
| 690 |
+
|
| 691 |
+
def run_all_models(img):
|
| 692 |
+
if img is None: return [None]*33
|
| 693 |
|
|
|
|
| 694 |
yolo_out, yolo_mask, yolo_stats = process_image(img, "YOLOv8x-seg", "", False)
|
|
|
|
|
|
|
| 695 |
yolo11_out, yolo11_mask, yolo11_stats = process_image(img, "YOLO11x-seg", "", False)
|
|
|
|
|
|
|
| 696 |
mrcnn_out, mrcnn_mask, mrcnn_stats = process_image(img, "Mask R-CNN", "", False)
|
|
|
|
|
|
|
| 697 |
segf_out, segf_mask, segf_stats = run_segformer(img, morph_cleanup=False)
|
|
|
|
|
|
|
| 698 |
segf_morph_out, segf_morph_mask, segf_morph_stats = run_segformer(img, morph_cleanup=True)
|
| 699 |
|
| 700 |
+
sam1_out, sam1_mask, sam1_stats = process_image(img, "SAM + YOLO (Strategy 1: Bbox + 5 Points)", "", False)
|
| 701 |
+
sam2_out, sam2_mask, sam2_stats = process_image(img, "SAM + YOLO (Strategy 2: Mask + 5 Points)", "", False)
|
| 702 |
+
sam3_out, sam3_mask, sam3_stats = process_image(img, "SAM + YOLO (Strategy 3: Direct Mask Prompting)", "", False)
|
| 703 |
+
|
| 704 |
+
dino_out, dino_mask, dino_stats = process_image(img, "Grounding DINO (Zero-Shot Detection)", "car window. car glass. windshield.", False)
|
| 705 |
+
gsam_out, gsam_mask, gsam_stats = process_image(img, "Grounded SAM (Zero-Shot Segmentation)", "car window. car glass. windshield.", False)
|
| 706 |
+
intell_out, intell_mask, intell_stats = process_image(img, "Intelliarts Car Parts (Detectron2)", "", False)
|
| 707 |
+
|
| 708 |
return (yolo_out, yolo_mask, yolo_stats,
|
| 709 |
yolo11_out, yolo11_mask, yolo11_stats,
|
| 710 |
mrcnn_out, mrcnn_mask, mrcnn_stats,
|
| 711 |
segf_out, segf_mask, segf_stats,
|
| 712 |
+
segf_morph_out, segf_morph_mask, segf_morph_stats,
|
| 713 |
+
sam1_out, sam1_mask, sam1_stats,
|
| 714 |
+
sam2_out, sam2_mask, sam2_stats,
|
| 715 |
+
sam3_out, sam3_mask, sam3_stats,
|
| 716 |
+
dino_out, dino_mask, dino_stats,
|
| 717 |
+
gsam_out, gsam_mask, gsam_stats,
|
| 718 |
+
intell_out, intell_mask, intell_stats)
|
| 719 |
|
| 720 |
submit_btn_seq.click(
|
| 721 |
+
fn=run_all_models,
|
| 722 |
inputs=[input_image_seq],
|
| 723 |
outputs=[seq_yolo_img, seq_yolo_bw, seq_yolo_stats,
|
| 724 |
seq_yolo11_img, seq_yolo11_bw, seq_yolo11_stats,
|
| 725 |
seq_mrcnn_img, seq_mrcnn_bw, seq_mrcnn_stats,
|
| 726 |
seq_segf_img, seq_segf_bw, seq_segf_stats,
|
| 727 |
+
seq_segf_morph_img, seq_segf_morph_bw, seq_segf_morph_stats,
|
| 728 |
+
seq_sam1_img, seq_sam1_bw, seq_sam1_stats,
|
| 729 |
+
seq_sam2_img, seq_sam2_bw, seq_sam2_stats,
|
| 730 |
+
seq_sam3_img, seq_sam3_bw, seq_sam3_stats,
|
| 731 |
+
seq_dino_img, seq_dino_bw, seq_dino_stats,
|
| 732 |
+
seq_gsam_img, seq_gsam_bw, seq_gsam_stats,
|
| 733 |
+
seq_intell_img, seq_intell_bw, seq_intell_stats]
|
| 734 |
)
|
| 735 |
|
| 736 |
if __name__ == "__main__":
|