|
import gradio as gr |
|
|
|
from pathlib import Path |
|
import tensorflow as tf |
|
from tf_bodypix.api import download_model, load_model, BodyPixModelPaths |
|
import numpy as np |
|
from PIL import Image |
|
|
|
|
|
modelPath = download_model(BodyPixModelPaths.RESNET50_FLOAT_STRIDE_16) |
|
bodypix_model = load_model(modelPath) |
|
|
|
|
|
def predict(mask_threshold, image): |
|
|
|
image_array = tf.keras.preprocessing.image.img_to_array(image) |
|
result = bodypix_model.predict_single(image_array) |
|
|
|
|
|
mask = result.get_mask(threshold=mask_threshold) |
|
|
|
|
|
colored_mask = result.get_colored_part_mask(mask) |
|
|
|
colored_mask_image = Image.fromarray(colored_mask.astype('uint8'), 'RGB') |
|
|
|
pred_img = np.array(image) * 0.5 + colored_mask * 0.5 |
|
pred_img = pred_img.astype(np.uint8) |
|
pred_img |
|
|
|
return colored_mask_image, pred_img; |
|
|
|
iface = gr.Interface(fn=predict, inputs=[gr.Number(label='Mask Threshold', value=0.5),"image"], outputs=["image","image"]) |
|
iface.launch() |
|
|