Spaces:
Sleeping
Sleeping
import gradio as gr | |
import numpy as np | |
from PIL import Image | |
import onnxruntime | |
def preprocess_image(directory): | |
inputs = Image.open(directory) | |
new_img = np.array(inputs) | |
new_img = np.expand_dims(new_img.transpose((2, 0, 1)), 0) | |
new_img = ((new_img - 127.5) / 127.5).astype(np.float32) | |
return new_img | |
def color_map(N=256): | |
def bitget(byteval, idx): | |
return ((byteval & (1 << idx)) != 0) | |
cmap = np.zeros((N, 3), dtype=np.uint8) | |
for i in range(N): | |
r = g = b = 0 | |
c = i | |
for j in range(8): | |
r = r | (bitget(c, 0) << 7-j) | |
g = g | (bitget(c, 1) << 7-j) | |
b = b | (bitget(c, 2) << 7-j) | |
c = c >> 3 | |
cmap[i] = np.array([r, g, b]) | |
return cmap | |
def decode_segmap(temp): | |
cmap = color_map() | |
r = temp.copy() | |
g = temp.copy() | |
b = temp.copy() | |
for l in range(0, 21): | |
r[temp == l] = cmap[l][0] | |
g[temp == l] = cmap[l][1] | |
b[temp == l] = cmap[l][2] | |
rgb = np.zeros((temp.shape[0], temp.shape[1], 3)).astype(np.uint8) | |
rgb[:, :, 0] = r | |
rgb[:, :, 1] = g | |
rgb[:, :, 2] = b | |
return rgb | |
def inference(image_dir): | |
ort_session = onnxruntime.InferenceSession("model.onnx", providers=["CPUExecutionProvider"]) | |
image = preprocess_image(image_dir) | |
outputs = ort_session.run( | |
None, | |
{"pixel_values": image}) | |
outputs = outputs[0].squeeze().argmax(axis=0) | |
cmap = decode_segmap(outputs) | |
return cmap | |
inputs_images = gr.components.Image(type="filepath", label="Input Image") | |
outputs_images = gr.components.Image(type="numpy", label="Output Image") | |
app = gr.Interface( | |
fn=inference, | |
inputs=inputs_images, | |
outputs=outputs_images, | |
title="Semantic segmentation", | |
cache_examples=False,) | |
app.launch() | |