Spaces:
Runtime error
Runtime error
File size: 2,248 Bytes
cb43729 5896395 06ce79b 5896395 740be3d 5896395 c52bc1e 5896395 c52bc1e 5896395 c52bc1e 5896395 c52bc1e 5896395 c52bc1e 5896395 c52bc1e 5896395 c52bc1e 5896395 c52bc1e 5896395 06ce79b e09a2cd e6911ff 5896395 e09a2cd c0766d3 e09a2cd 06ce79b e6911ff 5896395 e09a2cd |
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 |
import spaces
import base64
import cv2
import numpy as np
import gradio as gr
from PIL import Image
from io import BytesIO
@spaces.GPU
def crop_face(base64_image):
try:
# Decode the base64 image
img_data = base64.b64decode(base64_image)
np_arr = np.frombuffer(img_data, np.uint8)
image = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
if image is None:
return "Could not decode the image or no data in buffer"
# Load the pre-trained face detector
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Convert the image to grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect faces in the image
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# If no faces are detected, return message
if len(faces) == 0:
return "No faces found"
# Crop the first face found
x, y, w, h = faces[0]
face_crop = image[y:y+h, x:x+w]
# Encode the cropped face to base64
_, buffer = cv2.imencode('.jpg', face_crop)
face_base64 = base64.b64encode(buffer).decode('utf-8')
return face_base64
except Exception as e:
return f"An error occurred: {str(e)}"
def image_to_base64(image):
# Convert PIL Image to bytes
buffered = io.BytesIO()
image.save(buffered, format="JPEG")
# Encode bytes to Base64 string
img_str = base64.b64encode(buffered.getvalue()).decode()
return img_str
# Define the Gradio interface using the updated syntax
base64_converter_interface = gr.Interface(
fn=image_to_base64,
inputs=gr.Image(type="pil"),
outputs=gr.Textbox(),
title="Image to Base64 Encoder",
description="Upload an image and convert it to a Base64 encoded string."
)
face_crop_interface = gr.Interface(
fn=crop_face,
inputs="text",
outputs="text",
title="Face Cropper",
description="Input a base64 encoded image to get a base64 encoded cropped face."
)
if __name__ == "__main__":
gr.TabbedInterface([base64_converter_interface, face_crop_interface], ["Convert to Base64","Crop Face"]).launch()
|