Dan Mo commited on
Commit
e02eeb5
·
1 Parent(s): 1e5cb1c

Implement Gradio interface for emoji mashup based on sentence input

Browse files
Files changed (1) hide show
  1. app.py +74 -4
app.py CHANGED
@@ -1,7 +1,77 @@
1
  import gradio as gr
 
 
 
 
 
 
2
 
3
- def greet(name):
4
- return "Hello " + name + "!!"
5
 
6
- demo = gr.Interface(fn=greet, inputs="text", outputs="text")
7
- demo.launch(share=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from sentence_transformers import SentenceTransformer
3
+ from sklearn.metrics.pairwise import cosine_similarity
4
+ import numpy as np
5
+ import requests
6
+ from PIL import Image
7
+ from io import BytesIO
8
 
9
+ # Load model
10
+ model = SentenceTransformer('all-mpnet-base-v2')
11
 
12
+ # Load emoji dictionaries
13
+ def kitchen_txt_to_dict(filepath):
14
+ emoji_dict = {}
15
+ with open(filepath, 'r', encoding='utf-8') as f:
16
+ for line in f:
17
+ parts = line.strip().split(' ', 1)
18
+ if len(parts) == 2:
19
+ emoji, desc = parts
20
+ emoji_dict[emoji] = desc
21
+ return emoji_dict
22
+
23
+ emotion_dict = kitchen_txt_to_dict('/content/drive/MyDrive/google emoji/google-emoji-kitchen-emotion.txt')
24
+ event_dict = kitchen_txt_to_dict('/content/drive/MyDrive/google emoji/google-emoji-kitchen-item.txt')
25
+
26
+ # Precompute embeddings
27
+ emotion_embeddings = {emoji: model.encode(desc) for emoji, desc in emotion_dict.items()}
28
+ event_embeddings = {emoji: model.encode(desc) for emoji, desc in event_dict.items()}
29
+
30
+ # Helper functions
31
+ def find_top_emojis(embedding, emoji_embeddings, top_n=1):
32
+ similarities = [
33
+ (emoji, cosine_similarity([embedding], [e_embed])[0][0])
34
+ for emoji, e_embed in emoji_embeddings.items()
35
+ ]
36
+ similarities.sort(key=lambda x: x[1], reverse=True)
37
+ return [emoji for emoji, _ in similarities[:top_n]]
38
+
39
+ def get_emoji_kitchen_url(emoji1, emoji2, size=256):
40
+ return f"https://emojik.vercel.app/s/{emoji1}_{emoji2}?size={size}"
41
+
42
+ def fetch_image(url):
43
+ try:
44
+ response = requests.get(url)
45
+ if response.status_code == 200 and "image" in response.headers.get("Content-Type", ""):
46
+ return Image.open(BytesIO(response.content))
47
+ else:
48
+ return None
49
+ except:
50
+ return None
51
+
52
+ # Main function for Gradio
53
+ def sentence_to_emojis(sentence):
54
+ embedding = model.encode(sentence)
55
+
56
+ top_emotion = find_top_emojis(embedding, emotion_embeddings, top_n=1)[0]
57
+ top_event = find_top_emojis(embedding, event_embeddings, top_n=1)[0]
58
+
59
+ mashup_url = get_emoji_kitchen_url(top_emotion, top_event)
60
+ mashup_image = fetch_image(mashup_url)
61
+
62
+ return top_emotion, top_event, mashup_image
63
+
64
+ # Gradio interface
65
+ demo = gr.Interface(
66
+ fn=sentence_to_emojis,
67
+ inputs=gr.Textbox(lines=2, placeholder="Type a sentence..."),
68
+ outputs=[
69
+ gr.Text(label="Top Emotion Emoji"),
70
+ gr.Text(label="Top Event Emoji"),
71
+ gr.Image(label=" Kitchen Emoji")
72
+ ],
73
+ title="Sentence → Emoji Mashup",
74
+ description="Get the top emotion and event emoji from your sentence, and view the mashup!"
75
+ )
76
+
77
+ demo.launch(share=True)