Vegetation Detection using Segment Anything Model
Exploration of Cutting-Edge Technology
Pendahuluan
Segment Anything Model (SAM) adalah salah satu teknologi yang dapat mensegmentasi citra satelit. Pada eksperimen ini, akan di coba dilakukan segmentasi pepohonan dengan menggunakan modul leafmap.
Metode
Proyek ini menggunakan google collab yang menyediakan GPU yang lebih handal. Adapun bahasa yang digunakan adalah python. Area yang akan digunakan berada di Mlati, Sleman, DIY. Prosedur analisis mengikuti SAMGeo.
Output
Segmentasi
install library yang dibutuhkan
1
%pip install segment-geospatial groundingdino-py leafmap localtileserver
import library yang dibutuhkan
1
2
3
4
import leafmap
from samgeo import tms_to_geotiff
from samgeo import SamGeo
from samgeo.text_sam import LangSAM
Tetapkan titik tengah area dan digunakan basemap google satellite
1
2
m = leafmap.Map(center=[-7.745009151693082, 110.38166526495895], zoom=18, height="800px")
m.add_basemap("SATELLITE")
Tetapkan batas area of interest
1
2
3
4
if m.user_roi_bounds() is not None:
bbox = m.user_roi_bounds()
else:
bbox = [110.38089461,-7.74598989,110.38279347,-7.74422623 ]
Unduh citra sesuai kriteria sebelumnya
1
2
image = "Image.tif"
tms_to_geotiff(output=image, bbox=bbox, zoom=19, source="Satellite", overwrite=True)
Tambahkan layer yang telah diunduh pada variabel peta sebelumnya
1
2
m.layers[-1].visible = False
m.add_raster(image, layer_name="Image")
Buat model SAM, kali ini akan dicoba mensegmentasi seluruh bagian peta.
1
2
3
4
5
6
sam = SamGeo(
model_type="vit_h",
sam_kwargs=None,
)
sam.generate(image, output="masks.tif", foreground=True, unique=True)
sam.show_masks(cmap="binary_r")
Segmentasi seluruh bagian peta.
Akan ditambahkan annotasi unik untuk setiap segmen
1
sam.show_anns(axis="off", alpha=1, output="annotations.tif")
Annotasi unik pada segmentasi.
Bandingkan citra awal dengan segmentasi yang dibuat
1
2
3
4
5
6
leafmap.image_comparison(
"Image.tif",
"annotations.tif",
label1="Satellite Image",
label2="Image Segmentation",
)
Segmentasi Pepohonan
Tujuan kedua akan dicoba dicapai menggunakan prompt text dari SAMGeo. Proses ini mencari objek pepohonan yang dapat ditentukan dari prompt. Kemudian akan dilakukan prediksi segmen mana saja yang termasuk pepohonan
1
2
3
sam = LangSAM()
text_prompt = "tree"
sam.predict(image, text_prompt, box_threshold=0.24, text_threshold=0.24)
Hasil segmentasi yang diprediksi merupakan pepohonan
1
2
3
4
5
6
7
sam.show_anns(
cmap='Greens',
add_boxes=False,
alpha=0.5,
axis="off",
output="Pohon.tif"
)