Spaces:
Sleeping
Sleeping
| from models.monai_inference import segment_with_monai, is_monai_available, load_monai_model | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| def is_segmentation_available(): | |
| return is_monai_available() | |
| def preload_model(): | |
| return load_monai_model() | |
| def segment_image(image, click_x, click_y): | |
| if image is None or image.size == 0: | |
| return { | |
| 'success': False, | |
| 'error': 'invalid_image', | |
| 'error_type': 'ValueError', | |
| 'message': 'Invalid or empty image provided for segmentation.', | |
| } | |
| logger.info(f"Segmentation request: click=({click_x},{click_y}), image shape={image.shape}") | |
| if not is_monai_available(): | |
| return { | |
| 'success': False, | |
| 'error': 'model_unavailable', | |
| 'error_type': 'RuntimeError', | |
| 'message': 'MONAI segmentation model is not available. Please check that all dependencies are installed.', | |
| } | |
| try: | |
| result = segment_with_monai(image, click_x, click_y) | |
| if result is None: | |
| logger.error("MONAI returned None — inference failed") | |
| return { | |
| 'success': False, | |
| 'error': 'segmentation_failed', | |
| 'error_type': 'InferenceError', | |
| 'message': 'AI segmentation failed to produce results. Check server logs for details.', | |
| } | |
| if len(result) == 0: | |
| logger.warning("MONAI returned empty mask list") | |
| return { | |
| 'success': False, | |
| 'error': 'no_masks', | |
| 'error_type': 'EmptyResult', | |
| 'message': 'No structures were detected at the clicked location. Try clicking on a different area of the image.', | |
| } | |
| total_area = sum(m['area'] for m in result) | |
| if total_area == 0: | |
| logger.warning("MONAI returned masks but all have zero area") | |
| return { | |
| 'success': False, | |
| 'error': 'empty_masks', | |
| 'error_type': 'EmptyMasks', | |
| 'message': 'The model detected the area but could not create a meaningful mask. Try clicking on a more distinct region.', | |
| } | |
| logger.info(f"Segmentation successful: {len(result)} masks, total area={total_area}") | |
| return { | |
| 'success': True, | |
| 'masks': result, | |
| 'method': 'monai' | |
| } | |
| except Exception as e: | |
| logger.error(f"Segmentation failed with exception: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| return { | |
| 'success': False, | |
| 'error': 'segmentation_unavailable', | |
| 'error_type': type(e).__name__, | |
| 'message': f'AI segmentation encountered an error: {str(e)}', | |
| } | |