Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdź podobne obrazy w (czystym) PHP / MySQL

Miałem to dokładne ten sam problem wcześniej.

Możesz skopiować to, co zrobiłem i mam nadzieję, że pomoże ci to / rozwiązać twój problem.

Jak to rozwiązałem

Mój pierwszy pomysł, który się nie powiódł, podobny do tego, o czym myślisz, polega na tym, że stworzyłem ciągi dla każdego pojedynczego obrazu (bez względu na rozmiar). Ale szybko się zorientowałem, że to bardzo szybko wypełnia twoją bazę danych i nie jest skuteczne.

Następną opcją (która działa) był mniejszy obraz (np. Twój 5px pomysł) i dokładnie to zrobiłem, ale z 10px *10px obrazy. Sposób, w jaki stworzyłem „hash” dla każdego obrazu, to imagecolorat() funkcja.

Zobacz php.net tutaj.

Po otrzymaniu rgb kolory obrazu, zaokrągliłem je do najbliższych 50 , aby kolory były mniej specyficzne. Ten numer (50 ) jest tym, co chcesz zmienić w zależności od szczegółowości chcesz, aby Twoje wyszukiwania były.

na przykład:

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

Po wykonaniu tej czynności do każdego piksela (10px *10px da ci 100 rgb() 's back), następnie przekształciłem je w tablicę i zapisałem w bazie danych jako base64_encode() i serialize() .

Podczas wyszukiwania obrazów, które są podobne, wykonałem dokładnie ten sam proces dla obrazu, który chcieli przesłać, a następnie wyodrębniłem „hasze” obrazu z bazy danych, aby je wszystkie porównać i zobaczyć, co pasowało zaokrąglone rgb s.

Wskazówki

  • Większy że 50 jest w rgb zaokrąglanie, mniej szczegółowe Twoje wyszukiwanie będzie (i odwrotnie).

  • Jeśli chcesz mieć swój SQL dokładniej, lepiej przechowywać dodatkowe/specyficzne informacje o obrazie w bazie danych, dzięki czemu możesz ograniczyć wyszukiwania w bazie danych. np. . jeśli proporcje to 4:3 , ciągnij tylko obrazy wokół 4:3 z bazy danych. (itd.)

  • Może być trudno uzyskać to idealnie 5px *5px , więc sugestia to phpthumb . Użyłem go ze składnią:

Powodzenia kolego, mam nadzieję, że pomogę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W jakich okolicznościach chciałbyś, aby Railsy NIE łączyły się ponownie z MYSQL?

  2. Aby się zalogować GET lub POST?

  3. Jak tworzyć kaskadowe listy rozwijane za pomocą mysql i php

  4. Jak napisać zapytanie MySQL Join

  5. Jak odgadnąć schemat w Mysqlinput w locie w Talend