Indexování histogramů v DB

oss

Indexování histogramů v DB
« kdy: 09. 11. 2018, 09:12:04 »
Mozno poradite ako na to.
Vo web galerii uchovavam velke mnozstvo obrazkov, k nim si do relacnej DB vytahujem rozne metadata (velkost,  autora,...) atd.
No chcel by som pred pridanim noveho obrazku zobrazovat farebne podobne obrazky.
Rad by som to robil cez histogramy farieb (histogram je v podstate vektor, standardnej dlzky cisiel 0.0 az 1.0).

Moja otazka je ako takyto vektor indexovat v relacnej databaze (zamerne neudavam typ) tak aby som s nej vedel elefktivne najst N najpodobnejsich histogramov a teda aj fotiek.
« Poslední změna: 09. 11. 2018, 11:08:09 od Petr Krčmář »


lopata

Re:Indexovanie histogramov v DB
« Odpověď #1 kdy: 09. 11. 2018, 10:39:49 »
Třeba takhle: https://dba.stackexchange.com/a/163929

Ale jinak to není moc úloha pro relační databáze, pokud bys to chtěl v budoucnu nějak rozšiřovat, tak brzo narazíš na limity. Možná by ses měl podívat spíš po něčem takovém: https://douglasduhaime.com/posts/identifying-similar-images-with-tensorflow.html

oss

Re:Indexovanie histogramov v DB
« Odpověď #2 kdy: 09. 11. 2018, 10:47:14 »
Třeba takhle: https://dba.stackexchange.com/a/163929

Ale jinak to není moc úloha pro relační databáze, pokud bys to chtěl v budoucnu nějak rozšiřovat, tak brzo narazíš na limity. Možná by ses měl podívat spíš po něčem takovém: https://douglasduhaime.com/posts/identifying-similar-images-with-tensorflow.html

Nechcem ziadne vendor lok riesnie, potrebujem aby som to dokazal implementovat na akejkolvek relacnej databaze.

lopata

Re:Indexovanie histogramov v DB
« Odpověď #3 kdy: 09. 11. 2018, 10:55:46 »
Nechcem ziadne vendor lok riesnie, potrebujem aby som to dokazal implementovat na akejkolvek relacnej databaze.

Aby to nějak rozumně fungovalo, potřebuješ N-dimenzionální index (např. KD-tree). Standardní B-tree je na to nevhodný. Takže máš asi smůlu.

Kit

Re:Indexování histogramů v DB
« Odpověď #4 kdy: 09. 11. 2018, 11:51:29 »
Zkus použít R-tree.


app

Re:Indexování histogramů v DB
« Odpověď #5 kdy: 09. 11. 2018, 12:08:51 »
Nebo si tu podobnost obrazku muzes predpocitavat a pro hledani podobnych pouzit
Kód: [Vybrat]
SELECT img_b_id
FROM img_similarity
WHERE img_a_id=123
ORDER BY similarity
LIMIT 10

Pocet zaznamu ale poroste kvadraticky s poctem obrazku, takze to pro tebe mozna nebude pouzitelne.

Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:Indexování histogramů v DB
« Odpověď #6 kdy: 09. 11. 2018, 13:49:19 »
Citace
Nechcem ziadne vendor lok riesnie, potrebujem aby som to dokazal implementovat na akejkolvek relacnej databaze.
Tak to máš smůlu, protože pro SQL to je vyloženě nevhodná úloha, jelikož to potřebuje multidimenzionální index.
Máš dvě možnosti, buďto se funkcionality (alespoň co se týče real-time výpočtu) vzdát, anebo použít nějaké rozšíření SQL, kde vždycky bude vendor lock-in.

Osobně bych Ti radil to druhé, protože vendor-lock na postgres ničemu nevadí: je to opensource databáze a navíc z opensource nejlepší.
Tedy jestli někdy budeš chtít migrovat, tak není důvod migrovat na jakoukoli jinou opensource databázi. A jestli někdy budeš migrovat na nějakou proprietální drahou databázi, tak přepsat tendle kousek kódu je to nejlevnější, co budeš řešit...
PS: Samozřejmě můžeš udělat nějaké "heuristické algoritmy", např. najít si nejlepší shodu pro každou barvu a ořezané výsledky seřadit dle vypočítané shody už na omezeném datasetu, ale pokud to chceš dělat pořádně a rozumně rozšiřitelně a použitelně, tak se těmdle polovičatejm řešením vyhni.

v

Re:Indexování histogramů v DB
« Odpověď #7 kdy: 09. 11. 2018, 14:21:44 »
Mozno poradite ako na to.
Vo web galerii uchovavam velke mnozstvo obrazkov, k nim si do relacnej DB vytahujem rozne metadata (velkost,  autora,...) atd.
No chcel by som pred pridanim noveho obrazku zobrazovat farebne podobne obrazky.
Rad by som to robil cez histogramy farieb (histogram je v podstate vektor, standardnej dlzky cisiel 0.0 az 1.0).

Moja otazka je ako takyto vektor indexovat v relacnej databaze (zamerne neudavam typ) tak aby som s nej vedel elefktivne najst N najpodobnejsich histogramov a teda aj fotiek.
nestačilo by vám to podle jedné převládající barvy? to by se dalo vyjádřit jedinným číslem

mtd

Re:Indexování histogramů v DB
« Odpověď #8 kdy: 09. 11. 2018, 15:02:38 »
To je počítání vzdáleností vektorů. Na to se dá buď napsat vlastní tool, nebo pokud to musí být v db, tak se dá použít db co umí hledat dokumenty podle podobnosti (zkusil bych elasticsearch, ten umí i více algoritmů pro podobnost).

https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-similarity.html

a rychlým hledáním jsem našel i toto (což nemám otestované):
https://github.com/dsys/match