Spaces:
Sleeping
Sleeping
| import asyncio | |
| import os | |
| import urllib.request | |
| import tempfile | |
| from qdrant_client import AsyncQdrantClient | |
| from qdrant_client.models import PointStruct, VectorParams, Distance | |
| from dotenv import load_dotenv | |
| load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env')) | |
| QDRANT_URL = os.getenv("QDRANT_URL", "http://localhost:6333") | |
| COLLECTION_NAME = "currency_standards" | |
| async def seed_qdrant(): | |
| print(f"Connecting to Qdrant at {QDRANT_URL}...") | |
| client = AsyncQdrantClient(url=QDRANT_URL) | |
| # Check if collection exists | |
| collections = await client.get_collections() | |
| if not any(c.name == COLLECTION_NAME for c in collections.collections): | |
| print(f"Creating collection '{COLLECTION_NAME}'...") | |
| await client.create_collection( | |
| collection_name=COLLECTION_NAME, | |
| vectors_config=VectorParams(size=768, distance=Distance.COSINE) | |
| ) | |
| print("Downloading genuine Indian Currency (INR) references...") | |
| # Genuine reference notes from Wikimedia Commons | |
| inr_notes = [ | |
| { | |
| "id": 1, | |
| "denomination": 500, | |
| "url": "https://upload.wikimedia.org/wikipedia/commons/2/2e/India_new_500_INR%2C_MG_series%2C_2016%2C_obverse.jpg" | |
| }, | |
| { | |
| "id": 2, | |
| "denomination": 2000, | |
| "url": "https://upload.wikimedia.org/wikipedia/commons/0/07/India_new_2000_INR%2C_MG_series%2C_2016%2C_obverse.jpg" | |
| } | |
| ] | |
| # Import the Vision Service to use GroundingDINO and DINOv2 | |
| # We do this here so we only load models if this script is executed | |
| print("Loading AI Vision Models (this may take a moment)...") | |
| import sys | |
| sys.path.append(os.path.join(os.path.dirname(__file__), '..')) | |
| from ml_services.vision_ai import vision_service | |
| points = [] | |
| for note in inr_notes: | |
| print(f"Processing INR {note['denomination']}...") | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp_file: | |
| urllib.request.urlretrieve(note["url"], tmp_file.name) | |
| # Use the actual Vision Service to crop and extract the true DINO embedding | |
| embedding, bbox, serial = await asyncio.to_thread(vision_service._process_image_sync, tmp_file.name) | |
| points.append( | |
| PointStruct( | |
| id=note["id"], | |
| vector=embedding, | |
| payload={ | |
| "currency_type": "INR", | |
| "denomination": note["denomination"], | |
| "description": "Genuine reference note", | |
| "source": "Wikimedia Commons" | |
| } | |
| ) | |
| ) | |
| os.remove(tmp_file.name) | |
| print("Uploading DINOv2 reference vectors to Qdrant...") | |
| await client.upsert( | |
| collection_name=COLLECTION_NAME, | |
| points=points | |
| ) | |
| print("Successfully seeded Qdrant with authentic DINOv2 embeddings of genuine Indian Currency!") | |
| if __name__ == "__main__": | |
| asyncio.run(seed_qdrant()) | |