segment-geospatial icon indicating copy to clipboard operation
segment-geospatial copied to clipboard

Exception: 'NoneType' object has no attribute 'crop'

Open hrezvan opened this issue 1 year ago • 6 comments

I am trying to implement FastSAM in a for loop. I have a couple of bboxes in a list like below: bbox[4:7] [[58.925381, 31.177402, 58.940381, 31.167402], [58.940381, 31.167402, 58.955381, 31.157402], [58.955381, 31.157402, 58.970381, 31.147402]] in each loop I want to have a segmentation. every things is OK until the sixth loop which I get the Exception: 'NoneType' object has no attribute 'crop' error message for the tms_to_geotiff function. how can I solve this issue? BTW here is my for loop code:

for j in range(len(bbox)):
  tms_to_geotiff(output='Image.tif', bbox=bbox[j], zoom=19, source="Satellite", overwrite=True)
  sam.set_image('Image.tif')
  output_mask_name = 'mask_'+str(j)+'.tif'
  sam.everything_prompt(output=output_mask_name)
  output_geojson_name = 'mask_'+str(j)+'.geojson'
  sam.raster_to_vector(output_mask_name, output_geojson_name)

In addition to the for loop, sometimes when I want to segment objects according to the FastSAM notebook, I get this error.

hrezvan avatar Sep 03 '23 11:09 hrezvan

Please provide complete source code for debugging.

giswqs avatar Sep 06 '23 02:09 giswqs

Please provide complete source code for debugging.

%pip install segment-geospatial segment-anything-fast

import leafmap
from samgeo import tms_to_geotiff
from samgeo.fast_sam import SamGeo
m = leafmap.Map(center=[27.371051, 62.359569], zoom=16, height="800px")
m.add_basemap("SATELLITE")
m
import numpy as np
x_range = np.arange(58.865381, 63.425381, 0.015)
y_range = np.arange(31.217403, 24.967403, -0.01)
x = x_range.tolist()
y = y_range.tolist()
bbox = []
for i in range(len(x)-1):
  for j in range(len(y)-1):
    box = [x[i], y[i], x[i+1], y[i+1]]
    bbox.append(box)
from samgeo.fast_sam import SamGeo
sam = SamGeo(model="FastSAM-x.pt")
for k in range(len(bbox)):
  tms_to_geotiff(output='Image.tif', bbox=bbox[k], zoom=16, source="Satellite", overwrite=True)
  sam.set_image('Image.tif')
  output_mask_name = 'mask_'+str(k)+'.tif'
  sam.everything_prompt(output=output_mask_name)
  output_geojson_name = 'mask_'+str(k)+'.geojson'
  sam.raster_to_vector(output_mask_name, output_geojson_name)

hrezvan avatar Sep 06 '23 05:09 hrezvan

I got the same issue. Did you manage to fix it?

rsousa95 avatar Nov 15 '23 11:11 rsousa95

unfortunately not!

hrezvan avatar Nov 27 '23 07:11 hrezvan

You guys found any solution ?

krishnaglodha avatar May 04 '24 13:05 krishnaglodha

It's because the bounding box needed is not in the same form as expected. The x and y need to be switched!

chad-fisher avatar Sep 25 '24 20:09 chad-fisher