🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI

System-Übersicht

  • Scenarios
August 29, 2020
milvus

Wie der Name schon sagt, ist die Suche nach Videos anhand von Bildern ein Prozess, bei dem aus dem Repository Videos abgerufen werden, die ähnliche Bilder wie das Eingabebild enthalten. Einer der wichtigsten Schritte ist die Umwandlung von Videos in Einbettungen, d. h. die Extraktion der Schlüsselbilder und die Umwandlung ihrer Merkmale in Vektoren. Einige neugierige Leser werden sich nun fragen, worin der Unterschied zwischen der Suche nach einem Video nach Bild und der Suche nach einem Bild nach Bild besteht? Tatsächlich ist die Suche nach Schlüsselbildern in Videos gleichbedeutend mit der Suche nach einem Bild nach Bild.

Wenn Sie daran interessiert sind, können Sie sich auf unseren früheren Artikel Milvus x VGG: Aufbau eines inhaltsbasierten Bildabrufsystems beziehen.

System-Übersicht

Das folgende Diagramm veranschaulicht den typischen Arbeitsablauf eines solchen Videosuchsystems.

1-video-search-system-workflow.png 1-video-suchsystem-workflow.png

Beim Importieren von Videos verwenden wir die OpenCV-Bibliothek, um jedes Video in Einzelbilder zu zerlegen, Vektoren der Schlüsselbilder mit dem Bildextraktionsmodell VGG zu extrahieren und die extrahierten Vektoren (Einbettungen) in Milvus einzufügen. Wir verwenden Minio zum Speichern der Originalvideos und Redis zum Speichern der Korrelationen zwischen Videos und Vektoren.

Bei der Suche nach Videos verwenden wir dasselbe VGG-Modell, um das Eingabebild in einen Merkmalsvektor umzuwandeln und diesen in Milvus einzufügen, um Vektoren mit der größten Ähnlichkeit zu finden. Anschließend ruft das System die entsprechenden Videos über die Schnittstelle von Minio entsprechend den Korrelationen in Redis ab.

Aufbereitung der Daten

In diesem Artikel verwenden wir etwa 100.000 GIF-Dateien von Tumblr als Beispieldatensatz für den Aufbau einer End-to-End-Lösung für die Suche nach Videos. Sie können auch Ihre eigenen Video-Repositories verwenden.

Bereitstellung

Der Code für die Erstellung des Videoabrufsystems in diesem Artikel befindet sich auf GitHub.

Schritt 1: Erstellen von Docker-Images.

Das Videoabrufsystem benötigt Milvus v0.7.1 Docker, Redis Docker, Minio Docker, das Front-End Interface Docker und das Back-End API Docker. Sie müssen den Front-End-Interface-Docker und den Back-End-API-Docker selbst erstellen, während Sie die anderen drei Docker direkt von Docker Hub beziehen können.

# Get the video search code
$ git clone -b 0.10.0 https://github.com/JackLCL/search-video-demo.git

# Build front-end interface docker and api docker images
$ cd search-video-demo & make all

Schritt 2: Konfigurieren Sie die Umgebung.

Hier verwenden wir docker-compose.yml, um die oben erwähnten fünf Container zu verwalten. Die Konfiguration von docker-compose.yml finden Sie in der folgenden Tabelle:

2-configure-docker-compose-yml.png 2-configure-docker-compose-yml.png

Die IP-Adresse 192.168.1.38 in der obigen Tabelle ist die Serveradresse, die speziell für die Erstellung des Videoabrufsystems in diesem Artikel verwendet wird. Sie müssen sie auf Ihre Serveradresse aktualisieren.

Sie müssen manuell Speicherverzeichnisse für Milvus, Redis und Minio erstellen und dann die entsprechenden Pfade in docker-compose.yml hinzufügen. In diesem Beispiel haben wir die folgenden Verzeichnisse erstellt:

/mnt/redis/data /mnt/minio/data /mnt/milvus/db

Sie können Milvus, Redis und Minio in docker-compose.yml wie folgt konfigurieren:

3-configure-milvus-redis-minio-docker-compose-yml.png 3-konfigurieren-milvus-redis-minio-docker-compose-yml.png

Schritt 3: Starten Sie das System.

Verwenden Sie die geänderte Datei docker-compose.yml, um die fünf Docker-Container zu starten, die im Videoabrufsystem verwendet werden sollen:

$ docker-compose up -d

Anschließend können Sie docker-compose ps ausführen, um zu überprüfen, ob die fünf Docker-Container ordnungsgemäß gestartet wurden. Der folgende Screenshot zeigt eine typische Oberfläche nach einem erfolgreichen Start.

4-sucessful-setup.png 4-sucessful-setup.png

Jetzt haben Sie erfolgreich ein Videosuchsystem erstellt, obwohl die Datenbank keine Videos enthält.

Schritt 4: Videos importieren.

Im Deploy-Verzeichnis des System-Repositorys liegt import_data.py, das Skript zum Importieren von Videos. Um das Skript auszuführen, müssen Sie nur den Pfad zu den Videodateien und das Importintervall aktualisieren.

5-update-path-video.png 5-update-pfad-video.png

daten_pfad: Der Pfad zu den zu importierenden Videos.

time.sleep(0.5): Das Intervall, in dem das System Videos importiert. Der Server, den wir zum Aufbau des Videosuchsystems verwenden, hat 96 CPU-Kerne. Es wird daher empfohlen, das Intervall auf 0,5 Sekunden festzulegen. Setzen Sie das Intervall auf einen größeren Wert, wenn Ihr Server über weniger CPU-Kerne verfügt. Andernfalls wird der Importprozess die CPU belasten und Zombieprozesse erzeugen.

Führen Sie import_data.py aus, um Videos zu importieren.

$ cd deploy
$ python3 import_data.py

Sobald die Videos importiert sind, haben Sie Ihr eigenes Videosuchsystem!

Anzeige der Schnittstelle

Öffnen Sie Ihren Browser und geben Sie 192.168.1.38:8001 ein, um die Schnittstelle des Videosuchsystems wie unten gezeigt zu sehen.

6-video-search-interface.png 6-video-suche-schnittstelle.png

Schalten Sie den Zahnradschalter oben rechts um, um alle Videos im Repository anzuzeigen.

7-view-all-videos-repository.png 7-alle-videos-ansehen-repository.png

Klicken Sie auf das Hochladefeld oben links, um ein Zielbild einzugeben. Wie unten gezeigt, gibt das System Videos mit den ähnlichsten Bildern zurück.

8-enjoy-recommender-system-cats.png 8-genuss-empfehlungssystem-katzen.png

Und nun viel Spaß mit unserem Videosuchsystem!

Bauen Sie Ihr eigenes

In diesem Artikel haben wir Milvus verwendet, um ein System für die Suche nach Videos anhand von Bildern zu erstellen. Dies ist ein Beispiel für die Anwendung von Milvus bei der Verarbeitung unstrukturierter Daten.

Milvus ist mit mehreren Deep-Learning-Frameworks kompatibel und ermöglicht die Suche in Millisekunden nach Vektoren im Milliardenbereich. Sie können Milvus gerne zu weiteren KI-Szenarien mitnehmen: https://github.com/milvus-io/milvus.

Seien Sie kein Fremder, folgen Sie uns auf Twitter oder schließen Sie sich uns auf Slack an! 👇🏻

Like the article? Spread the word

Weiterlesen