robgonsalves commited on
Commit
aa3546b
1 Parent(s): 402ed5c

fixed a bug, and misc changes

Browse files
Files changed (1) hide show
  1. app.py +47 -32
app.py CHANGED
@@ -1,32 +1,47 @@
1
- import gradio as gr
2
- from PIL import Image
3
- import torch
4
- from transformers import CLIPProcessor, CLIPModel
5
-
6
- # Load model and processor
7
- model = CLIPModel.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K")
8
- processor = CLIPProcessor.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K")
9
-
10
- def calculate_similarity(image, text_prompt):
11
- # Process inputs
12
- inputs = processor(text=text_prompt, images=image, return_tensors="pt", padding=True)
13
-
14
- # Forward pass
15
- outputs = model(**inputs)
16
-
17
- # Normalize and calculate cosine similarity
18
- image_features = outputs.image_embeds / outputs.image_embeds.norm(dim=-1, keepdim=True)
19
- text_features = outputs.text_embeds / outputs.text_embeds.norm(dim=-1, keepdim=True)
20
- cosine_similarity = torch.nn.functional.cosine_similarity(image_features, text_features)
21
-
22
- return {"Cosine Similarity": cosine_similarity.item()}
23
-
24
- # Set up Gradio interface
25
- iface = gr.Interface(fn=calculate_similarity,
26
- inputs=[gr.inputs.Image(type="pil"), gr.inputs.Textbox(label="Text Prompt")],
27
- outputs=[gr.outputs.Label(label="Cosine Similarity")],
28
- title="OpenClip Cosine Similarity Calculator",
29
- description="Upload an image and provide a text prompt to calculate the cosine similarity.")
30
-
31
- # Launch the interface locally for testing
32
- iface.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from PIL import Image
3
+ import torch
4
+ from transformers import CLIPProcessor, CLIPModel
5
+
6
+ # Load model and processor
7
+ model = CLIPModel.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K")
8
+ processor = CLIPProcessor.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K")
9
+
10
+ def calculate_similarity(image, text_prompt):
11
+ # Ensure text_prompt is a string
12
+ if not isinstance(text_prompt, str):
13
+ text_prompt = str(text_prompt)
14
+
15
+ # Process inputs
16
+ inputs = processor(images=image, text=text_prompt, return_tensors="pt", padding=True)
17
+
18
+ # Forward pass
19
+ outputs = model(**inputs)
20
+
21
+ # Normalize and calculate cosine similarity
22
+ image_features = outputs.image_embeds / outputs.image_embeds.norm(dim=-1, keepdim=True)
23
+ text_features = outputs.text_embeds / outputs.text_embeds.norm(dim=-1, keepdim=True)
24
+ cosine_similarity = torch.nn.functional.cosine_similarity(image_features, text_features)
25
+
26
+ # Adjusting the similarity score
27
+ adjusted_similarity = cosine_similarity.item() * 3 * 100
28
+ clipped_similarity = min(adjusted_similarity, 99.99)
29
+ formatted_similarity = f"According to OpenCLIP, the image and the text prompt are {clipped_similarity:.2f}% similar."
30
+
31
+ return formatted_similarity
32
+
33
+ # Set up Gradio interface
34
+ iface = gr.Interface(
35
+ fn=calculate_similarity,
36
+ inputs=[
37
+ gr.Image(type="pil", label="Upload Image", height=512),
38
+ gr.Textbox(label="Text Prompt")
39
+ ],
40
+ outputs=gr.Text(),
41
+ allow_flagging="never",
42
+ title="OpenClip Cosine Similarity Calculator",
43
+ description="Provide a text prompt and upload an image to calculate the cosine similarity."
44
+ )
45
+
46
+ # Launch the interface with a public link for sharing online
47
+ iface.launch(share=True)