Meet YOLO26: next-gen vision AI.

Link to this sectionCome creare una ricerca semantica per immagini con OpenAI CLIP#

Questa guida ti accompagna nella creazione di un motore di ricerca semantica per immagini utilizzando OpenAI CLIP e Flask. Combinando gli embeddings visual-language di CLIP con una veloce ricerca tramite cosine similarity basata su NumPy, puoi realizzare 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 and the 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?#

Creare il tuo sistema di ricerca semantica per immagini con CLIP 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 leggera ed esatta: Una singola moltiplicazione di matrici normalizzata in NumPy classifica ogni immagine in base alla cosine similarity, fornendo risultati esatti con tempi di risposta in tempo reale su migliaia di embeddings, senza dipendenze di ricerca aggiuntive da installare o gestire.
  • 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.
  • NumPy memorizza gli embeddings delle immagini in un unico array e li classifica rispetto a un embedding di query con una singola moltiplicazione di matrici, restituendo i vettori più vicini tramite cosine similarity senza alcuna dipendenza di indicizzazione aggiuntiva.
  • 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.

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

La classe SearchApp avvia l'interfaccia Flask completa. Al primo avvio, scarica un set di immagini campione, costruisce l'indice degli embeddings e pubblica una pagina dove 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 costruisce un indice di embeddings da immagini locali.
  • Estrae embeddings di immagini e testo utilizzando 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 ricercare collezioni di immagini su scala di produzione senza gestire file locali, puoi organizzare e gestire le versioni delle tue immagini sulla Ultralytics Platform prima di indicizzarle con CLIP.

Link to this sectionConclusione#

Con CLIP e il pacchetto Python di Ultralytics, puoi creare un motore di ricerca semantica per immagini zero-shot in poche righe, sia come applicazione web Flask che come backend di ricerca programmatico. Da qui, punta data alla tua directory di immagini per indicizzarla, quindi esplora altre Ultralytics Solutions da integrare nei tuoi workflow 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 sectionCome vengono classificate le immagini rispetto a una query di testo?#

Una volta che CLIP trasforma le tue immagini in embeddings, il pacchetto Ultralytics li normalizza L2 e li memorizza in un unico array NumPy. Una query viene classificata con una singola moltiplicazione di matrici che calcola la cosine similarity tra l'embedding della query e quello di ogni immagine, ordinando poi i punteggi. Questa ricerca brute-force è esatta e veloce per le tipiche collezioni di immagini, senza dipendenze di database vettoriali aggiuntive da installare o gestire.

Link to this sectionWhy use the Ultralytics Python package if CLIP is from OpenAI?#

Sebbene CLIP sia sviluppato da OpenAI, il pacchetto Python di Ultralytics racchiude la generazione di embeddings, l'indicizzazione e la ricerca tramite cosine similarity in una pipeline di ricerca semantica completa, con poche righe di codice che funzionano subito:

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 di embeddings.
  • 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