Meet YOLO26: next-gen vision AI.

Link to this sectionCome creare una ricerca semantica di immagini con OpenAI CLIP e Meta FAISS#

Questa guida ti accompagna nella creazione di un motore di ricerca semantica di immagini utilizzando OpenAI CLIP, Meta FAISS e Flask. Combinando gli embeddings visivo-linguistici di CLIP con l'efficiente ricerca del vicino più prossimo di FAISS, puoi costruire un'interfaccia web che recupera immagini pertinenti da query in linguaggio naturale, senza bisogno di etichette o categorie.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP, META FAISS and Ultralytics Package 🎉

Panoramica della pagina web Flask con risultati di ricerca semantica

Il pacchetto Python di Ultralytics racchiude l'intero processo dietro due classi, così puoi lanciare un'app di ricerca funzionante o eseguire query programmaticamente in poche righe. Questa guida copre perché la ricerca semantica è utile, come funziona, come eseguire l'app web, come cercare programmaticamente e come configurare i parametri.

Link to this sectionPerché usare la ricerca semantica di immagini?#

Costruire il tuo sistema di ricerca semantica di immagini con CLIP e FAISS offre diversi vantaggi interessanti:

  • Capacità zero-shot: Non hai bisogno di addestrare il sistema sul tuo dataset. L'apprendimento zero-shot di CLIP ti permette di interrogare qualsiasi collezione di immagini con linguaggio naturale a forma libera, risparmiando tempo e risorse.
  • Comprensione simile a quella umana: A differenza della ricerca per parole chiave, CLIP comprende il contesto semantico e recupera immagini da query astratte, emotive o relazionali come "un bambino felice nella natura" o "lo skyline di una città futuristica di notte."
  • Nessuna etichetta o metadato: Questo approccio richiede solo immagini grezze. CLIP genera embeddings senza alcuna annotazione manuale.
  • Ricerca flessibile e scalabile: FAISS offre una ricerca rapida del vicino più prossimo anche su grandi dataset, con risposte in tempo reale su migliaia o milioni di embeddings.
  • Applicazioni cross-dominio: Che tu stia creando un archivio fotografico personale, uno strumento di ispirazione creativa, un motore di ricerca prodotti o un sistema di raccomandazione artistica, lo stesso stack si adatta con modifiche minime.

Link to this sectionCome funziona la ricerca semantica di immagini#

Il processo combina tre componenti, ciascuna delle quali gestisce una fase della trasformazione di immagini e testo in risultati classificati:

  • CLIP utilizza un codificatore visivo (es. ResNet o ViT) per le immagini e un codificatore di testo (basato su Transformer) per il linguaggio, per proiettarli entrambi nello stesso spazio di embedding multimodale. Questo consente il confronto diretto tra testo e immagini utilizzando la similarità del coseno.
  • FAISS (Facebook AI Similarity Search) costruisce un indice degli embedding delle immagini e abilita il recupero rapido e scalabile dei vettori più vicini a una determinata query.
  • Flask fornisce una semplice interfaccia web per inviare query in linguaggio naturale e visualizzare le immagini semanticamente corrispondenti dall'indice.

Workflow di recupero immagini con OpenAI Clip

Poiché sia le immagini che il testo finiscono nello stesso spazio vettoriale, il recupero è zero-shot: non hai bisogno di etichette o categorie, solo di dati immagine e un buon prompt.

Workflow di creazione vettori embedding con Meta FAISS

Link to this sectionEsegui l'app web di ricerca semantica#

La classe SearchApp lancia l'intera interfaccia Flask. Al primo avvio scarica un set di immagini campione, crea l'indice FAISS e serve una pagina in cui puoi digitare una query e visualizzare i risultati classificati.

Avviso sul percorso dell'immagine

Se stai usando le tue immagini, assicurati di fornire un percorso assoluto alla directory delle immagini. Altrimenti, le immagini potrebbero non apparire sulla pagina web a causa delle limitazioni di Flask nel servire i file.

from ultralytics import solutions

app = solutions.SearchApp(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

Link to this sectionCerca immagini programmaticamente#

La classe VisualAISearch esegue tutte le operazioni di backend senza il livello web:

  • Carica o crea un indice FAISS da immagini locali.
  • Estrae embeddings di immagini e testo usando CLIP.
  • Esegue una ricerca di similarità usando la similarità del coseno.

Chiama il motore di ricerca con una query in linguaggio naturale per ottenere un elenco di nomi di file di immagini corrispondenti classificati per similarità:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

Link to this sectionConfigura i parametri di VisualAISearch#

La tabella sottostante descrive i parametri disponibili per VisualAISearch:

ArgomentoTipoPredefinitoDescrizione
datastr'images'Percorso verso la directory delle immagini utilizzata per la ricerca di similarità.
ArgomentoTipoPredefinitoDescrizione
devicestrNoneSpecifica il dispositivo per l'inferenza (ad esempio, cpu, cuda:0 o 0). Consente agli utenti di scegliere tra CPU, una GPU specifica o altri dispositivi di calcolo per l'esecuzione del modello.
Gestisci i tuoi dati nel cloud

Per cercare collezioni di immagini su scala di produzione senza gestire file locali, puoi organizzare e versionare le tue immagini nella Piattaforma Ultralytics prima di indicizzarle con CLIP e FAISS.

Link to this sectionConclusione#

Con CLIP, FAISS e il pacchetto Python di Ultralytics, puoi creare un motore di ricerca semantica di immagini zero-shot in poche righe, sia come app web Flask che come backend di ricerca programmatico. Da qui, punta data alla tua directory di immagini per indicizzarla, poi esplora altre Soluzioni Ultralytics per costruire sui tuoi flussi di lavoro di computer vision.

Link to this sectionFAQ#

Link to this sectionCome fa CLIP a comprendere sia le immagini che il testo?#

CLIP (Contrastive Language Image Pretraining) è un modello sviluppato da OpenAI che impara a collegare informazioni visive e linguistiche. È addestrato su un enorme dataset di immagini accoppiate con didascalie in linguaggio naturale. Questo addestramento gli permette di mappare sia immagini che testo in uno spazio di embedding condiviso, così puoi confrontarli direttamente usando la similarità vettoriale.

Link to this sectionPerché CLIP è considerato così potente per i compiti di AI?#

Ciò che distingue CLIP è la sua capacità di generalizzare. Invece di essere addestrato solo per etichette o compiti specifici, impara dal linguaggio naturale stesso. Questo gli permette di gestire query flessibili come "un uomo che guida una moto d'acqua" o "un paesaggio da sogno surreale", rendendolo utile per tutto, dalla classificazione alla ricerca semantica creativa, senza necessità di riaddestramento.

Link to this sectionCosa fa esattamente FAISS in questo progetto (Ricerca Semantica)?#

FAISS (Facebook AI Similarity Search) è un toolkit che ti aiuta a cercare in vettori ad alta dimensionalità in modo molto efficiente. Una volta che CLIP trasforma le tue immagini in embeddings, FAISS rende veloce e facile trovare le corrispondenze più vicine a una query di testo, ideale per il recupero di immagini in tempo reale.

Link to this sectionWhy use the Ultralytics Python package if CLIP and FAISS are from OpenAI and Meta?#

Sebbene CLIP e FAISS siano sviluppati rispettivamente da OpenAI e Meta, il pacchetto Python di Ultralytics racchiude entrambi in un processo di ricerca semantica di immagini completo dietro poche righe di codice che funzionano immediatamente:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

Questa implementazione di alto livello gestisce:

  • Generazione di embedding di immagini e testo basata su CLIP.
  • Creazione e gestione dell'indice FAISS.
  • Ricerca semantica efficiente con similarità del coseno.
  • Caricamento delle immagini basato su directory e visualizzazione.

Link to this sectionPosso personalizzare il frontend di questa app?#

Sì. L'attuale configurazione utilizza Flask con un frontend HTML di base, ma puoi sostituirlo con il tuo HTML o costruire un'interfaccia utente più dinamica con React, Vue o un altro framework frontend. Flask può fungere da API backend per la tua interfaccia personalizzata.

Link to this sectionÈ possibile cercare nei video invece che in immagini statiche?#

Non direttamente. Una semplice soluzione alternativa consiste nell'estrarre singoli fotogrammi dai tuoi video (es. uno al secondo), trattarli come immagini indipendenti e inserirli nel sistema. In questo modo, il motore di ricerca può indicizzare semanticamente momenti visivi dai tuoi video.

Commenti