sql >> Databasteknik >  >> RDS >> Mysql

Hitta liknande bilder i (ren) PHP / MySQL

Jag har haft det exakt samma fråga tidigare.

Kopiera gärna vad jag gjorde, och förhoppningsvis kommer det att hjälpa dig/lösa ditt problem.

Hur jag löste det

Min första idé som misslyckades, liknande vad du kanske tänker, är att jag gjorde strängar för varje enskild bild (oavsett vilken storlek). Men jag kom snabbt fram till att detta fyller din databas supersnabbt och var inte effektivt.

Nästa alternativ (som fungerar) var en mindre bild (som din 5px). idé), och jag gjorde precis det, men med 10px *10px bilder. Sättet jag skapade "hash" för varje bild var imagecolorat() funktion.

Se php.net här.

När du tar emot rgb färgerna för bilden, avrundade jag dem till närmaste 50 , så att färgerna var mindre specifika. Det numret (50 ) är vad du vill ändra beroende på hur specifik du vill att dina sökningar ska vara.

till exempel:

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

Efter att ha gjort detta till varje pixel (10px *10px ger dig 100 rgb() är tillbaka), gjorde jag dem sedan till en array och lagrade dem i databasen som base64_encode() och serialize() .

När jag sökte efter bilder som liknar varandra, gjorde jag exakt samma process för bilden de ville ladda upp och extraherade sedan bildhashar från databasen för att jämföra dem alla och se vad som matchade avrundad rgb s.

Tips

  • Den Större att 50 finns i rgb avrundning, det mindre specifika din sökning blir (och vice versa).

  • Om du vill ha din SQL för att vara mer specifik kan det vara bättre att lagra extra/specifikt info om bilden i databasen, så att du kan begränsa sökningarna du får i databasen. t.ex. . om bildförhållandet är 4:3 , dra bara bilder runt 4:3 från databasen. (etc)

  • Det kan vara svårt att få den här perfekta 5px *5px , så ett förslag är phpthumb . Jag använde den med syntaxen:

Lycka till kompis, hoppas jag kunde hjälpa.



  1. FORMAT() är trevligt och allt, men...

  2. SEC_CASE_SENSTIVE_LOGON i 12c

  3. När och varför ska man använda mysqli_fetch_row, mysqli_fetch_object, mysqli_fetch_assoc, mysqli_fetch_array

  4. Azure SQL Database Automatic Tuning