Spaces:
Sleeping
Sleeping
File size: 2,635 Bytes
0330bc9 e02eeb5 0330bc9 e02eeb5 0330bc9 e02eeb5 |
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 |
import gradio as gr
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import requests
from PIL import Image
from io import BytesIO
# Load model
model = SentenceTransformer('all-mpnet-base-v2')
# Load emoji dictionaries
def kitchen_txt_to_dict(filepath):
emoji_dict = {}
with open(filepath, 'r', encoding='utf-8') as f:
for line in f:
parts = line.strip().split(' ', 1)
if len(parts) == 2:
emoji, desc = parts
emoji_dict[emoji] = desc
return emoji_dict
emotion_dict = kitchen_txt_to_dict('/content/drive/MyDrive/google emoji/google-emoji-kitchen-emotion.txt')
event_dict = kitchen_txt_to_dict('/content/drive/MyDrive/google emoji/google-emoji-kitchen-item.txt')
# Precompute embeddings
emotion_embeddings = {emoji: model.encode(desc) for emoji, desc in emotion_dict.items()}
event_embeddings = {emoji: model.encode(desc) for emoji, desc in event_dict.items()}
# Helper functions
def find_top_emojis(embedding, emoji_embeddings, top_n=1):
similarities = [
(emoji, cosine_similarity([embedding], [e_embed])[0][0])
for emoji, e_embed in emoji_embeddings.items()
]
similarities.sort(key=lambda x: x[1], reverse=True)
return [emoji for emoji, _ in similarities[:top_n]]
def get_emoji_kitchen_url(emoji1, emoji2, size=256):
return f"https://emojik.vercel.app/s/{emoji1}_{emoji2}?size={size}"
def fetch_image(url):
try:
response = requests.get(url)
if response.status_code == 200 and "image" in response.headers.get("Content-Type", ""):
return Image.open(BytesIO(response.content))
else:
return None
except:
return None
# Main function for Gradio
def sentence_to_emojis(sentence):
embedding = model.encode(sentence)
top_emotion = find_top_emojis(embedding, emotion_embeddings, top_n=1)[0]
top_event = find_top_emojis(embedding, event_embeddings, top_n=1)[0]
mashup_url = get_emoji_kitchen_url(top_emotion, top_event)
mashup_image = fetch_image(mashup_url)
return top_emotion, top_event, mashup_image
# Gradio interface
demo = gr.Interface(
fn=sentence_to_emojis,
inputs=gr.Textbox(lines=2, placeholder="Type a sentence..."),
outputs=[
gr.Text(label="Top Emotion Emoji"),
gr.Text(label="Top Event Emoji"),
gr.Image(label=" Kitchen Emoji")
],
title="Sentence → Emoji Mashup",
description="Get the top emotion and event emoji from your sentence, and view the mashup!"
)
demo.launch(share=True) |