Überblick
Der Yupoo Picture Manager bedient mehrere Millionen Nutzer und verwaltet mehrere Milliarden Bilder. Da die Benutzergalerie immer größer wird, benötigt Yupoo dringend eine Lösung, die das Bild schnell auffinden kann. Mit anderen Worten: Wenn ein Benutzer ein Bild eingibt, sollte das System das Originalbild und ähnliche Bilder in der Galerie finden. Die Entwicklung des Dienstes "Suche nach Bildern" bietet einen effektiven Ansatz für dieses Problem.
Die Suche nach Bildern hat zwei Entwicklungen durchlaufen:
- Anfang 2019 begann die erste technische Untersuchung und im März und April 2019 wurde das System der ersten Generation eingeführt;
- Anfang 2020 wurde mit der Untersuchung des Aufrüstungsplans begonnen, und im April 2020 wurde die Gesamtaufrüstung zum System der zweiten Generation in Angriff genommen.
In diesem Artikel werden die Technologieauswahl und die Grundprinzipien der beiden Generationen des Systems für die Suche nach Bildern auf der Grundlage meiner eigenen Erfahrungen mit diesem Projekt beschrieben.
Überblick
Was ist ein Bild?
Bevor wir uns mit Bildern beschäftigen, müssen wir wissen, was ein Bild ist.
Die Antwort ist, dass ein Bild eine Sammlung von Pixeln ist.
Der Teil in dem roten Kasten auf diesem Bild zum Beispiel ist praktisch eine Reihe von Pixeln.
1-was-ist-ein-bild.png
Angenommen, der Teil im roten Kasten ist ein Bild, dann ist jedes unabhängige kleine Quadrat im Bild ein Pixel, die grundlegende Informationseinheit. Dann ist die Größe des Bildes 11 x 11 px.
2-was-ist-ein-bild.png
Mathematische Darstellung von Bildern
Jedes Bild kann durch eine Matrix dargestellt werden. Jedes Pixel des Bildes entspricht einem Element in dieser Matrix.
Binäre Bilder
Die Pixel eines binären Bildes sind entweder schwarz oder weiß, d. h. jedes Pixel kann durch 0 oder 1 dargestellt werden. Die Matrixdarstellung eines binären 4*4-Bildes ist zum Beispiel so:
0 1 0 1
1 0 0 0
1 1 1 0
0 0 1 0
RGB-Bilder
Die drei Grundfarben (Rot, Grün und Blau) können gemischt werden, um eine beliebige Farbe zu erzeugen. Bei RGB-Bildern verfügt jedes Pixel über die Grundinformationen von drei RGB-Kanälen. Wenn jeder Kanal eine 8-Bit-Zahl (in 256 Stufen) verwendet, um seine Grauskala darzustellen, lautet die mathematische Darstellung eines Pixels wie folgt:
([0 .. 255], [0 .. 255], [0 .. 255])
Nehmen wir ein 4 * 4 RGB-Bild als Beispiel:
3-4-x-4-rgb-image.png
Das Wesen der Bildverarbeitung besteht darin, diese Pixelmatrizen zu verarbeiten.
Das technische Problem der Suche nach einem Bild
Wenn Sie das Originalbild suchen, d. h. ein Bild mit genau denselben Pixeln, können Sie deren MD5-Werte direkt vergleichen. Bilder, die ins Internet hochgeladen werden, sind jedoch oft komprimiert oder mit Wasserzeichen versehen. Schon eine kleine Änderung in einem Bild kann zu einem anderen MD5-Ergebnis führen. Solange es Inkonsistenzen bei den Pixeln gibt, ist es unmöglich, das Originalbild zu finden.
Bei einem System, das nach Bildern sucht, wollen wir nach Bildern mit ähnlichem Inhalt suchen. Dazu müssen wir zwei grundlegende Probleme lösen:
- Darstellung oder Abstraktion eines Bildes in einem Datenformat, das von einem Computer verarbeitet werden kann.
- Die Daten müssen für Berechnungen vergleichbar sein.
Genauer gesagt benötigen wir die folgenden Merkmale:
- Extraktion von Bildmerkmalen.
- Merkmalsberechnung (Ähnlichkeitsberechnung).
Das System der ersten Generation für die Suche nach Bildern
Merkmalsextraktion - Bildabstraktion
Das Bildsuchsystem der ersten Generation verwendet zur Merkmalsextraktion den Wahrnehmungshash- oder pHash-Algorithmus. Was sind die Grundlagen dieses Algorithmus?
4-erste-generation-bild-suche.png
Wie in der Abbildung oben dargestellt, führt der pHash-Algorithmus eine Reihe von Transformationen am Bild durch, um den Hash-Wert zu erhalten. Während des Transformationsprozesses abstrahiert der Algorithmus kontinuierlich Bilder, wodurch sich die Ergebnisse ähnlicher Bilder einander annähern.
Merkmalsberechnung - Ähnlichkeitsberechnung
Wie berechnet man die Ähnlichkeit zwischen den pHash-Werten zweier Bilder? Die Antwort ist die Verwendung der Hamming-Distanz. Je kleiner der Hamming-Abstand ist, desto ähnlicher ist der Inhalt der Bilder.
Was ist die Hamming-Distanz? Es ist die Anzahl der unterschiedlichen Bits.
Ein Beispiel,
Value 1: 0 1 0 1 0
Value 2: 0 0 0 1 1
Die beiden obigen Werte enthalten zwei unterschiedliche Bits, so dass der Hamming-Abstand zwischen ihnen 2 beträgt.
Jetzt kennen wir das Prinzip der Ähnlichkeitsberechnung. Die nächste Frage ist, wie man die Hamming-Distanzen von 100 Millionen Daten aus 100 Millionen Bildern berechnen kann. Kurz gesagt, wie kann man nach ähnlichen Bildern suchen?
In der Anfangsphase des Projekts fand ich kein befriedigendes Werkzeug (oder eine Rechenmaschine), das die Hamming-Distanz schnell berechnen kann. Also habe ich meinen Plan geändert.
Meine Idee ist, dass, wenn der Hamming-Abstand zwischen zwei pHash-Werten klein ist, ich die pHash-Werte schneiden kann und die entsprechenden kleinen Teile wahrscheinlich gleich sind.
Ein Beispiel:
Value 1: 8 a 0 3 0 3 f 6
Value 2: 8 a 0 3 0 3 d 8
Wir teilen die beiden obigen Werte in acht Segmente und die Werte von sechs Segmenten sind genau gleich. Daraus lässt sich schließen, dass die Hamming-Distanz nahe beieinander liegt und die beiden Bilder somit ähnlich sind.
Nach der Umwandlung wird aus dem Problem der Berechnung der Hamming-Distanz ein Problem der Gleichwertigkeit. Wenn ich jeden pHash-Wert in acht Segmente unterteile, sind die beiden pHash-Werte ähnlich, solange es mehr als fünf Segmente gibt, die genau die gleichen Werte haben.
Es ist also sehr einfach, die Äquivalenzsuche zu lösen. Wir können die klassische Filterung eines herkömmlichen Datenbanksystems verwenden.
Natürlich verwende ich das Multi-Term-Matching und spezifiziere den Grad der Übereinstimmung mit minimum_should_match in ElasticSearch (dieser Artikel stellt das Prinzip von ES nicht vor, Sie können es selbst lernen).
Warum wählen wir ElasticSearch? Erstens, weil es die oben erwähnte Suchfunktion bietet. Zweitens verwendet das Bildmanager-Projekt selbst ES, um eine Volltextsuchfunktion bereitzustellen, und es ist sehr wirtschaftlich, die vorhandenen Ressourcen zu nutzen.
Zusammenfassung des Systems der ersten Generation
Das System der ersten Generation für die Suche nach Bildern wählt die Lösung pHash + ElasticSearch, die die folgenden Eigenschaften aufweist:
- Der pHash-Algorithmus ist einfach zu verwenden und kann einem gewissen Grad an Kompression, Wasserzeichen und Rauschen widerstehen.
- ElasticSearch nutzt die vorhandenen Ressourcen des Projekts, ohne zusätzliche Kosten für die Suche zu verursachen.
- Die Einschränkung dieses Systems ist jedoch offensichtlich: Der pHash-Algorithmus ist eine abstrakte Darstellung des gesamten Bildes. Sobald wir die Integrität des Bildes zerstören, z. B. indem wir dem Originalbild einen schwarzen Rand hinzufügen, ist es fast unmöglich, die Ähnlichkeit zwischen dem Original und den anderen Bildern zu beurteilen.
Um solche Beschränkungen zu überwinden, wurde das Bildsuchsystem der zweiten Generation entwickelt, das auf einer völlig anderen Technologie basiert.
Dieser Artikel wurde von rifewang, Milvus-Benutzer und Softwareentwickler bei UPYUN, geschrieben. Wenn Ihnen dieser Artikel gefällt, können Sie gerne vorbeikommen und Hallo sagen! https://github.com/rifewang
- Das technische Problem der Suche nach einem Bild
- Das System der ersten Generation für die Suche nach Bildern
- Zusammenfassung des Systems der ersten Generation
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word