BeautyScore / app.py
katsuchi's picture
Update app.py
23a1d66 verified
import gradio as gr
from model import Trainer
import torch
import cv2
import tempfile
import numpy as np
def predict_beauty_score(img):
trainer = Trainer()
# Save the numpy array as an image temporarily
with tempfile.NamedTemporaryFile(suffix='.jpg', delete=False) as tmp:
# Convert RGB to BGR for cv2
img_bgr = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
cv2.imwrite(tmp.name, img_bgr)
# Use the temporary file path
image_tensor = trainer.image_to_tensor(tmp.name)
prediction = trainer.predict(image_tensor)
score = prediction.item() * 100
# Decide which GIF to show based on the score
if score < 20:
gif_url = "https://i.pinimg.com/originals/9f/79/2a/9f792aed5881d409425de1a4361bc06b.gif"
elif score < 40:
gif_url = "https://i.pinimg.com/originals/ba/f5/c8/baf5c89c099b34decb7f4507b5144366.gif"
elif score < 55:
gif_url = "https://i.pinimg.com/originals/87/b6/dc/87b6dcfeec6f38a3836b1caf1d8fceab.gif"
elif score < 60:
gif_url = "https://i.pinimg.com/originals/3a/90/b8/3a90b87a337b79b9c8b7a3d9bf7250d7.gif"
else:
gif_url = "https://i.pinimg.com/originals/f6/02/01/f6020120d9e99f7b106c557cdc1edb1f.gif"
# Create formatted HTML outpu
html_output = f"""
<div style='text-align: center; padding: 20px;'>
<h2 style='color: #FFFFFF; margin-bottom: 10px;'>Score</h2>
<div style='font-size: 48px; font-weight: bold; color: #1a73e8;'>
{score:.3f}
</div>
<br/>
<div style='display: flex; justify-content: center;'>
<img src="{gif_url}" alt="GIF" width="200" height="200" />
</div>
<p>Enjoy the fun! :)</p>
</div>
"""
return html_output
# Create Gradio interface
demo = gr.Interface(
fn=predict_beauty_score,
inputs=gr.Image(), # Simple image input
outputs=gr.HTML(), # Using HTML output for custom formatting
title="Image Beauty Score Predictor",
description="""
<ul>
<li>Upload an image to get its beauty score prediction</li>
<li>Please remember that this is just for fun and is not intended to downplay anybody and I, as the model creator believe everyone is beautiful the way it is</li>
<li>Respect each other and most importantly have fun :)</li>
</ul>
""",
examples=[
["6082308423334085331.jpg"],
["a00e1c819a87fa56bb1e6058d9814bae.jpg"],
["Screenshot_2024-12-29_211520.png"]
],
cache_examples=True
)
if __name__ == "__main__":
demo.launch()