sql >> Database >  >> RDS >> Mysql

Zoek vergelijkbare afbeeldingen in (pure) PHP / MySQL

Ik heb dit exacte eerder hetzelfde probleem.

Voel je vrij om te kopiëren wat ik heb gedaan, en hopelijk zal het je helpen / je probleem oplossen.

Hoe ik het heb opgelost

Mijn eerste idee dat faalde, vergelijkbaar met wat je misschien denkt, is dat ik uiteindelijk strings heb gemaakt voor elke afzonderlijke afbeelding (ongeacht de grootte). Maar ik kwam er snel achter dat dit je database supersnel vult en niet effectief was.

De volgende optie (die werkt) was een kleinere afbeelding (zoals uw 5px idee), en ik deed precies dat, maar met 10px *10px afbeeldingen. De manier waarop ik de 'hash' voor elke afbeelding heb gemaakt, was de imagecolorat() functie.

Zie php.net hier.

Bij ontvangst van de rgb kleuren voor de afbeelding, ik heb ze afgerond op de dichtstbijzijnde 50 , zodat de kleuren minder specifiek waren. Dat nummer (50 ) is wat u wilt wijzigen, afhankelijk van hoe specifiek u wilt dat uw zoekopdrachten zijn.

bijvoorbeeld:

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

Nadat je dit met elke pixel hebt gedaan (10px *10px geeft je 100 rgb() 's back), heb ik ze vervolgens in een array veranderd en ze in de database opgeslagen als base64_encode() en serialize() .

Bij het zoeken naar afbeeldingen die vergelijkbaar zijn, deed ik exact hetzelfde proces met de afbeelding die ze wilden uploaden, en haalde vervolgens de afbeelding 'hashes' uit de database om ze allemaal te vergelijken, en te zien wat overeenkomende afgeronde rgb 's.

Tips

  • De Grotere dat 50 staat in de rgb afronding, hoe minder specifiek uw zoekopdracht zal zijn (en vice versa).

  • Als u uw SQL . wilt om specifieker te zijn, kan het beter zijn om extra/specifiek . op te slaan informatie over de afbeelding in de database, zodat u de zoekopdrachten die u in de database krijgt, kunt beperken. bijv. . als de beeldverhouding 4:3 . is , trek alleen afbeeldingen rond 4:3 uit de databank. (enz.)

  • Het kan moeilijk zijn om dit perfect 5px te krijgen *5px , dus een suggestie is phpthumb . Ik gebruikte het met de syntaxis:

Veel succes maat, ik hoop dat ik kan helpen.



  1. Maandag instellen als eerste dag van de week in SQL Server

  2. MySql 5.7-installatieprogramma kan VS 2013 herdistribueerbaar niet detecteren

  3. Maak een nieuwe Ruby on Rails-toepassing met MySQL in plaats van SQLite

  4. "Fatale fout interne verbinding" bij het uitvoeren van een native gecompileerde opgeslagen procedure in SQL Server 2019 (bekende bug)