Ultralytics YOLO27:
Get Started

So erstellst du eine semantische Bildsuche mit OpenAI CLIP#

Diese Anleitung zeigt dir Schritt für Schritt, wie du mit OpenAI CLIP und Flask eine Engine für die semantische Bildsuche erstellst. Durch die Kombination der visuellen und sprachlichen Einbettungen von CLIP mit einer schnellen, durch NumPy ermöglichten Suche nach Kosinusähnlichkeit kannst du eine Weboberfläche erstellen, die anhand von natürlichsprachlichen Suchanfragen passende Bilder abruft – ganz ohne Labels oder Kategorien.



Ansehen: So funktioniert die Ähnlichkeitssuche | Visuelle Suche mit OpenAI CLIP und dem Ultralytics-Paket 🎉

Flask-Webseite mit einer Übersicht semantischer Suchergebnisse

Das Ultralytics-Python-Paket kapselt die gesamte Pipeline in zwei Klassen. So kannst du mit wenigen Zeilen eine funktionsfähige Suchanwendung starten oder Suchanfragen programmatisch ausführen. Diese Anleitung behandelt den Nutzen semantischer Suche, ihre Funktionsweise, die Ausführung der Webanwendung, die programmatische Suche und die Konfiguration von Parametern.

Ein eigenes System für semantische Bildsuche mit CLIP bietet mehrere überzeugende Vorteile:

  • Zero-Shot-Funktionen: Du musst das Modell nicht mit deinem Datensatz trainieren. Dank Zero-Shot-Lernen von CLIP kannst du beliebige Bildsammlungen mit frei formulierten natürlichsprachlichen Suchanfragen durchsuchen und so Zeit und Ressourcen sparen.
  • Menschenähnliches Verständnis: Anders als eine Stichwortsuche versteht CLIP den semantischen Kontext und findet Bilder anhand abstrakter, emotionaler oder relationaler Suchanfragen wie „ein glückliches Kind in der Natur“ oder „eine futuristische Stadtsilhouette bei Nacht“.
  • Keine Labels oder Metadaten: Für diesen Ansatz werden nur die Rohbilder benötigt. CLIP erstellt Einbettungen ganz ohne manuelle Annotation.
  • Schlanke und exakte Suche: Eine einzige normalisierte Matrixmultiplikation in NumPy sortiert alle Bilder nach Kosinusähnlichkeit. So erhältst du exakte Ergebnisse in Echtzeit für Tausende von Einbettungen, ohne eine zusätzliche Suchabhängigkeit installieren oder verwalten zu müssen.
  • Anwendungen in verschiedenen Bereichen: Ob du ein persönliches Fotoarchiv, ein Tool für kreative Inspiration, eine Produktsuchmaschine oder ein Kunstempfehlungssystem entwickelst – derselbe Technologie-Stack lässt sich mit minimalen Anpassungen einsetzen.

So funktioniert semantische Bildsuche#

Die Pipeline kombiniert drei Komponenten, die jeweils eine Phase der Umwandlung von Bildern und Text in eine sortierte Ergebnisliste übernehmen:

  • CLIP verwendet für Bilder einen Vision-Encoder (z. B. ResNet oder ViT) und für Sprache einen textbasierten Encoder (auf Transformer-Basis), um beide in denselben multimodalen Einbettungsraum zu projizieren. Dadurch lassen sich Text und Bilder direkt anhand der Kosinusähnlichkeit vergleichen.
  • NumPy speichert die Bildeinbettungen in einem einzigen Array und vergleicht sie mit einer Suchanfrage mithilfe einer Matrixmultiplikation. So werden die ähnlichsten Vektoren anhand der Kosinusähnlichkeit ermittelt – ganz ohne zusätzliche Indexierungsabhängigkeit.
  • Flask stellt eine einfache Weboberfläche bereit, über die du natürlichsprachliche Suchanfragen eingeben und semantisch passende Bilder aus dem Index anzeigen kannst.

Arbeitsablauf für den Bildabruf mit OpenAI Clip

Da Bilder und Text im selben Vektorraum abgebildet werden, funktioniert der Abruf im Zero-Shot-Verfahren: Du brauchst weder Labels noch Kategorien, sondern nur Bilddaten und eine gute Eingabeaufforderung.

Die Webanwendung für semantische Suche ausführen#

Die Klasse SearchApp startet die vollständige Flask-Oberfläche. Beim ersten Ausführen lädt sie eine Beispielsammlung von Bildern herunter, erstellt den Einbettungsindex und stellt eine Webseite bereit, auf der du eine Suchanfrage eingeben und sortierte Ergebnisse ansehen kannst.

Warnung zum Bildpfad

Wenn du eigene Bilder verwendest, gib unbedingt einen absoluten Pfad zum Bildverzeichnis an. Andernfalls werden die Bilder aufgrund der Einschränkungen beim Bereitstellen von Dateien durch Flask möglicherweise nicht auf der Webseite angezeigt.

from ultralytics import solutions

app = solutions.SearchApp(
    data="images",  # durch einen Pfad ersetzen, um die Suchmaschine mit deinen eigenen Bildern zu erstellen
    device="cpu",  # das Gerät für die Verarbeitung festlegen, z. B. „cpu“ oder „cuda“
)

app.run(debug=False)  # Du kannst zum Testen auch das Argument `debug=True` verwenden

Bilder programmatisch suchen#

Die Klasse VisualAISearch führt alle Backend-Aufgaben ohne Weboberfläche aus:

  • Lädt einen Einbettungsindex lokaler Bilder oder erstellt ihn.
  • Extrahiert Bild- und Text-Einbettungen mithilfe von CLIP.
  • Führt eine Ähnlichkeitssuche anhand der Kosinusähnlichkeit durch.

Rufe die Suchfunktion mit einer natürlichsprachlichen Suchanfrage auf, um eine nach Ähnlichkeit sortierte Liste passender Bilddateinamen zu erhalten:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    data="images",  # durch einen Pfad ersetzen, um die Suchmaschine mit deinen eigenen Bildern zu erstellen
    device="cpu",  # das Gerät für die Verarbeitung festlegen, z. B. „cpu“ oder „cuda“
)

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

# Sortierte Ergebnisse:
# - 000000546829.jpg | Ähnlichkeit: 0.3269
# - 000000549220.jpg | Ähnlichkeit: 0.2899
# - 000000517069.jpg | Ähnlichkeit: 0.2761
# - 000000029393.jpg | Ähnlichkeit: 0.2742
# - 000000534270.jpg | Ähnlichkeit: 0.2680

VisualAISearch-Parameter konfigurieren#

Die folgende Tabelle enthält die verfügbaren Parameter für VisualAISearch:

ArgumentTypStandardBeschreibung
datastr'images'Pfad zum Bildverzeichnis, das indexiert und durchsucht werden soll.
devicestr'cpu'Für die CLIP-Inferenz verwendetes Gerät (z. B. cpu, cuda, 0).
Daten in der Cloud verwalten

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

Fazit#

Mit CLIP und dem Ultralytics-Python-Paket kannst du mit wenigen Zeilen eine Engine für die semantische Bildsuche im Zero-Shot-Verfahren bereitstellen – als Flask-Webanwendung oder als programmatisches Such-Backend. Gib dazu in data dein eigenes Bildverzeichnis an, um es zu indexieren, und entdecke anschließend weitere Ultralytics-Lösungen, mit denen du deine Arbeitsabläufe im Bereich Computer Vision erweitern kannst.

Häufig gestellte Fragen#

  • CLIP (Kontrastives Vortraining von Sprache und Bildern) ist ein von OpenAI entwickeltes Modell, das lernt, visuelle und sprachliche Informationen miteinander zu verknüpfen. Es wird anhand eines riesigen Datensatzes aus Bildern und den dazugehörigen natürlichsprachlichen Bildunterschriften trainiert. Durch dieses Training kann CLIP sowohl Bilder als auch Text in einen gemeinsamen Einbettungsraum abbilden, sodass du sie direkt mithilfe von Vektorähnlichkeit vergleichen kannst.

  • CLIP zeichnet sich durch seine Fähigkeit zur Verallgemeinerung aus. Statt nur auf bestimmte Labels oder Aufgaben trainiert zu werden, lernt das Modell direkt aus natürlicher Sprache. Dadurch kann es flexible Suchanfragen wie „ein Mann fährt Jetski“ oder „eine surreale Traumlandschaft“ verarbeiten. Das macht CLIP für alles geeignet – von Klassifizierung bis hin zu kreativer semantischer Suche –, ohne dass ein erneutes Training erforderlich ist.

  • Sobald CLIP deine Bilder in Einbettungen umgewandelt hat, normalisiert das Ultralytics-Paket sie mit der L2-Norm und speichert sie in einem einzigen NumPy-Array. Eine Suchanfrage wird mit einer Matrixmultiplikation sortiert, die die Kosinusähnlichkeit zwischen der Einbettung der Suchanfrage und jeder Bildeinbettung berechnet; anschließend werden die Werte sortiert. Diese Brute-Force-Suche ist für typische Bildsammlungen exakt und schnell. Du musst keine zusätzliche Vektordatenbankabhängigkeit installieren oder verwalten.

  • CLIP wird zwar von OpenAI entwickelt, aber das Ultralytics-Python-Paket vereint die Erstellung von Einbettungen, die Indexierung und die Suche nach Kosinusähnlichkeit in einer vollständigen Pipeline für die semantische Bildsuche, die mit wenigen Zeilen Code sofort funktioniert:

    from ultralytics import solutions
    
    searcher = solutions.VisualAISearch(
        data="images",  # durch einen Pfad ersetzen, um die Suchmaschine mit deinen eigenen Bildern zu erstellen
        device="cpu",  # das Gerät für die Verarbeitung festlegen, z. B. „cpu“ oder „cuda“
    )
    
    results = searcher("a dog sitting on a bench")

    Diese übergeordnete Implementierung übernimmt Folgendes:

    • Erstellung von Bild- und Texteтbettungen auf Basis von CLIP.
    • Erstellung und Verwaltung des Einbettungsindex.
    • Effiziente semantische Suche anhand der Kosinusähnlichkeit.
    • Laden von Bildern aus Verzeichnissen und Visualisierung.
  • Ja. Die aktuelle Konfiguration verwendet Flask mit einem einfachen HTML-Frontend. Du kannst es aber durch eigenes HTML ersetzen oder mit React, Vue oder einem anderen Frontend-Framework eine dynamischere Benutzeroberfläche erstellen. Flask kann als Backend-API für deine benutzerdefinierte Oberfläche dienen.

  • Nicht direkt. Eine einfache Alternative ist, einzelne Frames aus deinen Videos zu extrahieren (z. B. eines pro Sekunde), sie als eigenständige Bilder zu behandeln und in das System einzuspeisen. So kann die Suchmaschine visuelle Momente aus deinen Videos semantisch indexieren.

Kommentare