Spaces:
Runtime error
Runtime error
| import warnings | |
| import numpy as np | |
| import requests | |
| from PIL import Image | |
| import gradio as gr | |
| from lang_sam import LangSAM | |
| model = LangSAM() | |
| text_prompt = """ | |
| A polyp is an anomalous oval-shaped small bump-like structure, a relatively small growth or | |
| mass that develops on the inner lining of the colon or other organs. | |
| Multiple polyps may exist in one image. | |
| """ | |
| def highlight_mask_on_image(image, mask_np, color=(0, 200, 0), alpha=0.7): | |
| """Tô màu cho khu vực được xác định bởi mask lên hình ảnh gốc.""" | |
| image_np = np.array(image) | |
| if mask_np.shape != image_np.shape[:2]: | |
| raise ValueError("Kích thước của mask không khớp với kích thước của hình ảnh") | |
| highlighted_image = image_np.copy() | |
| mask_indices = mask_np > 0 # Chỉ lấy các vùng có mask | |
| highlighted_image[mask_indices] = (1 - alpha) * image_np[mask_indices] + alpha * np.array(color) | |
| return Image.fromarray(highlighted_image.astype(np.uint8)) | |
| def main(image): | |
| image_pil = image.convert("RGB") | |
| masks, boxes, phrases, logits = model.predict(image_pil, text_prompt) | |
| if len(masks) == 1: | |
| print(f"No objects of the '{text_prompt}' prompt detected in the image.") | |
| return image_pil # Trả về ảnh gốc nếu không phát hiện ra mask | |
| masks_np = [mask.squeeze().cpu().numpy() for mask in masks] | |
| if len(masks_np) > 1: | |
| combined_mask = np.sum(masks_np[1:], axis=0) > 0 | |
| else: | |
| combined_mask = masks_np[0] | |
| highlighted_image = highlight_mask_on_image(image_pil, combined_mask) | |
| return highlighted_image | |
| def create_polyb(): | |
| demo = gr.Interface( | |
| fn=main, | |
| inputs=gr.Image(type="pil"), | |
| outputs=gr.Image(type="pil"), | |
| title="Highlight Polyps", | |
| description="Tải lên một hình ảnh và phát hiện polyp với LangSAM." | |
| ) | |
| return demo | |