real / MeAI_Maincode /Polyb.py
dangtiendatdat's picture
Add MeAI_Maincode folder
be0b780
raw
history blame
1.92 kB
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