nomic / example_client.py
AkinyemiAra's picture
Upload 10 files
67e79b5 verified
import requests
import base64
from io import BytesIO
from PIL import Image
import json
import matplotlib.pyplot as plt
import numpy as np
# This is an example client that demonstrates how to use the Gradio API
# You would replace this URL with the actual URL of your deployed Huggingface Space
GRADIO_API_URL = "https://your-username-nomic-vision-embedding.hf.space/api/predict"
def embed_image_from_url(image_url):
"""
Generate embeddings for an image using the Gradio API
Args:
image_url: URL of the image to embed
Returns:
The embedding vector and its dimension
"""
try:
# Download the image
response = requests.get(image_url)
image = Image.open(BytesIO(response.content))
# Convert image to bytes
img_byte_arr = BytesIO()
image.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
# Prepare the request
files = {
'data': ('image.png', img_byte_arr, 'image/png')
}
# Send the request to the Gradio API
response = requests.post(GRADIO_API_URL, files=files)
# Parse the response
if response.status_code == 200:
result = response.json()
embedding_data = result['data'][0]
embedding_dim = result['data'][1]
return embedding_data, embedding_dim
else:
print(f"Error: HTTP {response.status_code}")
print(response.text)
return None, None
except Exception as e:
print(f"Error: {str(e)}")
return None, None
def embed_image_from_file(image_path):
"""
Generate embeddings for an image using the Gradio API
Args:
image_path: Path to the image file
Returns:
The embedding vector and its dimension
"""
try:
# Load the image
image = Image.open(image_path)
# Convert image to bytes
img_byte_arr = BytesIO()
image.save(img_byte_arr, format=image.format if image.format else 'PNG')
img_byte_arr = img_byte_arr.getvalue()
# Prepare the request
files = {
'data': ('image.png', img_byte_arr, 'image/png')
}
# Send the request to the Gradio API
response = requests.post(GRADIO_API_URL, files=files)
# Parse the response
if response.status_code == 200:
result = response.json()
embedding_data = result['data'][0]
embedding_dim = result['data'][1]
return embedding_data, embedding_dim
else:
print(f"Error: HTTP {response.status_code}")
print(response.text)
return None, None
except Exception as e:
print(f"Error: {str(e)}")
return None, None
def visualize_embedding(embedding):
"""
Visualize the embedding vector
Args:
embedding: The embedding vector
"""
# Convert the embedding to a numpy array
embedding_array = np.array(embedding)
# Plot the embedding
plt.figure(figsize=(10, 5))
plt.plot(embedding_array)
plt.title("Embedding Vector")
plt.xlabel("Dimension")
plt.ylabel("Value")
plt.grid(True)
plt.show()
# Plot the histogram of the embedding
plt.figure(figsize=(10, 5))
plt.hist(embedding_array, bins=50)
plt.title("Embedding Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.grid(True)
plt.show()
if __name__ == "__main__":
# Example usage with an image URL
image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/bert-architects.png"
print(f"Generating embedding for image: {image_url}")
embedding_data, embedding_dim = embed_image_from_url(image_url)
if embedding_data:
print(f"Embedding dimension: {embedding_dim}")
print(f"First 10 values of embedding: {embedding_data['embedding'][:10]}...")
# Visualize the embedding
visualize_embedding(embedding_data['embedding'])
# Example usage with a local image file
# Uncomment the following lines to use a local image file
# image_path = "path/to/your/image.jpg"
# print(f"Generating embedding for image: {image_path}")
# embedding_data, embedding_dim = embed_image_from_file(image_path)
#
# if embedding_data:
# print(f"Embedding dimension: {embedding_dim}")
# print(f"First 10 values of embedding: {embedding_data['embedding'][:10]}...")
#
# # Visualize the embedding
# visualize_embedding(embedding_data['embedding'])