AkinyemiAra commited on
Commit
1ccce51
·
verified ·
1 Parent(s): 9637ed6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -24
app.py CHANGED
@@ -10,7 +10,6 @@ from transformers import CLIPProcessor, CLIPModel
10
  from PIL import Image
11
  import torch
12
  import numpy as np
13
- from typing import Tuple
14
  import spaces
15
 
16
  # Load model/processor
@@ -19,7 +18,7 @@ processor: CLIPProcessor = CLIPProcessor.from_pretrained("openai/clip-vit-large-
19
  model.eval()
20
 
21
  @spaces.GPU
22
- def get_embedding(image: Image.Image) -> Tuple[str, str]:
23
  """
24
  Generate CLIP embedding for an image.
25
 
@@ -27,7 +26,7 @@ def get_embedding(image: Image.Image) -> Tuple[str, str]:
27
  image (Image.Image): PIL Image object to process
28
 
29
  Returns:
30
- Tuple[str, str]: A tuple containing (embedding_info, embedding_values)
31
  """
32
  device: str = "cuda" if torch.cuda.is_available() else "cpu"
33
 
@@ -41,36 +40,19 @@ def get_embedding(image: Image.Image) -> Tuple[str, str]:
41
  # L2 normalize the embeddings
42
  emb = emb / emb.norm(p=2, dim=-1, keepdim=True)
43
 
44
- # Convert to numpy for easier handling
45
  emb_numpy = emb.cpu().numpy().squeeze()
46
 
47
- # Create formatted output
48
- embedding_info = f"Embedding Shape: {emb_numpy.shape}\nDevice Used: {device}\nNormalized: Yes (L2)"
49
-
50
- # Format embedding values (show first 10 and last 10 values for readability)
51
- if len(emb_numpy) > 20:
52
- embedding_preview = (
53
- f"First 10 values: {emb_numpy[:10].tolist()}\n"
54
- f"...\n"
55
- f"Last 10 values: {emb_numpy[-10:].tolist()}\n\n"
56
- f"Full embedding array:\n{emb_numpy.tolist()}"
57
- )
58
- else:
59
- embedding_preview = f"Full embedding array:\n{emb_numpy.tolist()}"
60
-
61
- return embedding_info, embedding_preview
62
 
63
  # Create Gradio interface
64
  demo: gr.Interface = gr.Interface(
65
  fn=get_embedding,
66
  inputs=gr.Image(type="pil", label="Upload Image"),
67
- outputs=[
68
- gr.Textbox(label="Embedding Info", lines=3),
69
- gr.Textbox(label="Embedding Values", lines=20, max_lines=30)
70
- ],
71
  allow_flagging="never",
72
  title="CLIP Image Embedding Generator",
73
- description="Upload an image to generate its CLIP embedding vector. The embedding is L2-normalized and ready for similarity computations.",
74
  theme=gr.themes.Soft()
75
  )
76
 
 
10
  from PIL import Image
11
  import torch
12
  import numpy as np
 
13
  import spaces
14
 
15
  # Load model/processor
 
18
  model.eval()
19
 
20
  @spaces.GPU
21
+ def get_embedding(image: Image.Image) -> str:
22
  """
23
  Generate CLIP embedding for an image.
24
 
 
26
  image (Image.Image): PIL Image object to process
27
 
28
  Returns:
29
+ str: The full embedding array as a string
30
  """
31
  device: str = "cuda" if torch.cuda.is_available() else "cpu"
32
 
 
40
  # L2 normalize the embeddings
41
  emb = emb / emb.norm(p=2, dim=-1, keepdim=True)
42
 
43
+ # Convert to numpy and return as string
44
  emb_numpy = emb.cpu().numpy().squeeze()
45
 
46
+ return str(emb_numpy.tolist())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  # Create Gradio interface
49
  demo: gr.Interface = gr.Interface(
50
  fn=get_embedding,
51
  inputs=gr.Image(type="pil", label="Upload Image"),
52
+ outputs=gr.Textbox(label="Embedding", lines=20, max_lines=30),
 
 
 
53
  allow_flagging="never",
54
  title="CLIP Image Embedding Generator",
55
+ description="Upload an image to generate its CLIP embedding vector.",
56
  theme=gr.themes.Soft()
57
  )
58