YOLO Vision 2026:

So erstellst du eine semantische Bildersuche mit OpenAI CLIP#

Diese Anleitung führt dich durch die Erstellung einer semantischen Bildsuchmaschine (semantic image search) mit OpenAI CLIP und Flask. Durch die Kombination der visuellen und sprachlichen Embeddings von CLIP mit einer schnellen Kosinus-Ähnlichkeitssuche auf Basis von NumPy kannst du eine Web-Schnittstelle erstellen, die relevante Bilder anhand von natürlichsprachlichen Abfragen abruft – ganz ohne Labels oder Kategorien.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

Flask webpage with semantic search results overview

Das Ultralytics Python-Paket kapselt diesen gesamten Workflow in zwei Klassen, sodass du mit nur wenigen Zeilen Code eine funktionierende Such-App starten oder Abfragen programmgesteuert ausführen kannst. Diese Anleitung behandelt warum semantische Suche nützlich ist, wie sie funktioniert, das Ausführen der Web-App, die programmgesteuerte Suche und das Konfigurieren von Parametern.

Warum semantische Bildsuche verwenden?#

Der Aufbau eines eigenen semantischen Bildersuchsystems mit CLIP bietet mehrere überzeugende Vorteile:

  • Zero-Shot-Fähigkeiten: Du musst kein Training auf deinem Dataset durchführen. Das Zero-Shot-Lernen von CLIP ermöglicht es dir, jede Bildsammlung mit frei formulierter natürlicher Sprache abzufragen, was Zeit und Ressourcen spart.
  • Menschliches Verständnis: Im Gegensatz zur Stichwortsuche versteht CLIP semantische Zusammenhänge und ruft Bilder bei abstrakten, emotionalen oder relationalen Anfragen ab, wie z. B. "ein glückliches Kind in der Natur" oder "eine futuristische Skyline bei Nacht."
  • Keine Labels oder Metadaten: Dieser Ansatz benötigt nur Rohbilder. CLIP generiert Embeddings ohne manuelle Annotation.
  • Leicht und exakt: Eine einzelne normalisierte Matrixmultiplikation in NumPy bewertet jedes Bild nach Kosinus-Ähnlichkeit. Dies liefert exakte Ergebnisse in Echtzeit für Tausende von Embeddings, ohne dass zusätzliche Suchabhängigkeiten installiert oder verwaltet werden müssen.
  • Branchenübergreifende Anwendungen: Egal, ob du ein persönliches Fotoarchiv, ein kreatives Inspirationstool, eine Produktsuchmaschine oder ein Kunstempfehlungssystem erstellst, derselbe Stack lässt sich mit minimalem Aufwand anpassen.

Wie semantische Bildsuche funktioniert#

Die Pipeline kombiniert drei Komponenten, von denen jede eine Stufe der Umwandlung von Bildern und Text in gerankte Ergebnisse übernimmt:

  • CLIP verwendet einen Vision-Encoder (z. B. ResNet oder ViT) für Bilder und einen Text-Encoder (auf Basis von einem Transformer) für Sprache, um beide in denselben multimodalen Embedding-Raum zu projizieren. Dies ermöglicht einen direkten Vergleich zwischen Text und Bildern mithilfe der Kosinus-Ähnlichkeit.
  • NumPy speichert die Bild-Embeddings als ein einzelnes Array und vergleicht sie mit einem Abfrage-Embedding durch eine einzige Matrixmultiplikation. Dies gibt die ähnlichsten Vektoren anhand der Kosinus-Ähnlichkeit zurück, ohne dass eine zusätzliche Indexierungsabhängigkeit erforderlich ist.
  • Flask bietet eine einfache Weboberfläche, um natürlichsprachliche Abfragen einzureichen und semantisch passende Bilder aus dem Index anzuzeigen.

OpenAI Clip image retrieval workflow

Da sowohl Bilder als auch Text im gleichen Vektorraum landen, ist der Abruf Zero-Shot: Du benötigst keine Labels oder Kategorien, sondern nur Bilddaten und einen guten Prompt.

Führe die Web-App für semantische Suche aus#

Die Klasse SearchApp startet die vollständige Flask-Schnittstelle. Beim ersten Start wird ein Beispiel-Bildset heruntergeladen, der Embedding-Index erstellt und eine Seite bereitgestellt, auf der du eine Abfrage eingeben und die nach Relevanz sortierten Ergebnisse anzeigen kannst.

Warnung zum Bildpfad

Wenn du deine eigenen Bilder verwendest, achte darauf, einen absoluten Pfad zum Bildverzeichnis anzugeben. Andernfalls werden die Bilder aufgrund der Dateibereitstellungsbeschränkungen von Flask möglicherweise nicht auf der Webseite angezeigt.

from ultralytics import solutions

app = solutions.SearchApp(
    data="images",  # replace with a path to build the 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

Bilder programmgesteuert suchen#

Die Klasse VisualAISearch führt alle Backend-Operationen ohne die Webschicht aus:

  • Lädt oder erstellt einen Embedding-Index aus lokalen Bildern.
  • Extrahiert Bild- und Text-Embeddings mit CLIP.
  • Führt die Ähnlichkeitssuche mittels Kosinus-Ähnlichkeit durch.

Rufe den Sucher mit einer natürlichsprachlichen Abfrage auf, um eine Liste passender Bilddateinamen, sortiert nach Ähnlichkeit, zurückzuerhalten:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    data="images",  # replace with a path to build the 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

VisualAISearch-Parameter konfigurieren#

Die folgende Tabelle zeigt die verfügbaren Parameter für VisualAISearch:

ArgumentTypStandardBeschreibung
datastr'images'Pfad zum Bildverzeichnis, das indiziert und durchsucht werden soll.
devicestr'cpu'Gerät, das für die CLIP-Inferenz verwendet wird (z. B. cpu, cuda, 0).
Verwalte deine Daten in der Cloud

Um Bildsammlungen im Produktionsmaßstab zu durchsuchen, ohne lokale Dateien verwalten zu müssen, kannst du deine Bilder in der Ultralytics Platform organisieren und versionieren, bevor du sie mit CLIP indexierst.

Fazit#

Mit CLIP und dem Ultralytics Python-Paket kannst du in nur wenigen Zeilen eine Zero-Shot-Suchmaschine für semantische Bilder aufbauen – entweder als Flask-Web-App oder als programmierbares Such-Backend. Verweise von hier aus mit data auf dein eigenes Bildverzeichnis, um es zu indexieren, und erkunde dann andere Ultralytics Solutions, um auf deinen Computer-Vision-Workflows aufzubauen.

FAQ#

  • CLIP (Contrastive Language Image Pretraining) ist ein von OpenAI entwickeltes Modell, das lernt, visuelle und sprachliche Informationen zu verknüpfen. Es wurde auf einem riesigen Datensatz von Bildern trainiert, die mit Bildunterschriften in natürlicher Sprache gepaart sind. Dieses Training ermöglicht es, sowohl Bilder als auch Text in einen gemeinsamen Embedding-Raum abzubilden, sodass du sie direkt mittels Vektorähnlichkeit vergleichen kannst.

  • Was CLIP auszeichnet, ist seine Fähigkeit zur Generalisierung. Anstatt nur für bestimmte Labels oder Aufgaben trainiert zu werden, lernt es aus der natürlichen Sprache selbst. Dies ermöglicht es, flexible Abfragen wie "ein Mann auf einem Jet-Ski" oder "eine surreale Traumlandschaft" zu verarbeiten, was es ohne erneutes Training für alles von der Klassifizierung bis zur kreativen semantischen Suche nützlich macht.

  • Sobald CLIP deine Bilder in Embeddings umgewandelt hat, normalisiert das Ultralytics-Paket diese mittels L2 und speichert sie in einem einzigen NumPy-Array. Eine Abfrage wird mit einer einzigen Matrixmultiplikation bewertet, die die Kosinus-Ähnlichkeit zwischen dem Abfrage-Embedding und jedem Bild-Embedding berechnet und anschließend die Ergebnisse sortiert. Diese Brute-Force-Suche ist für typische Bildsammlungen exakt und schnell, ganz ohne zusätzliche Vektordatenbank-Abhängigkeit, die installiert oder verwaltet werden muss.

  • Während CLIP von OpenAI entwickelt wurde, kapselt das Ultralytics Python-Paket die Generierung von Embeddings, die Indexierung und die Kosinus-Ähnlichkeitssuche in eine vollständige semantische Bildsuchpipeline mit nur wenigen Zeilen Code, die sofort funktioniert:

    from ultralytics import solutions
    
    searcher = solutions.VisualAISearch(
        data="images",  # replace with a path to build the 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")

    Diese High-Level-Implementierung übernimmt:

    • CLIP-basierte Generierung von Bild- und Text-Embeddings.
    • Erstellung und Verwaltung von Embedding-Indizes.
    • Effiziente semantische Suche mit Kosinus-Ähnlichkeit.
    • Verzeichnisbasiertes Laden von Bildern und Visualisierung.
  • Ja. Die aktuelle Einrichtung verwendet Flask mit einem einfachen HTML-Frontend, aber du kannst es durch dein eigenes HTML ersetzen oder eine dynamischere Benutzeroberfläche mit React, Vue oder einem anderen Frontend-Framework erstellen. Flask kann als Backend-API für deine benutzerdefinierte Schnittstelle dienen.

  • Nicht direkt. Eine einfache Umgehungslösung besteht darin, einzelne Frames aus deinen Videos zu extrahieren (z. B. einen pro Sekunde), sie als eigenständige Bilder zu behandeln und diese in das System einzuspeisen. Auf diese Weise kann die Suchmaschine visuelle Momente aus deinen Videos semantisch indexieren.

Kommentare