|
|
--- |
|
|
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. |
|
|
|