A lightweight Python library for generating image embeddings with semantic search
Project description
imgemb: Image Embeddings and Semantic Search Library
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
-
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
-
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
-
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
- Fork the repository
- Create a feature branch
- Implement changes with tests
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a900839ad53bd3352f73253d2a4946aa60ce87d1de482315ace429e408653658
|
|
| MD5 |
77011817ca4da1ba9372d4a8f73714bf
|
|
| BLAKE2b-256 |
072afe07ee06c874a190178f9ce66d0ca914edf3fb53a71201492e50989a30ec
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
056872a571cf290ff611468c754b1c35aead6a4bf4426644d9b4335640a40c38
|
|
| MD5 |
d45080c4c61cf556e4f9f36857cb3b7a
|
|
| BLAKE2b-256 |
848f6198b9a4bc8a1f050ceb6e079c272be5aebd0b16767b26be8fd440be7b57
|