Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Finden Sie ähnliche Bilder in (reinem) PHP / MySQL

Ich hatte das genau gleiches Problem vorher.

Fühlen Sie sich frei, zu kopieren, was ich getan habe, und hoffentlich wird es Ihnen helfen / Ihr Problem lösen.

Wie ich es gelöst habe

Meine erste Idee, die fehlschlug, war, ähnlich wie Sie vielleicht denken, dass ich für jedes einzelne Bild (egal welche Größe) Zeichenfolgen erstellte. Aber ich habe schnell herausgefunden, dass dies Ihre Datenbank superschnell füllt und nicht effektiv war.

Die nächste Option (die funktioniert) war ein kleineres Bild (wie Ihr 5px Idee), und genau das habe ich gemacht, aber mit 10px *10px Bilder. Die Art und Weise, wie ich den 'Hash' für jedes Bild erstellt habe, war der imagecolorat() Funktion.

Siehe php.net hier.

Beim Empfang von rgb Farben für das Bild habe ich auf die nächsten 50 gerundet , sodass die Farben weniger spezifisch waren. Diese Zahl (50 ) ist, was Sie ändern möchten, je nachdem, wie spezifisch Sie möchten, dass Ihre Suchanfragen.

sind

zum Beispiel:

// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50

Nachdem Sie dies mit jedem Pixel (10px *10px gibt Ihnen 100 rgb() 's back), habe ich sie dann in ein Array umgewandelt und sie in der Datenbank als base64_encode() gespeichert und serialize() .

Bei der Suche nach ähnlichen Bildern habe ich genau das gleiche Verfahren für das Bild durchgeführt, das sie hochladen wollten, und dann Bild-„Hashes“ aus der Datenbank extrahiert, um sie alle zu vergleichen und zu sehen, was übereinstimmende gerundete rgb 's.

Tipps

  • Der Größere dass 50 ist im rgb Rundung, die weniger spezifisch Ihre Suche lautet (und umgekehrt).

  • Wenn Sie möchten, dass Ihr SQL Um genauer zu sein, kann es besser sein, extra/specific zu speichern Informationen über das Bild in der Datenbank, damit Sie die Suche in der Datenbank einschränken können. zB . wenn das Seitenverhältnis 4:3 ist , ziehen Sie Bilder nur um 4:3 herum aus der Datenbank. (usw.)

  • Es kann schwierig sein, diese perfekten 5px hinzubekommen *5px , ein Vorschlag ist also phpthumb . Ich habe es mit der Syntax:

    verwendet

Viel Glück Kumpel, hoffe ich konnte helfen.