File size: 3,346 Bytes
1899d85 8c16ebc d905150 4e2e389 d905150 1899d85 d905150 8c16ebc c0ca22c 88d04c7 d905150 5f088d2 d905150 7aeba2e d905150 7aeba2e d905150 88d04c7 d905150 d22dc1f 480e7d1 d905150 7e182e3 8a7486c d22dc1f 8e52ff9 d905150 4b7b314 877495b e67f4f4 4b7b314 56df16f a4c8a40 14f2a96 4b7b314 d905150 d22dc1f 40dced2 d905150 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
import os, io
import cv2
import gradio as gr
import tensorflow as tf
import urllib.request
import numpy as np
import keras.backend as K
from transformers import pipeline
from PIL import Image
from matplotlib import cm
from tensorflow import keras
from matplotlib import cm
resized_shape = (768, 768, 3)
IMG_SCALING = (1, 1)
# # Download the model file
# def download_model():
# url = "https://drive.google.com/uc?id=1FhICkeGn6GcNXWTDn1s83ctC-6Mo1UXk"
# output = "seg_unet_model.h5"
# gdown.download(url, output, quiet=False)
# return output
model_file = "./seg_unet_model.h5"
#Custom objects for model
def Combo_loss(y_true, y_pred, eps=1e-9, smooth=1):
targets = tf.dtypes.cast(K.flatten(y_true), tf.float32)
inputs = tf.dtypes.cast(K.flatten(y_pred), tf.float32)
intersection = K.sum(targets * inputs)
dice = (2. * intersection + smooth) / (K.sum(targets) + K.sum(inputs) + smooth)
inputs = K.clip(inputs, eps, 1.0 - eps)
out = - (ALPHA * ((targets * K.log(inputs)) + ((1 - ALPHA) * (1.0 - targets) * K.log(1.0 - inputs))))
weighted_ce = K.mean(out, axis=-1)
combo = (CE_RATIO * weighted_ce) - ((1 - CE_RATIO) * dice)
return combo
def dice_coef(y_true, y_pred, smooth=1):
y_pred = tf.dtypes.cast(y_pred, tf.int32)
y_true = tf.dtypes.cast(y_true, tf.int32)
intersection = K.sum(y_true * y_pred, axis=[1,2,3])
union = K.sum(y_true, axis=[1,2,3]) + K.sum(y_pred, axis=[1,2,3])
return K.mean((2 * intersection + smooth) / (union + smooth), axis=0)
# Load the model
seg_model = keras.models.load_model('seg_unet_model.h5', custom_objects={'Combo_loss': Combo_loss, 'dice_coef': dice_coef})
# inputs = gr.inputs.Image(type="pil", label="Upload an image")
image_output = gr.outputs.Image(type="pil", label="Output Image")
# outputs = gr.outputs.HTML() #uncomment for single class output
def gen_pred(img, model=seg_model):
# pil_image = img.convert('RGB')
# open_cv_image = np.array(pil_image)
# img = open_cv_image[:, :, ::-1].copy()
img = cv2.imread("./003e2c95d.jpg")
img = img[::IMG_SCALING[0], ::IMG_SCALING[1]]
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img/255
img = tf.expand_dims(img, axis=0)
pred = model.predict(img)
# pred = np.squeeze(pred, axis=0)
# image = Image.fromarray(np.uint8(cm.plasma(pred)*255))
# pil_img = Image.fromarray(pred, 'RGB')
# importing Image from PIL
# img_tmp = cv2.cvtColor(pred, cv2.COLOR_BGR2RGB)
# im_PIL = Image.fromarray(img_tmp)
# im = Image.fromarray((pred * 255).astype(np.uint8))
# img_bytes = pred.tobytes()
# nparr = np.frombuffer(img_bytes, np.byte)
# pred_pil = cv2.imdecode(nparr, cv2.IMREAD_REDUCED_COLOR_8)
# return "UI in developing process ..."
return pred
title = "<h1 style='text-align: center;'>Semantic Segmentation</h1>"
description = "Upload an image and get prediction mask"
# css_code='body{background-image:url("file=wave.mp4");}'
gr.Interface(fn=gen_pred,
inputs=[gr.Image(type='numpy')],
outputs=gr.Image(type='numpy'),
title=title,
examples=[["003e2c95d.jpg"], ["003b50a15.jpg"], ["003b48a9e.jpg"], ["0038cbe45.jpg"], ["00371aa92.jpg"]],
description=description,
enable_queue=True).launch() |