Mysql
 sql >> Database >  >> RDS >> Mysql

Trova immagini simili in PHP / MySQL (puro).

Ho avuto questo esatto stesso problema prima.

Sentiti libero di copiare ciò che ho fatto e, si spera, ti aiuterà a risolvere il tuo problema.

Come l'ho risolto

La mia prima idea che ha fallito, simile a quello che potresti pensare, è che ho finito per creare stringhe per ogni singola immagine (indipendentemente dalle dimensioni). Ma ho subito capito che questo riempie il tuo database in modo super veloce e non era efficace.

La prossima opzione (che funziona) era un'immagine più piccola (come il tuo 5px idea), e l'ho fatto esattamente, ma con 10px *10px immagini. Il modo in cui ho creato l''hash' per ogni immagine è stato imagecolorat() funzione.

Vedi php.net qui.

Quando si riceve il rgb colori per l'immagine, li ho arrotondati al 50 più vicino , in modo che i colori fossero meno specifici. Quel numero (50 ) è ciò che vuoi cambiare a seconda di quanto specifico vuoi che siano le tue ricerche.

ad esempio:

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

Dopo aver eseguito questa operazione su ogni pixel (10px *10px ti darà 100 rgb() 's back), li ho quindi trasformati in un array e li ho archiviati nel database come base64_encode() e serializza() .

Durante la ricerca di immagini simili, ho eseguito lo stesso identico processo per l'immagine che volevano caricare, quindi ho estratto gli "hash" dell'immagine dal database per confrontarli tutti e vedere cosa aveva rgb 's.

Suggerimenti

  • Il Più grande quel 50 è nel rgb arrotondamento, il meno specifico la tua ricerca sarà (e viceversa).

  • Se vuoi il tuo SQL per essere più specifici, potrebbe essere meglio memorizzare extra/specifico informazioni sull'immagine nel database, in modo da poter limitare le ricerche che ottieni nel database. ad esempio . se le proporzioni sono 4:3 , trascina le immagini solo intorno a 4:3 dalla banca dati. (ecc)

  • Può essere difficile ottenere perfettamente questo 5px *5px , quindi un suggerimento è phpthumb . L'ho usato con la sintassi:

Buona fortuna amico, spero di poterti aiutare.