File size: 1,531 Bytes
d70361b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""Re-run a library pair through the fixed pipeline and print region summary."""
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))

from PIL import Image as PILImage  # noqa: E402

from app.dda.geotiff_io import load_rgb_pil  # noqa: E402
from app.detection_config import get_load_max_side  # noqa: E402
import app.detection_engine as de  # noqa: E402

root = ROOT / "data/library_sources/central_delhi/Images"
name_b = sys.argv[1] if len(sys.argv) > 1 else "1.tif"
name_a = sys.argv[2] if len(sys.argv) > 2 else "2.tif"
method = sys.argv[3] if len(sys.argv) > 3 else "Hybrid AI"

b = load_rgb_pil(root / name_b, max_side=get_load_max_side())
a = load_rgb_pil(root / name_a, max_side=get_load_max_side())
if b.size != a.size:
    a = a.resize(b.size, PILImage.Resampling.LANCZOS)

mask, result, stats, regions = de.run_detection(
    b, a, method=method,
    enable_registration=True, enable_normalization=True,
    detection_sensitivity=0.45, min_region_area=150,
    before_path=str(root / name_b), after_path=str(root / name_a),
)

gsd = de._CURRENT_GSD_MPP
print("pair:", name_b, "vs", name_a, "| method:", method)
print("effective gsd:", round(gsd, 4) if gsd else None, "m/px")
print("change %:", round(stats["change_percentage"], 2))
print("regions:", len(regions))
for r in regions[:15]:
    m2 = r["area"] * gsd * gsd if gsd else 0.0
    print("  {:35s} conf={:.2f} area={:7d}px ({:7.0f} m2)".format(
        r["object_type"], r["confidence"], r["area"], m2))