Skip to main content

A lightweight Python library for generating image embeddings with semantic search

Project description

imgemb: Image Embeddings and Semantic Search Library

CI PyPI version License: MIT Python 3.8+ [!]

Overview

imgemb is a Python library designed for generating image embeddings and performing efficient similarity search operations. It provides multiple embedding methods ranging from simple color-based approaches to advanced semantic understanding using CLIP models.

Installation

Basic Installation

pip install imgemb

Development Installation

git clone https://github.com/aryanraj2713/image_embeddings
cd image_embeddings
pip install -e ".[dev]"

Core Components

1. Embedding Generation

The library supports four distinct embedding methods:

a. Average Color Method

  • Fastest method for basic color-based similarity
  • Generates a compact 3-dimensional embedding (RGB values)
  • Suitable for simple color-matching tasks
from imgemb import ImageEmbedder

embedder = ImageEmbedder(method="average")
embedding = embedder.generate_embedding("path/to/image.jpg")

b. Grid Method

  • Captures spatial color distribution
  • Configurable grid size (default: 4x4)
  • Returns flattened grid of RGB values
embedder = ImageEmbedder(method="grid", grid_size=(4, 4))
embedding = embedder.generate_embedding("path/to/image.jpg")

c. Edge Detection Method

  • Focuses on image structure and shapes
  • Uses Canny edge detection
  • Returns edge intensity histogram
embedder = ImageEmbedder(method="edge")
embedding = embedder.generate_embedding("path/to/image.jpg")

d. Semantic Method (CLIP-based)

  • Provides high-level semantic understanding
  • Uses OpenAI's CLIP model
  • Returns 512-dimensional embedding
embedder = ImageEmbedder(method="semantic")
embedding = embedder.generate_embedding("path/to/image.jpg")

2. Similarity Search

Basic Search

from imgemb import ImageEmbedder

# Initialize embedder
embedder = ImageEmbedder(method="semantic")

# Find similar images
results = embedder.find_similar_images(
    query_image="query.jpg",
    image_directory="path/to/images/",
    top_k=5,
    distance_metric="cosine"
)

# Results format: List[Tuple[str, float]]
# [(image_path, similarity_score), ...]

Batch Processing

# Process multiple queries efficiently
query_images = ["query1.jpg", "query2.jpg", "query3.jpg"]
batch_results = embedder.batch_find_similar_images(
    query_images=query_images,
    image_directory="path/to/images/",
    top_k=5
)

3. Visualization

Basic Visualization

from imgemb import plot_similar_images

# Create interactive plot
fig = plot_similar_images(
    query_image="query.jpg",
    similar_images=results,
    plot_title="Similar Images"
)

# Display in browser
fig.show()

# Save as HTML
fig.write_html("similar_images.html")

Customized Visualization

fig = plot_similar_images(
    query_image="query.jpg",
    similar_images=results,
    plot_title="Custom Visualization",
    width=1200,
    height=800,
    images_per_row=3
)

4. Command Line Interface

The library provides a comprehensive CLI for common operations:

# Generate embeddings for a directory of images
imgemb generate images/ --output embeddings.json --method semantic

# Find similar images
imgemb find-similar query.jpg images/ \
    --method semantic \
    --top-k 5 \
    --metric cosine \
    --output results.json

# Semantic text-to-image search
imgemb search "a photo of a mountain" images/ \
    --top-k 5 \
    --output results.json

Performance Considerations

  1. Memory Usage

    • Semantic embeddings: ~2KB per image
    • Grid embeddings: Variable (depends on grid size)
    • Edge embeddings: ~1KB per image
    • Average color: 12 bytes per image
  2. Processing Speed (approximate, on CPU)

    • Average color: ~0.01s per image
    • Grid method: ~0.05s per image
    • Edge detection: ~0.1s per image
    • Semantic (CLIP): ~0.5s per image
  3. GPU Acceleration

    • Automatic GPU usage for semantic embeddings if available
    • Significant speed improvement (5-10x) for semantic method

Error Handling

from imgemb.exceptions import EmbeddingError, InvalidMethodError

try:
    embedder = ImageEmbedder(method="semantic")
    embedding = embedder.generate_embedding("image.jpg")
except InvalidMethodError:
    print("Invalid embedding method specified")
except EmbeddingError as e:
    print(f"Error generating embedding: {e}")

Advanced Usage

Custom Distance Metrics

from imgemb import ImageEmbedder
import numpy as np

def custom_distance(embedding1, embedding2):
    return np.sum(np.abs(embedding1 - embedding2))

embedder = ImageEmbedder(method="grid")
results = embedder.find_similar_images(
    "query.jpg",
    "images/",
    distance_metric=custom_distance
)

Embedding Persistence

# Save embeddings
embedder.save_embeddings("embeddings.json")

# Load embeddings
embedder.load_embeddings("embeddings.json")

Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=imgemb

# Generate coverage report
pytest --cov=imgemb --cov-report=html

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Implement changes with tests
  4. Submit a pull request

See CONTRIBUTING.md for detailed guidelines.

License

This project is licensed under the MIT License. See LICENSE file for details.

Citation

@software{imgemb2024,
  author = {Aryan Raj},
  title = {imgemb: Efficient Image Embeddings and Similarity Search},
  year = {2025},
  publisher = {Aryan Raj},
  url = {https://github.com/aryanraj2713/image_embeddings}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

imgemb-0.2.8.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

imgemb-0.2.8-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file imgemb-0.2.8.tar.gz.

File metadata

  • Download URL: imgemb-0.2.8.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for imgemb-0.2.8.tar.gz
Algorithm Hash digest
SHA256 d78a98598a717a3332c59ea39fe5693e0aee7710a1c035c6fee4093077ef40bf
MD5 b4554b65b8a3dd192ab6f22e3a355685
BLAKE2b-256 ab7b5dd7598af20bf85d2d26009ecfe5c951800f5cc37e97d53f5e73f8538519

See more details on using hashes here.

File details

Details for the file imgemb-0.2.8-py3-none-any.whl.

File metadata

  • Download URL: imgemb-0.2.8-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for imgemb-0.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c89823b64f439fafe1b026bc921085e554712f8353b76bd78a84e024b580fa0e
MD5 3ae460b7f968e3f76656fe63cc66c6e2
BLAKE2b-256 295876ff4710203666c94ccfd176944dad0cc5810d99d6e59c9a550e2544b252

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page