| --- |
| title: FastAPI App |
| emoji: ⚡ |
| colorFrom: gray |
| colorTo: purple |
| sdk: docker |
| app_file: app.py |
| pinned: false |
| --- |
| # Image Similarity Search API |
|
|
| A FastAPI application for image similarity search using CLIP embeddings and Qdrant vector database. |
|
|
| ## Features |
|
|
| - Upload images and store their vector embeddings |
| - Search for similar images using an uploaded image or base64 encoded image |
| - Secure API with API key authentication |
| - Well-organized, modular codebase following OOP principles |
|
|
| ## Installation |
|
|
| 1. Clone this repository |
| 2. Install dependencies: |
|
|
| ```bash |
| pip install -r requirements.txt |
| ``` |
|
|
| 3. Set up environment variables (optional, defaults are provided): |
|
|
| ```bash |
| export QDRANT_URL="your-qdrant-url" |
| export QDRANT_API_KEY="your-qdrant-api-key" |
| export COLLECTION_NAME="your-collection-name" |
| export API_KEY="your-api-key" |
| export PORT=8000 |
| export ENVIRONMENT="production" # Or "development" for debug mode with auto-reload |
| ``` |
|
|
| ## Usage |
|
|
| Run the application: |
|
|
| ```bash |
| python app.py |
| ``` |
|
|
| The API will be available at http://localhost:8000 (or the port specified in environment variables). |
|
|
| ### API Documentation |
|
|
| Once running, API documentation is available at: |
| - Swagger UI: http://localhost:8000/docs |
| - ReDoc: http://localhost:8000/redoc |
|
|
| ## API Endpoints |
|
|
| - `POST /add-image/`: Add an image to the database |
| - `POST /add-images-from-folder/`: Add all images from a folder to the database |
| - `POST /search-by-image/`: Search for similar images using an uploaded image |
| - `POST /search-by-image-scan/`: Search for similar images using a base64 encoded image |
| - `GET /collections`: List all collections in the database |
| - `GET /health`: Health check endpoint |
|
|
| ## Project Structure |
|
|
| ``` |
| image_similarity_api/ |
| │ |
| ├── app.py # Main application entry point |
| ├── config.py # Configuration settings |
| ├── models/ |
| │ ├── __init__.py |
| │ └── schemas.py # Pydantic models |
| ├── services/ |
| │ ├── __init__.py |
| │ ├── embedding.py # Image embedding service |
| │ ├── security.py # Security service |
| │ └── vector_db.py # Vector database service |
| ├── api/ |
| │ ├── __init__.py |
| │ └── routes.py # API routes |
| ├── requirements.txt # Project dependencies |
| └── README.md # Project documentation |
| ``` |
|
|
| ## Development |
|
|
| For development, set the ENVIRONMENT variable to "development" for auto-reload: |
|
|
| ```bash |
| export ENVIRONMENT="development" |
| python app.py |
| ``` |
|
|
| ## Deployment |
|
|
| This application can be deployed to any platform that supports Python applications: |
|
|
| 1. Docker |
| 2. Kubernetes |
| 3. Cloud platforms (AWS, GCP, Azure, etc.) |
| 4. Serverless platforms (with appropriate adapters) |
|
|
| Remember to set all required environment variables in your production environment. |
|
|