Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import numpy as np | |
| import tensorflow as tf | |
| from PIL import Image | |
| import cv2 | |
| # Load TensorFlow Lite model | |
| interpreter = tf.lite.Interpreter(model_path="facenet.tflite") | |
| interpreter.allocate_tensors() | |
| # Get input and output details | |
| input_details = interpreter.get_input_details() | |
| output_details = interpreter.get_output_details() | |
| def preprocess_image(image): | |
| """ | |
| Preprocess the input image for the FaceNet model. | |
| """ | |
| image = Image.fromarray(image) | |
| image = image.resize((160, 160)) # Resize to the model's input size | |
| image_array = np.asarray(image).astype(np.float32) | |
| image_array = (image_array - 127.5) / 127.5 # Normalize to [-1, 1] | |
| image_array = np.expand_dims(image_array, axis=0) # Add batch dimension | |
| return image_array | |
| def create_face_embedding(image): | |
| """ | |
| Generate a face embedding for the given image. | |
| """ | |
| processed_image = preprocess_image(image) | |
| # Run the model | |
| interpreter.set_tensor(input_details[0]['index'], processed_image) | |
| interpreter.invoke() | |
| # Extract the embedding | |
| embedding = interpreter.get_tensor(output_details[0]['index']) | |
| return embedding.flatten() | |
| # Gradio interface | |
| def generate_embedding(image): | |
| """ | |
| Gradio function to process the image and return full embeddings. | |
| """ | |
| try: | |
| embedding = create_face_embedding(image) | |
| return embedding.tolist() # Convert numpy array to list | |
| except Exception as e: | |
| return f"Error: {e}" | |
| # Gradio interface setup | |
| iface = gr.Interface( | |
| fn=generate_embedding, | |
| inputs=gr.Image(type="numpy", label="Upload Face Image"), | |
| outputs=gr.JSON(label="Face Embedding"), | |
| title="Face Embedding Generator", | |
| description="Upload a face image to generate a 512-dimensional embedding using the FaceNet model." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch(share=True) | |