chromadb-api / chromedb_service.py
Saad0KH's picture
Update chromedb_service.py
91c6580 verified
import requests
from PIL import Image
import numpy as np
import tensorflow as tf
import chromadb
from chromadb.config import Settings
# Fonction pour télécharger une image depuis une URL
def download_image(url):
response = requests.get(url)
if response.status_code != 200:
raise Exception(f"Erreur lors du téléchargement de l'image : {response.status_code}")
return Image.open(io.BytesIO(response.content))
# Fonction pour encoder une image en vecteurs à partir d'une URL
def encode_image_from_url(image_url):
image = download_image(image_url)
image = image.resize((224, 224)) # Redimensionner à 224x224
image_array = np.array(image) / 255.0 # Normaliser les valeurs des pixels
image_tensor = tf.convert_to_tensor(image_array, dtype=tf.float32)
image_tensor = tf.expand_dims(image_tensor, axis=0) # Ajouter une dimension pour le batch
# Charger le modèle MobileNet
model = tf.keras.applications.MobileNetV2(weights='imagenet', include_top=False, pooling='avg')
embeddings = model(image_tensor)
return embeddings.numpy()[0] # Retourner les vecteurs sous forme de tableau
# Ajouter une image dans ChromaDB
def add_image_to_chroma(collection_name, id, image_url, metadata):
vector = encode_image_from_url(image_url)
chroma_client = chromadb.HttpClient(host='https://stable-diffusion-engine.oneiro-lego.com')
collection = chroma_client.get_or_create_collection(
name=collection_name, dimension=len(vector)
)
collection.add(
ids=[id],
embeddings=[vector],
metadatas=[metadata]
)
print(f"Image {image_url} ajoutée avec succès !")
# Ajouter un document dans ChromaDB
def add_document(collection_name, id, text, metadata):
chroma_client = chromadb.HttpClient(host='https://stable-diffusion-engine.oneiro-lego.com')
collection = chroma_client.get_or_create_collection(name=collection_name)
collection.upsert(
documents=[text],
ids=[id],
metadatas=[metadata]
)
print(f"Document {id} ajouté avec succès !")
# Supprimer un document dans ChromaDB
def delete_document(collection_name, id):
chroma_client = chromadb.HttpClient(host='https://stable-diffusion-engine.oneiro-lego.com')
collection = chroma_client.get_or_create_collection(name=collection_name)
collection.delete(ids=[id])
print(f"Document {id} supprimé avec succès !")
# Supprimer une collection dans ChromaDB
def delete_collection(collection_name):
chroma_client = chromadb.HttpClient(host='https://stable-diffusion-engine.oneiro-lego.com')
chroma_client.delete_collection(name=collection_name)
print(f"Collection {collection_name} supprimée avec succès !")
# Recherche dans une collection
def search(collection_name, query, metadata, n_results):
chroma_client = chromadb.HttpClient(host='https://stable-diffusion-engine.oneiro-lego.com')
collection = chroma_client.get_or_create_collection(name=collection_name)
results = collection.query(
query_texts=query,
where=metadata,
n_results=n_results
)
return parse_chromadb_response(results)
# Analyse des réponses de ChromaDB
def parse_chromadb_response(response):
results = [
{
"id": response["ids"][0][i],
"distance": response["distances"][0][i],
"document": response["documents"][0][i],
"metadata": response["metadatas"][0][i] if response["metadatas"] and len(response["metadatas"][0]) > i else None
}
for i in range(len(response["ids"][0]))
]
return results