Complete API documentation for the Visual Search system.
Main service for indexing images.
from visual_search.indexing.indexing_service import IndexingService
service = IndexingService(
storage: StorageBackend,
embedding_service: EmbeddingService,
index: VectorIndex,
)Index a single image.
Parameters:
| Name | Type | Description |
|---|---|---|
image |
PIL.Image |
Image to index |
image_id |
str |
Unique identifier for the image |
Returns: ImageMetadata object
Example:
from PIL import Image
image = Image.open("photo.jpg")
metadata = service.index_image(image, "photo_001")Index multiple images at once.
Parameters:
| Name | Type | Description |
|---|---|---|
images |
list[PIL.Image] |
List of images |
image_ids |
list[str] |
List of unique identifiers |
Returns: List of ImageMetadata objects
Remove an image from the index.
Parameters:
| Name | Type | Description |
|---|---|---|
image_id |
str |
Image ID to remove |
delete_from_storage |
bool |
Also delete from storage |
Save the index to disk.
Load a previously saved index.
Return number of indexed images.
Service for finding similar images.
from visual_search.prediction.nearest_neighbor import NearestNeighborSearch
search = NearestNeighborSearch(
index: VectorIndex,
metadata_store: dict = None, # Optional metadata
)Search for similar images using a query vector.
Parameters:
| Name | Type | Description |
|---|---|---|
query_vector |
np.ndarray |
512-dim query embedding |
query_id |
str |
Query identifier |
k |
int |
Number of results |
include_metadata |
bool |
Include image metadata |
Returns: SearchResults object
Example:
results = search.search(
query_vector=embedding,
query_id="q001",
k=10,
include_metadata=True,
)
for result in results.results:
print(f"{result.rank}. {result.image_id}: {result.score:.4f}")Search using an already-indexed image.
Parameters:
| Name | Type | Description |
|---|---|---|
image_id |
str |
Indexed image to use as query |
query_id |
str |
Query identifier |
k |
int |
Number of results |
exclude_query |
bool |
Exclude query image from results |
Batch search with multiple queries.
Post-process search results.
from visual_search.prediction.reranking import Reranker
reranker = Reranker(max_distance=10.0)rerank(results, normalize=True, min_score=None, top_k=None, diversity_threshold=None) -> SearchResults
Apply reranking pipeline.
Parameters:
| Name | Type | Description |
|---|---|---|
results |
SearchResults |
Raw search results |
normalize |
bool |
Convert L2 distance to similarity |
min_score |
float |
Minimum score threshold |
top_k |
int |
Limit number of results |
diversity_threshold |
float |
Remove results too similar to each other |
Example:
reranked = reranker.rerank(
results=raw_results,
normalize=True,
min_score=0.3,
top_k=5,
)Generate CLIP embeddings from images.
from visual_search.prediction.embedding_service import EmbeddingService
service = EmbeddingService(
model_name: str = "clip-ViT-B-32",
device: str = None, # Auto-detect GPU/CPU
)Generate embedding for a single image.
Generate embeddings for multiple images.
FAISS-based vector index.
from visual_search.indexing.index_table import VectorIndex
index = VectorIndex(dimension=512)Add a single vector.
Add multiple vectors.
Search for nearest neighbors.
Returns: Tuple of (image_ids, distances)
Remove a vector.
Check if image ID exists.
Get vector by image ID.
Persistence operations.
from visual_search.models.image import ImageMetadata
metadata = ImageMetadata(
image_id="img001",
file_path="images/img001.jpg",
width=1920,
height=1080,
format="JPEG",
)
# Properties
metadata.aspect_ratio # -> 1.778from visual_search.models.embedding import EmbeddingVector
embedding = EmbeddingVector(
image_id="img001",
vector=[0.1, 0.2, ...], # 512 floats
model_name="clip-ViT-B-32",
)
# Methods
embedding.to_numpy() # -> np.ndarray
embedding.normalize() # -> EmbeddingVector (unit length)
embedding.cosine_similarity(other) # -> floatfrom visual_search.models.search_result import SearchResult, SearchResults
result = SearchResult(
image_id="img001",
score=0.95,
rank=1,
metadata={"file_path": "..."},
)
results = SearchResults(
query_id="q001",
results=[result, ...],
)
# Methods
results.get_top_k(5) # -> list[SearchResult]
results.get_image_ids() # -> list[str]