-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
Using cellvit-inference with version 1.8.5 of Shapely resulted in the following error:
Traceback (most recent call last):
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/bin/cellvit-inference", line 8, in <module>
sys.exit(main())
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/lib/python3.10/site-packages/cellvit/detect_cells.py", line 50, in main
celldetector.process_wsi(
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/lib/python3.10/site-packages/cellvit/inference/inference.py", line 864, in process_wsi
keep_idx = self._post_process_edge_cells(cell_list=cell_dict_wsi)
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/lib/python3.10/site-packages/cellvit/inference/inference.py", line 507, in _post_process_edge_cells
cleaned_cells = cell_cleaner.clean_detected_cells()
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/lib/python3.10/site-packages/cellvit/inference/overlap_cell_cleaner.py", line 76, in clean_detected_cells
cleaned_edge_cells = self._remove_overlap(cleaned_edge_cells)
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/lib/python3.10/site-packages/cellvit/inference/overlap_cell_cleaner.py", line 141, in _remove_overlap
merged_cells = self._remove_overlap_shapely_1_8(
File "/nemo/lab/swantonc/working/liul/.conda/envs/cellvit_env/lib/python3.10/site-packages/cellvit/inference/overlap_cell_cleaner.py", line 191, in _remove_overlap_shapely_1_8
if query_poly.uid not in iterated_cells:
AttributeError: 'Polygon' object has no attribute 'uid'
This is my version of Shapely confirmed:
$pip show shapely
Name: Shapely
Version: 1.8.5.post1
This was the command run:
cellvit-inference \
--model SAM \
--nuclei_taxonomy pannuke \
--batch_size 8 \
--cpu_count 32 \
--ray_worker 6 \
--ray_remote_cpus 4 \
--outdir ./test/JP2K-33003-2/ \
process_wsi \
--wsi_path ./test/JP2K-33003-2/JP2K-33003-2.svs \
--wsi_mpp 0.25 \
--wsi_magnification 40
At a glance, this seems to be because the uid attribute has been commented out from the function?
def _remove_overlap_shapely_1_8(
self, cleaned_edge_cells: pd.DataFrame
) -> pd.DataFrame:
"""Remove overlapping cells from provided DataFrame
Args:
cleaned_edge_cells (pd.DataFrame): DataFrame that should be cleaned
Returns:
pd.DataFrame: Cleaned DataFrame
"""
merged_cells = cleaned_edge_cells
for iteration in range(20):
poly_list = []
for idx, cell_info in merged_cells.iterrows():
poly = Polygon(cell_info["contour"])
if not poly.is_valid:
self.logger.debug("Found invalid polygon - Fixing with buffer 0")
multi = poly.buffer(0)
if isinstance(multi, MultiPolygon):
if len(multi) > 1:
poly_idx = np.argmax([p.area for p in multi])
poly = multi[poly_idx]
poly = Polygon(poly)
else:
poly = multi[0]
poly = Polygon(poly)
else:
poly = Polygon(multi)
# poly.uid = idx
poly_list.append(poly)
# use an strtree for fast querying
tree = strtree.STRtree(poly_list)
merged_idx = deque()
iterated_cells = set()
overlaps = 0
for query_poly in poly_list:
if query_poly.uid not in iterated_cells:
Uncommenting # poly.uid = idx solved the issue
Does the developer recommend upgrading to Shapely version >= 2.0.0?
Metadata
Metadata
Assignees
Labels
No labels