Files
supabase/examples/ai/image_search/README.md
Danny WhiteandJoshen Lim d914b81f47 feat: consolidate settings (#37580)
* feat: move storage settings

* feat: redirect

* feat: database settings in service area

* feat: move data api settings

* fix: revert data API placement

* feat: minor UX touches

* fix: simplify configuration group

* feat: references to database settings

* feat: references to storage settings

* fix: redirects and formatting

* fix: Import StorageMenu dynamically to avoid SSR issues with useLocalStorage

* fix: move Data API closer to semantic siblings

* fix: revert smart comma

* Shift bucket sort logic into storage explorer store

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-08-04 16:21:54 +10:00

85 lines
3.1 KiB
Markdown

# Image Search with Supabase Vector
In this example we're implementing image search using the [OpenAI CLIP Model](https://github.com/openai/CLIP), which was trained on a variety of (image, text)-pairs.
We're implementing two methods in the [`/image_search/main.py` file](/image_search/main.py):
1. The `seed` method generates embeddings for the images in the `images` folder and upserts them into a collection in Supabase Vector.
2. The `search` method generates an embedding from the search query and performs a vector similarity search query.
## Prerequisites
Before running this example, ensure you have:
- Python 3.8 or higher installed
- A Supabase account (sign up at https://supabase.com)
- Poetry package manager
- Basic familiarity with vector databases (helpful but not required)
## Setup
- Create a new project in your [Supabase dashboard](https://supabase.com/dashboard)
- Go to Settings > Database and copy your connection string
- Ensure the Vector extension is enabled in your project
- Install poetry: `pip install poetry`
- Activate the virtual environment: `poetry shell`
- (to leave the venv just run `exit`)
- Install app dependencies: `poetry install`
## Run locally
### Generate the embeddings and seed the collection
- `supabase start`
- `poetry run seed`
- Check the embeddings stored in the local Supabase Dashboard: http://localhost:54323/project/default/editor > schema: vecs
**What to expect:** The seed command will process all images in the `images` folder and generate vector embeddings for each one.
### Perform a search
- `poetry run search "bike in front of red brick wall"`
**What to expect:** The search will return a list of images ranked by similarity to your search query, along with similarity scores.
## Run on hosted Supabase project
- Set `DB_CONNECTION` with the connection string from your hosted Supabase Dashboard: https://supabase.com/dashboard/project/_/database/settings > Connection string > URI
## Example Search Queries
Try these search queries to test the image search functionality:
- `"bike in front of red brick wall"`
- `"person walking in park"`
- `"blue sky with clouds"`
- `"city street at night"`
## Troubleshooting
**Common Issues:**
- **Poetry not found:** Make sure Poetry is installed with `pip install poetry`
- **Connection errors:** Verify your Supabase connection string is correct
- **No search results:** Ensure you've run the seed command first to populate the database
- **Python version errors:** This example requires Python 3.8 or higher
## How It Works
This example uses the CLIP (Contrastive Language-Image Pre-training) model to:
1. Convert images into high-dimensional vector representations (embeddings)
2. Convert text search queries into similar vector representations
3. Find images with embeddings most similar to the search query embedding
4. Return ranked results based on vector similarity scores
## Attributions
### Models
[clip-ViT-B-32](https://www.sbert.net/examples/applications/image-search/README.html) via [Hugging Face](https://huggingface.co/sentence-transformers/clip-ViT-B-32)
### Images
Images from https://unsplash.com/license via https://picsum.photos/