Spaces:
Running on Zero
Running on Zero
Redesign with high-resolution urban cases
Browse files- README.md +8 -7
- app.py +88 -56
- assets/cases/dense_residential.jpg +0 -0
- assets/cases/harbor_marina.jpg +0 -0
- assets/cases/parking_lot.jpg +0 -0
- assets/cases/urban_intersection.jpg +0 -0
- tests/test_app_contract.py +5 -4
README.md
CHANGED
|
@@ -50,17 +50,18 @@ Every run creates visual and machine-readable outputs:
|
|
| 50 |
- Independent Gradio API endpoints at `/classify`, `/segment`, `/detect`, and `/analyze`.
|
| 51 |
- A reusable Codex skill and command-line Space client.
|
| 52 |
|
| 53 |
-
##
|
| 54 |
|
| 55 |
-
The interface includes
|
| 56 |
|
| 57 |
-
| Case |
|
| 58 |
|---|---|---|
|
| 59 |
-
|
|
| 60 |
-
|
|
| 61 |
-
|
|
|
|
|
| 62 |
|
| 63 |
-
These are method-exploration examples, not ground-truth demonstrations.
|
| 64 |
|
| 65 |
## How it works
|
| 66 |
|
|
|
|
| 50 |
- Independent Gradio API endpoints at `/classify`, `/segment`, `/detect`, and `/analyze`.
|
| 51 |
- A reusable Codex skill and command-line Space client.
|
| 52 |
|
| 53 |
+
## Urban sample scenes
|
| 54 |
|
| 55 |
+
The interface includes four visible, one-click urban chips from the [UC Merced Land Use dataset](https://huggingface.co/datasets/blanchon/UC_Merced). Each is a 256×256 RGB aerial image at approximately 0.3 m spatial resolution, derived from USGS National Map Urban Area Imagery.
|
| 56 |
|
| 57 |
+
| Case | Urban features | Suggested use |
|
| 58 |
|---|---|---|
|
| 59 |
+
| Dense residential | roofs, streets, impervious surfaces | Review residential LULC confidence and building/pavement segmentation |
|
| 60 |
+
| Urban intersection | road markings, pavement, small vehicles | Test road segmentation and the limits of small-object detection |
|
| 61 |
+
| Marina / harbor | water, docks, tightly spaced boats | Compare water cover with ship/harbor predictions |
|
| 62 |
+
| Parking lot | pavement and tightly packed vehicles | Probe pavement share and vehicle detection sensitivity |
|
| 63 |
|
| 64 |
+
These images are method-exploration examples, not ground-truth demonstrations. Their sub-meter aerial scale differs substantially from the EuroSAT classifier's Sentinel-2 training domain, so classification results should be interpreted as domain-shifted hypotheses.
|
| 65 |
|
| 66 |
## How it works
|
| 67 |
|
app.py
CHANGED
|
@@ -66,26 +66,33 @@ OPEN_EARTH_MAP_LABELS = {
|
|
| 66 |
8: "building",
|
| 67 |
}
|
| 68 |
CASE_STUDIES = {
|
| 69 |
-
"
|
| 70 |
-
"title": "
|
| 71 |
-
"image": "
|
| 72 |
-
"source": "https://
|
| 73 |
-
"sensor": "
|
| 74 |
-
"focus": "
|
| 75 |
},
|
| 76 |
-
"
|
| 77 |
-
"title": "
|
| 78 |
-
"image": "
|
| 79 |
-
"source": "https://
|
| 80 |
-
"sensor": "
|
| 81 |
-
"focus": "
|
| 82 |
},
|
| 83 |
-
"
|
| 84 |
-
"title": "
|
| 85 |
-
"image": "
|
| 86 |
-
"source": "https://
|
| 87 |
-
"sensor": "
|
| 88 |
-
"focus": "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
},
|
| 90 |
}
|
| 91 |
|
|
@@ -139,8 +146,8 @@ def load_case_study(case_key: str):
|
|
| 139 |
f"### {case['title']}\n"
|
| 140 |
f"**Acquisition:** {case['sensor']} \n"
|
| 141 |
f"**Suggested analysis:** {case['focus']} \n"
|
| 142 |
-
f"[Open
|
| 143 |
-
"
|
| 144 |
)
|
| 145 |
return case["image"], note
|
| 146 |
|
|
@@ -374,14 +381,16 @@ def analyze_satellite_image(
|
|
| 374 |
|
| 375 |
|
| 376 |
CSS = """
|
| 377 |
-
.gradio-container {max-width:
|
| 378 |
-
.hero {padding:
|
| 379 |
-
.hero
|
| 380 |
-
.hero
|
| 381 |
-
.hero
|
| 382 |
-
.
|
| 383 |
-
.
|
| 384 |
-
.
|
|
|
|
|
|
|
| 385 |
.summary-grid {display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:12px 0;}
|
| 386 |
.metric-card span,.eyebrow {display:block;color:#66808c;font-size:.72rem;font-weight:750;letter-spacing:.1em;text-transform:uppercase;}
|
| 387 |
.metric-card strong {display:block;font-size:1.45rem;margin:6px 0;color:#113544;}.metric-card small {color:#60747e;}
|
|
@@ -389,41 +398,60 @@ CSS = """
|
|
| 389 |
.prob-row {display:grid;grid-template-columns:155px 1fr 62px;gap:10px;align-items:center;margin:8px 0;font-size:.86rem;}
|
| 390 |
.prob-row b {text-align:right}.prob-track {height:9px;background:#e5edf1;border-radius:20px;overflow:hidden}.prob-track i {display:block;height:100%;background:linear-gradient(90deg,#169c7d,#36b7c5);border-radius:20px;}
|
| 391 |
.section-note {padding:12px 14px;border-left:4px solid #15947a;background:#eef9f6;border-radius:8px;color:#315c62;}
|
| 392 |
-
.case-
|
| 393 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 394 |
"""
|
| 395 |
|
| 396 |
|
| 397 |
with gr.Blocks(title="Satellite Vision Toolkit Pro", css=CSS, theme=gr.themes.Soft()) as demo:
|
| 398 |
gr.HTML("""
|
| 399 |
-
<div class="hero">
|
| 400 |
-
<div class="eyebrow"
|
| 401 |
-
<h1
|
| 402 |
-
<p>
|
| 403 |
-
<
|
| 404 |
-
</div>
|
| 405 |
-
<div class="
|
| 406 |
<div><b>01 · Scene classification</b><span>EuroSAT probability profile across 10 LULC scene types.</span></div>
|
| 407 |
<div><b>02 · Semantic segmentation</b><span>Per-pixel OpenEarthMap land-cover composition and masks.</span></div>
|
| 408 |
<div><b>03 · Object detection</b><span>Bounding boxes and inventory-style summaries for 10 VHR object types.</span></div>
|
| 409 |
</div>
|
| 410 |
""")
|
| 411 |
-
gr.HTML("<div class='case-
|
| 412 |
with gr.Row():
|
| 413 |
-
|
| 414 |
-
|
| 415 |
-
|
| 416 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 417 |
with gr.Row(equal_height=True):
|
| 418 |
-
image_input = gr.Image(type="pil", label="
|
| 419 |
-
with gr.Column():
|
| 420 |
-
gr.Markdown("###
|
| 421 |
-
top_k = gr.Slider(3, 10, value=5, step=1, label="LULC alternatives (top-k)")
|
| 422 |
-
opacity = gr.Slider(0.1, 0.9, value=0.55, step=0.05, label="Segmentation overlay opacity")
|
| 423 |
-
min_share = gr.Slider(0.0, 5.0, value=0.1, step=0.1, label="Minimum reported cover share (%)")
|
| 424 |
-
confidence = gr.Slider(0.05, 0.9, value=0.25, step=0.05, label="Detection confidence threshold")
|
| 425 |
-
iou = gr.Slider(0.1, 0.9, value=0.45, step=0.05, label="Detection NMS IoU threshold")
|
| 426 |
analyze_button = gr.Button("Run complete professional assessment", variant="primary", size="lg")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 427 |
|
| 428 |
with gr.Tabs():
|
| 429 |
with gr.Tab("Executive overview"):
|
|
@@ -496,16 +524,20 @@ with gr.Blocks(title="Satellite Vision Toolkit Pro", css=CSS, theme=gr.themes.So
|
|
| 496 |
**Interpretation guardrails:** EuroSAT is a European Sentinel-2 scene dataset; classification may shift on other sensors, regions, resolutions, or crops. Pixel shares are not automatically physical ground-area shares. Pixel-coordinate GeoJSON is not georeferenced. Models can miss small or obscured objects. Do not use outputs alone for legal, surveillance, emergency, navigation, or safety-critical decisions.
|
| 497 |
""")
|
| 498 |
|
| 499 |
-
|
| 500 |
-
lambda: load_case_study("
|
|
|
|
|
|
|
|
|
|
|
|
|
| 501 |
outputs=[image_input, case_note],
|
| 502 |
)
|
| 503 |
-
|
| 504 |
-
lambda: load_case_study("
|
| 505 |
outputs=[image_input, case_note],
|
| 506 |
)
|
| 507 |
-
|
| 508 |
-
lambda: load_case_study("
|
| 509 |
outputs=[image_input, case_note],
|
| 510 |
)
|
| 511 |
|
|
|
|
| 66 |
8: "building",
|
| 67 |
}
|
| 68 |
CASE_STUDIES = {
|
| 69 |
+
"residential": {
|
| 70 |
+
"title": "Dense residential block",
|
| 71 |
+
"image": "assets/cases/dense_residential.jpg",
|
| 72 |
+
"source": "https://huggingface.co/datasets/blanchon/UC_Merced",
|
| 73 |
+
"sensor": "USGS Urban Area Imagery · RGB · 0.3 m · 256×256 px",
|
| 74 |
+
"focus": "Inspect buildings, impervious surfaces, street texture, and residential scene confidence.",
|
| 75 |
},
|
| 76 |
+
"intersection": {
|
| 77 |
+
"title": "Urban intersection",
|
| 78 |
+
"image": "assets/cases/urban_intersection.jpg",
|
| 79 |
+
"source": "https://huggingface.co/datasets/blanchon/UC_Merced",
|
| 80 |
+
"sensor": "USGS Urban Area Imagery · RGB · 0.3 m · 256×256 px",
|
| 81 |
+
"focus": "Test road/pavement segmentation and small-vehicle sensitivity at a city junction.",
|
| 82 |
},
|
| 83 |
+
"harbor": {
|
| 84 |
+
"title": "Urban marina / harbor",
|
| 85 |
+
"image": "assets/cases/harbor_marina.jpg",
|
| 86 |
+
"source": "https://huggingface.co/datasets/blanchon/UC_Merced",
|
| 87 |
+
"sensor": "USGS Urban Area Imagery · RGB · 0.3 m · 256×256 px",
|
| 88 |
+
"focus": "Compare water segmentation with supported ship/harbor object predictions.",
|
| 89 |
+
},
|
| 90 |
+
"parking": {
|
| 91 |
+
"title": "Urban parking lot",
|
| 92 |
+
"image": "assets/cases/parking_lot.jpg",
|
| 93 |
+
"source": "https://huggingface.co/datasets/blanchon/UC_Merced",
|
| 94 |
+
"sensor": "USGS Urban Area Imagery · RGB · 0.3 m · 256×256 px",
|
| 95 |
+
"focus": "Probe pavement coverage and the detector's limits for tightly packed small vehicles.",
|
| 96 |
},
|
| 97 |
}
|
| 98 |
|
|
|
|
| 146 |
f"### {case['title']}\n"
|
| 147 |
f"**Acquisition:** {case['sensor']} \n"
|
| 148 |
f"**Suggested analysis:** {case['focus']} \n"
|
| 149 |
+
f"[Open UC Merced / USGS source]({case['source']}) · "
|
| 150 |
+
"High-resolution aerial imagery is intentionally outside EuroSAT's Sentinel-2 scale; review domain shift and do not treat the dataset label as model ground truth."
|
| 151 |
)
|
| 152 |
return case["image"], note
|
| 153 |
|
|
|
|
| 381 |
|
| 382 |
|
| 383 |
CSS = """
|
| 384 |
+
.gradio-container {max-width: 1380px !important; background: #f4f7f9; color:#172b35;}
|
| 385 |
+
.hero {padding: 1.55rem 1.8rem; border-radius: 20px; color:#fff !important; background: linear-gradient(118deg,#071d31 0%,#0c4656 58%,#13806b 100%); box-shadow:0 14px 36px rgba(7,29,49,.22); margin: .35rem 0 .8rem;}
|
| 386 |
+
.hero-grid {display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:center;}
|
| 387 |
+
.hero h1,#hero-title {font-size:2.25rem;line-height:1.08;margin:.3rem 0 .5rem;letter-spacing:-.035em;color:#fff !important;text-shadow:0 1px 1px rgba(0,0,0,.12);}
|
| 388 |
+
.hero p {max-width:800px;margin:.35rem 0;color:#e5f7f5 !important;font-size:.98rem;line-height:1.5;}
|
| 389 |
+
.hero .eyebrow {color:#8ff0dc !important;}.hero-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.hero-links a{color:#fff!important;text-decoration:none;border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.09);padding:5px 10px;border-radius:999px;font-size:.8rem;font-weight:700}.hero-links a:hover{background:rgba(255,255,255,.18)}
|
| 390 |
+
.hero-stats{display:grid;grid-template-columns:repeat(2,88px);gap:8px}.hero-stats div{border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.08);border-radius:13px;padding:11px;text-align:center}.hero-stats strong{display:block;color:#fff;font-size:1.3rem}.hero-stats span{color:#cce9e5;font-size:.7rem}
|
| 391 |
+
.method-strip {display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 1rem;}
|
| 392 |
+
.method-strip div,.assessment-card,.metric-card {background:white;border:1px solid #d9e4e9;border-radius:13px;padding:12px 14px;box-shadow:0 4px 14px rgba(20,50,70,.045);}
|
| 393 |
+
.method-strip b {display:block;color:#0b5363;margin-bottom:3px;font-size:.86rem}.method-strip span,.micro-note {color:#617681;font-size:.78rem;}
|
| 394 |
.summary-grid {display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:12px 0;}
|
| 395 |
.metric-card span,.eyebrow {display:block;color:#66808c;font-size:.72rem;font-weight:750;letter-spacing:.1em;text-transform:uppercase;}
|
| 396 |
.metric-card strong {display:block;font-size:1.45rem;margin:6px 0;color:#113544;}.metric-card small {color:#60747e;}
|
|
|
|
| 398 |
.prob-row {display:grid;grid-template-columns:155px 1fr 62px;gap:10px;align-items:center;margin:8px 0;font-size:.86rem;}
|
| 399 |
.prob-row b {text-align:right}.prob-track {height:9px;background:#e5edf1;border-radius:20px;overflow:hidden}.prob-track i {display:block;height:100%;background:linear-gradient(90deg,#169c7d,#36b7c5);border-radius:20px;}
|
| 400 |
.section-note {padding:12px 14px;border-left:4px solid #15947a;background:#eef9f6;border-radius:8px;color:#315c62;}
|
| 401 |
+
.case-heading{display:flex;justify-content:space-between;align-items:end;margin:.35rem 2px .5rem}.case-heading h2{margin:0;color:#123746;font-size:1.2rem}.case-heading p{margin:0;color:#647984;font-size:.82rem}
|
| 402 |
+
.case-card {background:#fff;border:1px solid #d7e2e8!important;border-radius:15px!important;padding:8px!important;box-shadow:0 6px 16px rgba(20,50,70,.06);min-width:0}.case-card:hover{border-color:#62a99a!important;box-shadow:0 9px 22px rgba(20,80,70,.1)}
|
| 403 |
+
.case-thumb {border-radius:10px!important;overflow:hidden;background:#e7eef1}.case-thumb img{object-fit:cover!important;image-rendering:auto!important}.case-card h3{margin:2px 2px 0!important;color:#143643;font-size:.92rem!important}.case-card p{margin:0 2px 3px!important;color:#667b85;font-size:.73rem!important;line-height:1.35}.case-card button{min-height:34px!important;font-size:.78rem!important}
|
| 404 |
+
.case-note{background:#eaf7f3;border:1px solid #b9ded3;border-radius:11px;padding:1px 12px;margin:.4rem 0 .75rem}.case-note h3{font-size:.95rem;margin:.6rem 0 .2rem}.case-note p{font-size:.8rem}
|
| 405 |
+
.workspace-title h3{margin-bottom:.25rem!important}.controls-card{background:#fff;border:1px solid #dae5ea;border-radius:15px;padding:14px!important}
|
| 406 |
+
@media(max-width:850px){.hero-grid{grid-template-columns:1fr}.hero-stats{display:none}.method-strip,.summary-grid{grid-template-columns:1fr}.prob-row{grid-template-columns:115px 1fr 56px}.case-heading{display:block}}
|
| 407 |
"""
|
| 408 |
|
| 409 |
|
| 410 |
with gr.Blocks(title="Satellite Vision Toolkit Pro", css=CSS, theme=gr.themes.Soft()) as demo:
|
| 411 |
gr.HTML("""
|
| 412 |
+
<div class="hero"><div class="hero-grid"><div>
|
| 413 |
+
<div class="eyebrow">URBAN REMOTE SENSING WORKBENCH</div>
|
| 414 |
+
<h1 id="hero-title">Satellite Vision Toolkit</h1>
|
| 415 |
+
<p>Clear, multi-level interpretation of local urban overhead imagery—from whole-scene LULC context to pixel cover and individual objects.</p>
|
| 416 |
+
<div class="hero-links"><a href="https://github.com/LabMingzeChen/SatelliteVisionToolkit">GitHub</a><a href="https://huggingface.co/mrm8488/convnext-tiny-finetuned-eurosat">LULC model</a><a href="https://huggingface.co/mfaytin/mask2former-satellite">Segmentation</a><a href="https://huggingface.co/bluelabel/satellite-equipment-detection-yolov8n-vhr10">Detection</a></div>
|
| 417 |
+
</div><div class="hero-stats"><div><strong>3</strong><span>MODEL LEVELS</span></div><div><strong>4</strong><span>URBAN CASES</span></div><div><strong>10</strong><span>LULC CLASSES</span></div><div><strong>10</strong><span>OBJECT TYPES</span></div></div></div></div>
|
| 418 |
+
<div class="method-strip">
|
| 419 |
<div><b>01 · Scene classification</b><span>EuroSAT probability profile across 10 LULC scene types.</span></div>
|
| 420 |
<div><b>02 · Semantic segmentation</b><span>Per-pixel OpenEarthMap land-cover composition and masks.</span></div>
|
| 421 |
<div><b>03 · Object detection</b><span>Bounding boxes and inventory-style summaries for 10 VHR object types.</span></div>
|
| 422 |
</div>
|
| 423 |
""")
|
| 424 |
+
gr.HTML("<div class='case-heading'><h2>Urban sample scenes</h2><p>High-resolution 256×256 USGS aerial chips · click any card to load</p></div>")
|
| 425 |
with gr.Row():
|
| 426 |
+
with gr.Column(elem_classes="case-card"):
|
| 427 |
+
gr.Image("assets/cases/dense_residential.jpg", show_label=False, height=132, interactive=False, elem_classes="case-thumb")
|
| 428 |
+
gr.Markdown("### Dense residential\nBuildings · streets · impervious cover")
|
| 429 |
+
residential_case = gr.Button("Load residential scene")
|
| 430 |
+
with gr.Column(elem_classes="case-card"):
|
| 431 |
+
gr.Image("assets/cases/urban_intersection.jpg", show_label=False, height=132, interactive=False, elem_classes="case-thumb")
|
| 432 |
+
gr.Markdown("### Urban intersection\nRoads · vehicles · pavement")
|
| 433 |
+
intersection_case = gr.Button("Load intersection scene")
|
| 434 |
+
with gr.Column(elem_classes="case-card"):
|
| 435 |
+
gr.Image("assets/cases/harbor_marina.jpg", show_label=False, height=132, interactive=False, elem_classes="case-thumb")
|
| 436 |
+
gr.Markdown("### Marina / harbor\nWater · boats · harbor context")
|
| 437 |
+
harbor_case = gr.Button("Load harbor scene")
|
| 438 |
+
with gr.Column(elem_classes="case-card"):
|
| 439 |
+
gr.Image("assets/cases/parking_lot.jpg", show_label=False, height=132, interactive=False, elem_classes="case-thumb")
|
| 440 |
+
gr.Markdown("### Parking lot\nPavement · dense small vehicles")
|
| 441 |
+
parking_case = gr.Button("Load parking scene")
|
| 442 |
+
case_note = gr.Markdown("Select an urban case to load its acquisition details and analysis prompt.", elem_classes="case-note")
|
| 443 |
with gr.Row(equal_height=True):
|
| 444 |
+
image_input = gr.Image(type="pil", label="Analysis image", height=380)
|
| 445 |
+
with gr.Column(elem_classes="controls-card"):
|
| 446 |
+
gr.Markdown("### Run analysis\nUpload your own image or start with an urban case. Default settings suit most previews.", elem_classes="workspace-title")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 447 |
analyze_button = gr.Button("Run complete professional assessment", variant="primary", size="lg")
|
| 448 |
+
with gr.Accordion("Advanced thresholds", open=False):
|
| 449 |
+
top_k = gr.Slider(3, 10, value=5, step=1, label="LULC alternatives (top-k)")
|
| 450 |
+
opacity = gr.Slider(0.1, 0.9, value=0.55, step=0.05, label="Segmentation overlay opacity")
|
| 451 |
+
min_share = gr.Slider(0.0, 5.0, value=0.1, step=0.1, label="Minimum reported cover share (%)")
|
| 452 |
+
confidence = gr.Slider(0.05, 0.9, value=0.25, step=0.05, label="Detection confidence threshold")
|
| 453 |
+
iou = gr.Slider(0.1, 0.9, value=0.45, step=0.05, label="Detection NMS IoU threshold")
|
| 454 |
+
gr.Markdown("**Best for:** local RGB satellite/aerial chips where buildings, roads, water, or supported objects are visible. Results are model estimates, not surveyed GIS data.")
|
| 455 |
|
| 456 |
with gr.Tabs():
|
| 457 |
with gr.Tab("Executive overview"):
|
|
|
|
| 524 |
**Interpretation guardrails:** EuroSAT is a European Sentinel-2 scene dataset; classification may shift on other sensors, regions, resolutions, or crops. Pixel shares are not automatically physical ground-area shares. Pixel-coordinate GeoJSON is not georeferenced. Models can miss small or obscured objects. Do not use outputs alone for legal, surveillance, emergency, navigation, or safety-critical decisions.
|
| 525 |
""")
|
| 526 |
|
| 527 |
+
residential_case.click(
|
| 528 |
+
lambda: load_case_study("residential"),
|
| 529 |
+
outputs=[image_input, case_note],
|
| 530 |
+
)
|
| 531 |
+
intersection_case.click(
|
| 532 |
+
lambda: load_case_study("intersection"),
|
| 533 |
outputs=[image_input, case_note],
|
| 534 |
)
|
| 535 |
+
harbor_case.click(
|
| 536 |
+
lambda: load_case_study("harbor"),
|
| 537 |
outputs=[image_input, case_note],
|
| 538 |
)
|
| 539 |
+
parking_case.click(
|
| 540 |
+
lambda: load_case_study("parking"),
|
| 541 |
outputs=[image_input, case_note],
|
| 542 |
)
|
| 543 |
|
assets/cases/dense_residential.jpg
ADDED
|
assets/cases/harbor_marina.jpg
ADDED
|
assets/cases/parking_lot.jpg
ADDED
|
assets/cases/urban_intersection.jpg
ADDED
|
tests/test_app_contract.py
CHANGED
|
@@ -18,7 +18,8 @@ def test_app_exposes_all_api_endpoints_and_models():
|
|
| 18 |
assert "mfaytin/mask2former-satellite" in constants
|
| 19 |
assert "bluelabel/satellite-equipment-detection-yolov8n-vhr10" in constants
|
| 20 |
assert "cropland" in constants
|
| 21 |
-
assert "
|
| 22 |
-
assert "
|
| 23 |
-
assert "
|
| 24 |
-
assert "
|
|
|
|
|
|
| 18 |
assert "mfaytin/mask2former-satellite" in constants
|
| 19 |
assert "bluelabel/satellite-equipment-detection-yolov8n-vhr10" in constants
|
| 20 |
assert "cropland" in constants
|
| 21 |
+
assert "residential" in constants
|
| 22 |
+
assert "intersection" in constants
|
| 23 |
+
assert "harbor" in constants
|
| 24 |
+
assert "parking" in constants
|
| 25 |
+
assert "Urban sample scenes" in source
|