Meet YOLO26: next-gen vision AI.

Link to this sectionSo erstellst du eine semantische Bildersuche mit OpenAI CLIP#

Diese Anleitung führt dich durch die Erstellung einer semantischen Bildersuchmaschine mit OpenAI CLIP und Flask. Durch die Kombination der visuellen Sprach-Embeddings von CLIP mit einer schnellen Kosinus-Ähnlichkeitssuche, die von NumPy unterstützt wird, kannst du eine Weboberfläche bauen, 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-Webseite mit einer Übersicht der semantischen Suchergebnisse

Das Ultralytics Python-Paket verpackt diese gesamte Pipeline hinter zwei Klassen, sodass du mit wenigen Zeilen eine funktionierende Such-App starten oder Abfragen programmgesteuert ausführen kannst. Dieser Leitfaden behandelt, warum semantische Suche nützlich ist, wie sie funktioniert, wie du die Web-App ausführst, wie du programmgesteuert suchst und wie du Parameter konfigurierst.

Link to this sectionWarum semantische Bildsuche verwenden?#

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

  • Zero-Shot-Fähigkeiten: Du musst nicht auf deinem Datensatz trainieren. Das Zero-Shot-Learning von CLIP ermöglicht es dir, jede Bildersammlung mit freier 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.

Link to this sectionWie 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 (Transformer-basiert) für Sprache, um beide in denselben multimodalen Embedding-Raum zu projizieren. Dies ermöglicht den direkten Vergleich zwischen Text und Bildern mittels 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 Bildabruf-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.

Link to this sectionFühre die Web-App für semantische Suche aus#

Die SearchApp-Klasse startet die vollständige Flask-Oberfläche. Beim ersten Ausführen lädt sie einen Beispielsatz an Bildern herunter, erstellt den Embedding-Index und stellt eine Seite bereit, auf der du eine Suchanfrage eingeben und die bewerteten Ergebnisse ansehen 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 = "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 sectionBilder programmgesteuert suchen#

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

  • Lädt oder erstellt einen Embedding-Index aus lokalen Bildern.
  • Extrahiert Bild- und Text-Embeddings unter Verwendung von 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 = "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 sectionVisualAISearch-Parameter konfigurieren#

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

ArgumentTypStandardBeschreibung
datastr'images'Pfad zum Bildverzeichnis für die Ähnlichkeitssuche.
ArgumentTypStandardBeschreibung
devicestrNoneGibt das Gerät für die Inferenz an (z. B. cpu, cuda:0 oder 0). Ermöglicht die Wahl zwischen CPU, einer spezifischen GPU oder anderen Rechengeräten für die Modellausführung.
Verwalte deine Daten in der Cloud

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

Link to this sectionFazit#

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 programmatisches Such-Backend. Verweise von hier aus mit data auf dein eigenes Bildverzeichnis zur Indexierung und erkunde dann weitere Ultralytics Solutions, um deine Computer-Vision-Workflows darauf aufzubauen.

Link to this sectionFAQ#

Link to this sectionWie versteht CLIP sowohl Bilder als auch Text?#

CLIP (Contrastive Language Image Pretraining) ist ein von OpenAI entwickeltes Modell, das lernt, visuelle und sprachliche Informationen zu verknüpfen. Es wird 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 man sie direkt mittels Vektorähnlichkeit vergleichen kann.

Link to this sectionWarum gilt CLIP als so leistungsstark für KI-Aufgaben?#

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.

Link to this sectionWie werden Bilder im Vergleich zu einer Textabfrage bewertet?#

Sobald CLIP deine Bilder in Embeddings umgewandelt hat, normalisiert das Ultralytics-Paket diese mittels L2-Norm und speichert sie in einem einzigen NumPy-Array. Eine Abfrage wird durch eine 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 exakt und schnell für typische Bildersammlungen, ohne dass eine zusätzliche Vektordatenbank installiert oder verwaltet werden muss.

Link to this sectionWarum das Ultralytics Python-Paket verwenden, wenn CLIP von OpenAI stammt?#

Während CLIP von OpenAI entwickelt wurde, bündelt das Ultralytics Python-Paket die Generierung von Embeddings, die Indexierung und die Kosinus-Ähnlichkeitssuche in eine vollständige Pipeline für semantische Bildersuche mit nur wenigen Zeilen Code, die sofort funktionieren:

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")

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.

Link to this sectionKann ich das Frontend dieser App anpassen?#

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.

Link to this sectionIst es möglich, Videos anstelle von statischen Bildern zu durchsuchen?#

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