Files
patchy631--ai-engineering-hub/pixeltable-mcp/image-index/test.py
T
2026-07-13 12:37:47 +08:00

77 lines
2.3 KiB
Python

import pixeltable as pxt
import os
from pixeltable.functions.openai import vision
from pixeltable.functions.huggingface import sentence_transformer
# Set OpenAI API key (replace with your actual key or use an environment variable)
os.environ['OPENAI_API_KEY'] = 'your-openai-api-key-here'
# Base directory for the index
DIRECTORY = 'image_search'
TABLE_NAME = f'{DIRECTORY}.images'
RECREATE = True
# Recreate the directory if specified
if RECREATE:
pxt.drop_dir(DIRECTORY, force=True)
# Check if table exists, create it if not
if TABLE_NAME not in pxt.list_tables():
# Create directory and table
pxt.create_dir(DIRECTORY, if_exists='ignore')
image_index = pxt.create_table(
TABLE_NAME,
{'image_file': pxt.Image},
if_exists='ignore'
)
# Add GPT-4 Vision analysis
image_index.add_computed_column(
image_description=vision(
prompt="Describe the image. Be specific on the colors you see.",
image=image_index.image_file,
model="gpt-4o-mini"
)
)
# Define the embedding model and create embedding index
embed_model = sentence_transformer.using(model_id='intfloat/e5-large-v2')
image_index.add_embedding_index(
column='image_description',
string_embed=embed_model,
if_exists='ignore'
)
else:
image_index = pxt.get_table(TABLE_NAME)
# Sample image URLs
IMAGE_URL = (
"https://raw.github.com/pixeltable/pixeltable/release/docs/resources/images/"
)
image_urls = [
IMAGE_URL + doc for doc in [
"000000000030.jpg",
"000000000034.jpg",
"000000000042.jpg",
]
]
# Insert images into the table
image_index.insert({'image_file': url} for url in image_urls)
# Perform a sample query
query_text = "Show me images containing blue flowers"
sim = image_index.image_description.similarity(query_text)
results = (
image_index.order_by(sim, asc=False)
.select(image_index.image_file, image_index.image_description, sim=sim)
.limit(3)
.collect()
)
# Print results
print(f"Query Results for '{query_text}' in '{TABLE_NAME}':\n")
for i, row in enumerate(results.to_pandas().itertuples(), 1):
print(f"{i}. Score: {row.sim:.4f}")
print(f" Description: {row.image_description}")
print(f" Image URL: {row.image_file}\n")