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

Uploaded Python 3

File details

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

File metadata

  • Download URL: imgemb-0.2.9.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.9.tar.gz
Algorithm Hash digest
SHA256 a900839ad53bd3352f73253d2a4946aa60ce87d1de482315ace429e408653658
MD5 77011817ca4da1ba9372d4a8f73714bf
BLAKE2b-256 072afe07ee06c874a190178f9ce66d0ca914edf3fb53a71201492e50989a30ec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: imgemb-0.2.9-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.9-py3-none-any.whl
Algorithm Hash digest
SHA256 056872a571cf290ff611468c754b1c35aead6a4bf4426644d9b4335640a40c38
MD5 d45080c4c61cf556e4f9f36857cb3b7a
BLAKE2b-256 848f6198b9a4bc8a1f050ceb6e079c272be5aebd0b16767b26be8fd440be7b57

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