Celebrity_Recognition / UploadMode.py
Sarath0x8f's picture
Upload 7 files
0f186b9 verified
import cv2
import gradio as gr
from details import get_celebrity_details
from model import predict_faces
# Upload mode logic with dynamic radio button functionality
def upload_mode(image):
# Predict the faces in the uploaded image
predictions, _ = predict_faces(image, cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# If no faces are detected, return default messages
if predictions == "No faces detected.":
return "No faces detected", "No details available", "path/to/default/img.jpg"
# Get the first predicted celebrity and their details
celebrity_name = predictions[0] if predictions else None
details = get_celebrity_details(celebrity_name) if celebrity_name else {"details": "No details available",
"img": "path/to/default/img.jpg"}
# Return dynamic radio button choices, details, and image path
return gr.update(choices=predictions), details["details"], details["img"]
# Define a callback function for when a radio button choice is selected
def update_details(selected_celebrity):
details = get_celebrity_details(selected_celebrity)
return details["details"], details["img"]
with gr.Blocks() as upload_interface:
with gr.Row():
image_input = gr.Image(type="numpy", label="Upload Image with Celebrities")
radio_btn = gr.Radio(choices=[], label="Select Detected Celebrity", interactive=True)
with gr.Row():
details_textbox = gr.Markdown(label="Celebrity Details")
image = gr.Image(type="filepath", label="Celebrity")
# Callbacks for updating the interface
image_input.change(upload_mode, inputs=image_input, outputs=[radio_btn, details_textbox, image])
radio_btn.change(update_details, inputs=radio_btn, outputs=[details_textbox, image])
if __name__ == "__main__":
upload_interface.launch()