Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import tensorflow as tf | |
| import cv2 | |
| import os | |
| # Suppress TensorFlow logging | |
| os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" | |
| # Constants | |
| IMAGE_H = 512 | |
| IMAGE_W = 512 | |
| NUM_CLASSES = 11 | |
| # RGB color codes for each class | |
| RGB_CODES = [ | |
| [0, 0, 0], [0, 153, 255], [102, 255, 153], [0, 204, 153], | |
| [255, 255, 102], [255, 255, 204], [255, 153, 0], [255, 102, 255], | |
| [102, 0, 51], [255, 204, 255], [255, 0, 102] | |
| ] | |
| # Load the trained model | |
| model = tf.keras.models.load_model("ten_epoch_model.h5") | |
| # Function to convert grayscale mask to RGB mask | |
| def grayscale_to_rgb(mask, rgb_codes): | |
| h, w = mask.shape[0], mask.shape[1] | |
| mask = mask.astype(np.int32) | |
| output = [rgb_codes[pixel] for pixel in mask.flatten()] | |
| return np.reshape(output, (h, w, 3)).astype(np.uint8) | |
| # Gradio inference function | |
| def segment_face(image): | |
| # Resize and normalize input image | |
| image_resized = cv2.resize(image, (IMAGE_W, IMAGE_H)) | |
| image_input = image_resized / 255.0 | |
| image_input = np.expand_dims(image_input, axis=0).astype(np.float32) | |
| # Predict the mask | |
| pred = model.predict(image_input, verbose=0)[0] | |
| pred_mask = np.argmax(pred, axis=-1).astype(np.uint8) | |
| # Convert predicted mask to RGB | |
| rgb_mask = grayscale_to_rgb(pred_mask, RGB_CODES) | |
| return rgb_mask | |
| # Launch Gradio app | |
| iface = gr.Interface( | |
| fn=segment_face, | |
| inputs=gr.Image(type="numpy", label="Upload Face Image"), | |
| outputs=gr.Image(type="numpy", label="Segmentation Mask"), | |
| title="Face Segmentation", | |
| description="Upload a face image to get a segmentation mask with different facial components marked in color." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |