Spaces:
Runtime error
Runtime error
File size: 3,635 Bytes
2bf3c18 781cf08 2bf3c18 644173a 03c454c 2bf3c18 276b619 781cf08 276b619 781cf08 644173a 5f830d0 644173a 5f830d0 644173a 5f830d0 644173a 5f830d0 2bc793a 5f830d0 644173a 781cf08 5f830d0 644173a 5f830d0 644173a 5f830d0 781cf08 644173a 781cf08 2bf3c18 644173a 781cf08 5f830d0 03c454c 5f830d0 781cf08 03c454c 5f830d0 2bf3c18 03c454c 5f830d0 2bc793a 5f830d0 2bf3c18 781cf08 fb90d20 09d93d9 fb90d20 03c454c 781cf08 03c454c 644173a 781cf08 fb90d20 781cf08 644173a 781cf08 644173a 781cf08 5f830d0 |
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
import gradio as gr
from transformers import pipeline
from datasets import load_dataset
import requests
import traceback
import json
import os
dataset = load_dataset("SaladSlayer00/twin_matcher_data")
image_classifier = pipeline("image-classification", model="SaladSlayer00/twin_matcher_beta")
def format_info(info_json):
try:
info_data = json.loads(info_json)
formatted_info = "<table style='border-collapse: collapse; width: 80%; margin: 20px;'>"
formatted_info += "<tr style='background-color: #f2f2f2;'>"
for key in info_data[0].keys():
formatted_info += f"<th style='border: 1px solid #dddddd; text-align: left; padding: 8px;'><b>{key.capitalize()}</b></th>"
formatted_info += "</tr>"
for entry in info_data:
formatted_info += "<tr>"
for value in entry.values():
formatted_info += f"<td style='border: 1px solid #dddddd; text-align: left; padding: 8px;'>{value}</td>"
formatted_info += "</tr>"
formatted_info += "</table>"
return formatted_info
except Exception as e:
print(f"Error formatting info: {e}")
return "Info not available."
def fetch_info(celebrity_label):
try:
parts = celebrity_label.split("_")
formatted_label = " ".join([part.capitalize() for part in parts])
api_url = f'https://api.api-ninjas.com/v1/celebrity?name={formatted_label}'
token = os.getenv('TOKEN')
response = requests.get(api_url, headers={'X-Api-Key': token})
if response.status_code == 200:
return format_info(response.text)
else:
return "Description not available."
except Exception as e:
print(f"Error fetching information: {e}")
traceback.print_exc()
return "Description not available."
def fetch_images_for_label(label):
label_data = dataset['train'].filter(lambda example: example['label'] == label)
images = [example['image'] for example in label_data]
return images
def predict_and_fetch_images(input_image):
try:
# Use the image classifier pipeline
predictions = image_classifier(input_image)
top_prediction = max(predictions, key=lambda x: x['score'])
label, score = top_prediction['label'], top_prediction['score']
# Fetch images for the predicted label
images = fetch_images_for_label(label)
# Fetch information for the predicted label
info = fetch_info(label)
return label, score, images, info, "No Error"
except Exception as e:
print(f"Error during prediction: {e}")
traceback.print_exc()
return "Error during prediction", 0, [], "N/A", str(e)
example_images = [
"images/megan_fox.png",
"images/chris_evans.png",
"images/millie_bobby_brown.png",
"images/alvaro_morte.png",
"images/amber_heard.png"
]
# Gradio interface
iface = gr.Interface(
fn=predict_and_fetch_images,
inputs=gr.Image(type="pil", label="Upload or Take a Snapshot"),
outputs=[
"text", # Predicted label
"number", # Prediction score
gr.Gallery(label="Lookalike Images"), # Slideshow component for images
"html", # Info/Description as HTML
gr.Textbox(type="text", label="Feedback", placeholder="Provide feedback here") # Feedback textbox
],
examples=example_images,
live=True,
title="Celebrity Lookalike Predictor",
description="Take a snapshot or upload an image to see which celebrity you look like!"
)
iface.launch()
|