sql >> Databáze >  >> RDS >> Mysql

Najděte podobné obrázky v (čistém) PHP / MySQL

Měl jsem to přesně stejný problém předtím.

Neváhejte a zkopírujte, co jsem udělal, a doufám, že vám to pomůže / vyřeší váš problém.

Jak jsem to vyřešil

Můj první nápad, který selhal, podobně jako si možná myslíte, je, že jsem nakonec vytvořil řetězce pro každý jednotlivý obrázek (bez ohledu na velikost). Ale rychle jsem zjistil, že to zaplňuje vaši databázi super rychle a nebylo to efektivní.

Další možností (která funguje) byl menší obrázek (jako váš 5px idea) a udělal jsem přesně to, ale s 10px *10px snímky. Způsob, jakým jsem vytvořil 'hash' pro každý obrázek, byl imagecolorat() funkce.

Viz php.net zde.

Při příjmu rgb barvy pro obrázek jsem je zaokrouhlil na nejbližších 50 , takže barvy byly méně konkrétní. Toto číslo (50 ) je to, co chcete změnit v závislosti na tom, jak konkrétní chcete, aby vaše vyhledávání byla.

například:

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

Poté, co to uděláte pro každý pixel (10px *10px vám dá 100 rgb() 's back), pak jsem je přeměnil na pole a uložil je do databáze jako base64_encode() a serialize() .

Při hledání obrázků, které jsou podobné, jsem provedl přesně stejný proces jako u obrázku, který chtěli nahrát, a poté jsem extrahoval „hash“ obrázku z databáze, abych je všechny porovnal a zjistil, co odpovídá zaoblenému rgb 's.

Tipy

  • Větší že 50 je v rgb zaokrouhlení, méně konkrétní vaše vyhledávání bude (a naopak).

  • Pokud chcete svůj SQL abychom byli konkrétnější, může být lepší uložit extra/specific informace o obrázku v databázi, abyste mohli omezit vyhledávání v databázi. např. . pokud je poměr stran 4:3 , vytáhněte obrázky pouze kolem 4:3 z databáze. (atd.)

  • Může být obtížné získat dokonale 5px *5px , takže návrh je phpthumb . Použil jsem to se syntaxí:

Hodně štěstí, kámo, doufám, že vám mohu pomoci.



  1. Běžná pole MySQL a jejich vhodné datové typy

  2. PostgreSQL:zlepšení výkonu pg_dump, pg_restore

  3. Pochopení účinků vysoké latence v řešeních MySQL a MariaDB s vysokou dostupností

  4. Jak mohu vytisknout výsledky dotazů MySQL ve formátu CSV?