Spaces:
Running
Running
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 MCP server | |
# You would replace this URL with the actual URL of your deployed Huggingface Space | |
MCP_SERVER_URL = "https://your-username-nomic-vision-mcp.hf.space/mcp" | |
def embed_image_from_url(image_url): | |
""" | |
Generate embeddings for an image using the MCP server's embed_image tool | |
Args: | |
image_url: URL of the image to embed | |
Returns: | |
The embedding vector and its dimension | |
""" | |
# Prepare the MCP request | |
mcp_request = { | |
"jsonrpc": "2.0", | |
"method": "callTool", | |
"params": { | |
"name": "embed_image", | |
"arguments": { | |
"image_url": image_url | |
} | |
}, | |
"id": 1 | |
} | |
# Send the request to the MCP server | |
response = requests.post(MCP_SERVER_URL, json=mcp_request) | |
# Parse the response | |
result = response.json() | |
if "error" in result: | |
print(f"Error: {result['error']['message']}") | |
return None | |
# Extract the embedding from the response | |
content = result["result"]["content"][0]["text"] | |
embedding_data = json.loads(content) | |
return embedding_data | |
def embed_image_from_file(image_path): | |
""" | |
Generate embeddings for an image using the MCP server's embed_image tool | |
Args: | |
image_path: Path to the image file | |
Returns: | |
The embedding vector and its dimension | |
""" | |
# Load the image | |
with open(image_path, "rb") as f: | |
image_data = f.read() | |
# Encode the image as base64 | |
image_base64 = base64.b64encode(image_data).decode("utf-8") | |
# Prepare the MCP request | |
mcp_request = { | |
"jsonrpc": "2.0", | |
"method": "callTool", | |
"params": { | |
"name": "embed_image", | |
"arguments": { | |
"image_data": image_base64 | |
} | |
}, | |
"id": 1 | |
} | |
# Send the request to the MCP server | |
response = requests.post(MCP_SERVER_URL, json=mcp_request) | |
# Parse the response | |
result = response.json() | |
if "error" in result: | |
print(f"Error: {result['error']['message']}") | |
return None | |
# Extract the embedding from the response | |
content = result["result"]["content"][0]["text"] | |
embedding_data = json.loads(content) | |
return embedding_data | |
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 = embed_image_from_url(image_url) | |
if embedding_data: | |
print(f"Embedding dimension: {embedding_data['dimension']}") | |
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 = embed_image_from_file(image_path) | |
# | |
# if embedding_data: | |
# print(f"Embedding dimension: {embedding_data['dimension']}") | |
# print(f"First 10 values of embedding: {embedding_data['embedding'][:10]}...") | |
# | |
# # Visualize the embedding | |
# visualize_embedding(embedding_data['embedding']) |