This application demonstrates how to implement image similarity search using MobileNet for generating vector embeddings and Qdrant for similarity search.
- Uses MobileNet V2 model through TensorFlow.js to generate vector embeddings (1028-dimensional vectors) from images
- Runs on CPU backend for compatibility with serverless environments
- The embedding process:
- Resizes images to 224x224 pixels (MobileNet's expected input size)
- Processes images using Sharp for consistent formatting
- Passes the image through MobileNet to generate embeddings
- Uses the model's feature vectors as embeddings for similarity comparison
- Stores image embeddings in a Qdrant collection with Cosine similarity metric
- Each vector in the collection includes:
- 1028-dimensional embedding vector
- Metadata (filename)
- Performs similarity search using Qdrant's vector search capabilities
- Returns similarity scores between 0 and 1 (higher means more similar)
- Set up environment variables:
QDRANT_URL=your_qdrant_url
QDRANT_API_KEY=your_qdrant_api_key- Install dependencies:
npm install- Run the development server:
npm run dev- Open http://localhost:3000 with your browser.
-
Adding Images to Collection
- Upload one or more images
- TensorFlow.js generates embeddings using MobileNet
- Embeddings are stored in Qdrant collection
-
Finding Similar Images
- Upload a target image
- Generate its embedding
- Query Qdrant to find similarity scores
- Display the similarity percentage
- Uses Sharp for consistent image preprocessing
- Converts images to raw pixel data for TensorFlow.js
- Maintains aspect ratios while resizing to required dimensions
- Collection uses Cosine similarity for comparing vectors
- Each vector has 1028 dimensions (MobileNet V2's feature vector size)
- Similarity scores are normalized between 0 and 1