Spaces:
Running
Running
import gradio as gr | |
import os, requests | |
import numpy as np | |
import torch | |
import cv2 | |
from cell_segmentation.inference.inference_cellvit_experiment_pannuke import InferenceCellViTParser,InferenceCellViT | |
from cell_segmentation.inference.inference_cellvit_experiment_monuseg import InferenceCellViTMoNuSegParser,MoNuSegInference | |
## local | remote | |
RUN_MODE = "remote" | |
if RUN_MODE != "local": | |
os.system("wget https://huggingface.co/xiazhi/LKCell/resolve/main/model_best.pth") | |
## examples | |
os.system("wget https://huggingface.co/xiazhi/LKCell/resolve/main/1.png") | |
os.system("wget https://huggingface.co/xiazhi/LKCell/resolve/main/2.png") | |
os.system("wget https://huggingface.co/xiazhi/LKCell/resolve/main/3.png") | |
os.system("wget https://huggingface.co/xiazhi/LKCell/resolve/main/4.png") | |
## step 1: set up model | |
device = "cpu" | |
## pannuke set | |
pannuke_parser = InferenceCellViTParser() | |
pannuke_configurations = pannuke_parser.parse_arguments() | |
pannuke_inf = InferenceCellViT( | |
run_dir=pannuke_configurations["run_dir"], | |
checkpoint_name=pannuke_configurations["checkpoint_name"], | |
gpu=pannuke_configurations["gpu"], | |
magnification=pannuke_configurations["magnification"], | |
) | |
pannuke_checkpoint = torch.load( | |
pannuke_inf.run_dir / pannuke_inf.checkpoint_name, map_location="cpu" | |
) | |
pannuke_model = pannuke_inf.get_model(model_type=pannuke_checkpoint["arch"]) | |
pannuke_model.load_state_dict(pannuke_checkpoint["model_state_dict"]) | |
# # put model in eval mode | |
pannuke_model.to(device) | |
pannuke_model.eval() | |
## monuseg set | |
monuseg_parser = InferenceCellViTMoNuSegParser() | |
monuseg_configurations = monuseg_parser.parse_arguments() | |
monuseg_inf = MoNuSegInference( | |
model_path=monuseg_configurations["model"], | |
dataset_path=monuseg_configurations["dataset"], | |
outdir=monuseg_configurations["outdir"], | |
gpu=monuseg_configurations["gpu"], | |
patching=monuseg_configurations["patching"], | |
magnification=monuseg_configurations["magnification"], | |
overlap=monuseg_configurations["overlap"], | |
) | |
def click_process(image_input , type_dataset): | |
if type_dataset == "pannuke": | |
if image_input.shape[0] > 512 and image_input.shape[1] > 512: | |
image_input = cv2.resize(image_input, (512,512)) | |
pannuke_inf.run_single_image_inference(pannuke_model,image_input) | |
else: | |
if image_input.shape[0] > 512 and image_input.shape[1] > 512: | |
image_input = cv2.resize(image_input, (512,512)) | |
monuseg_inf.run_single_image_inference(monuseg_inf.model, image_input) | |
image_output = cv2.imread("raw_pred.png") | |
image_output = cv2.cvtColor(image_output, cv2.COLOR_BGR2RGB) | |
image_output2 = cv2.imread("pred_img.png") | |
image_output2 = cv2.cvtColor(image_output2, cv2.COLOR_BGR2RGB) | |
return image_output,image_output2 | |
demo = gr.Blocks(title="LkCell") | |
with demo: | |
gr.Markdown(value=""" | |
**Gradio demo for LKCell: Efficient Cell Nuclei Instance Segmentation with Large Convolution Kernels**. Check our [Github Repo](https://github.com/hustvl/LKCell) π. | |
""") | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Row(): | |
Image_input = gr.Image(type="numpy", label="Input", interactive=True,height=480) | |
with gr.Row(): | |
Type_dataset = gr.Radio(choices=["pannuke", "monuseg"], label=" input image's dataset type",value="pannuke") | |
with gr.Column(): | |
image_output = gr.Image(type="numpy", label="image prediction",height=480,width=480) | |
image_output2 = gr.Image(type="numpy", label="all predictions",height=480) | |
with gr.Row(): | |
Button_run = gr.Button("π Submit (ει) ") | |
clear_button = gr.ClearButton(components=[Image_input,Type_dataset,image_output,image_output2],value="π§Ή Clear (ζΈ ι€)") | |
Button_run.click(fn=click_process, inputs=[Image_input, Type_dataset ], outputs=[image_output,image_output2]) | |
## guiline | |
gr.Markdown(value=""" | |
π**Guideline** | |
1. Upload your image or select one from the examples. | |
2. Set up the arguments: "Type_dataset" to enjoy two dataset type's inference | |
3. Due to the limit of CPU , we resize the input image whose size is larger than (512,512) to (512,512) | |
4. Run the Submit button to get the output. | |
""") | |
# if RUN_MODE != "local": | |
gr.Examples(examples=[ | |
['1.png', "pannuke"], | |
['2.png', "pannuke"], | |
['3.png', "monuseg"], | |
['4.png', "monuseg"], | |
], | |
inputs=[Image_input, Type_dataset], outputs=[image_output,image_output2], label="Examples") | |
gr.HTML(value=""" | |
<p style="text-align:center; color:orange"> <a href='https://github.com/hustvl/LKCell' target='_blank'>Github Repo</a></p> | |
""") | |
gr.Markdown(value=""" | |
Template is adapted from [Here](https://huggingface.co/spaces/menghanxia/disco) | |
""") | |
if RUN_MODE == "local": | |
demo.launch(server_name='127.0.0.1',server_port=8003) | |
else: | |
demo.launch() |