zebrafishtest1 / app.py
imagescientist's picture
Update app.py
1748cc1
from fastai.vision.all import *
import numpy
import gradio as gr
import PIL
from PIL import Image, ImageEnhance
import torchvision.transforms as T
import matplotlib.pyplot as plt
import pathlib
plat = platform.system()
if plat == 'Linux': pathlib.WindowsPath = pathlib.PosixPath
def name_to_hrs (r): return float(round(float(os.path.basename(r)[0:-4].split("_")[1][1:])*(minutes/60)+5,2))
def validation_split (r): return os.path.basename(r)[0:-4].split("_")[3] == "R0003" or os.path.basename(r)[0:-4].split("_")[3] == "R0006"
def get_label_filename(name): return path/'labels'/f'{name.stem}_annotationLabels.tif'
#zebrafish_age_predictor= vision_learner().load('zebrafish_age_20220726.pkl')
#zebrafish_classifier = unet_learner().load('fish_yolk_segmentation_20220726.pkl')
zebrafish_age_predictor = load_learner('zebrafish_age_20220726.pkl')
zebrafish_classifier = load_learner('fish_yolk_segmentation_20220726.pkl')
title = "Zebrafish segmenter and age predictor"
description = "An rgb grayscale zebrafish fluorescence image segmenter and age predictor created with fastai. Created as a demo for Gradio and HuggingFace Spaces. Gradio does not display .tif files - those will only show up in the output. The input will be blank unless the file is .jpg or .png."
examples = ["early1.png","early2.png","early3.png", "late1.png", "late2.png", "late3.png", "mid1.png", "mid2.png","mid3.png"]
def process_zebrafish_image(img):
age,tensor, tensor=zebrafish_age_predictor.predict(img)
pred,pred_idx,probs=zebrafish_classifier.predict(img)
img = img*5
img = PILImage.create(img)
#img = PILImage.create('24hr.tif')
_,axs = plt.subplots(1,3, figsize=(16,4))
img.show(ctx=axs[0], title='image')
pred.show(alpha=1, ctx=axs[1], vmin=0, vmax=3, title='mask')
img.show(ctx=axs[2], title='superimposed')
pred.show(ctx=axs[2], vmin=0, vmax=3);
fig = plt.gcf()
fig.canvas.draw()
image_out = PIL.Image.frombytes('RGB', fig.canvas.get_width_height(),fig.canvas.tostring_rgb())
text_out = "Age prediction "+ str(round(age[0], 2))+" hrs post fertilization"
return (image_out, text_out )
css = ".output-image, .input-image {height: 40rem !important; width: 100% !important;}"
intf = gr.Interface(fn=process_zebrafish_image, inputs=gr.inputs.Image(shape=(512, 512)), outputs=['image', 'text'], title = title, description=description, examples= examples, css = css).launch(debug=True, share=True)