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.10.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.10-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: imgemb-0.2.10.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.10.tar.gz
Algorithm Hash digest
SHA256 bc8e155bff7fd3e582e4c41a66f23bdfd1164dae72c32684619b9bea53549b10
MD5 6176492dd4bc24c18fc166b21d21b7b5
BLAKE2b-256 99aa3ec42d3421986062bc05197219b6bd59f600d6b8684f16f03715b2ceacf3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: imgemb-0.2.10-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.10-py3-none-any.whl
Algorithm Hash digest
SHA256 6b0861c6ace004292b5d2618fe35e36dd74f5d14cd94f7a5d13c469922b66c15
MD5 becfcf5b4cd2f2c0f3da370e65492035
BLAKE2b-256 5a42a11fd7d0c432a7ede6acc8a30ee36d7ce5ab87544c32070be9eb0ffe713b

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