DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   provera duplikata fajlova (http://www.devprotalk.com/showthread.php?t=8611)

ivanhoe 27. 03. 2010. 21:43

provera duplikata fajlova
 
Treba da sprecim da se 2 iste slike uploaduju, pa trazim sto efikasniji nacin za to.

Da li se crc32 moze pouzdano koristiti za detekciju duplikata? On je pre svega predvidjen za detekciju gresaka, i cuo sam da on ima mnogo vecu sansu za koliziju kljuceva(da sve razlicite vrednosti daju isti hash) od npr. md5, ali je i dosta brzi. Posto se radi o slikama od po 7-10MB performanse nisu zanemarljiva stvar, ali me brine da se ne desi da u nekom trenutku dve razlicite slike imaju isti "potpis" ? Kolike su tacno sanse za koliziju i da li treba brinuti o tome sa nekih 300K slika u bazi?

dinke 27. 03. 2010. 22:24

Ja bih pre probao da procitam exif podatke (npr timestamp snimka i model kamere koji je koriscen), mada ne znam sa kakvim slikama baratas, tj. da li je exif available.

zlukic 28. 03. 2010. 14:07

Pokusaj da imenujes slike tako da nikad ne dodju u koliziju. Mozda jedna od varijanti da ti bude da u njihovo ime dodajes datum do milisekunde ili da ih u potpunosti zamjenis sa datumom. U bazi drzi njihov opis koji ces smjesti u alt="" i to bi bilo dovoljno.

U nekim aplikacijam gdje se unose vece kolicine slika koristio sam takvan nacina upisa i nikad nije doslo do dupliranja. Isao sam i krak dalje te sam prema datumu radio i sistem foldera u koje sam unosio slike. Kasnije mi je to pomoglo da lakse radim arhiviranje. Laksa je automatizacija jer postoji neka logika bez potrebe da citam vrijeme upisa ili modifikacije slike. Ako dodje do pogreske pri unosu lako je zamjeniti sliku pod istim imenom.

Ovakav ili slican nacin imenovanja slika primjetio sam da koriste neke aplikacije koje dnevno primaju vise hiljada slika.

DejanVesic 29. 03. 2010. 11:39

Kako CRC32 ima 2^32 kombinacija, šansa da ti dve od 300K slika upadne u istu klasu (da daju isti CRC a da su zaista različite) je oko 0.007 %

Ja bih išao na MD5

ivanhoe 29. 03. 2010. 14:32

@dinke: teoretski bih mogao da gledam ime fotografa i vreme, sto nije losa ideja.. a mozda postoji i neki ID kamere u Exif-u, odnosno IPTC... istrazicu..

@zlukic: nije problem u imenovanju, problem je da neko ne uploaduje istu sliku 2 puta

@dejan: mislim da to ne mozes tako da racunas, jer tu se primenjuje onaj birthday paradox, a i nije idealna hash funkcija u pitanju (da pokrije svih 2^32 kombinacija)

Anyhow, znaci md5() za sad, i meni se cini... a i Dinketov predlog je odlican...

zira 29. 03. 2010. 14:50

MD5 bi bio ok. Samo je pitanje je koliko ce ti hash pomoci kada su slike u pitanju, jer je dovoljno da slika bude u drugom formatu, optimizovana ili u malo drugacijoj rezoluciji i tebi ce izgledati da su razlicite, iako su prakticno "iste".

Pretpostavljam da je jedini nacin da se u vecini slucajeva obezbijedis od duplikata upotreba nekog liba za poredjenje slika po slicnosti (piksela).

jablan 29. 03. 2010. 15:01

Možeš da probaš sa sledećim trikom: porediš ovim redosledom:

* Veličina fajla
* MD5 poslednjih n bajtova fajla (tipa 16k), ovo bi trebalo da ide brzo.

Pa tek ako su oba ova broja ista, radiš MD5 celih fajlova.

McKracken 29. 03. 2010. 15:56

Imas nekoliko image hashing resenja koja podrzavaju i perceptualno poredjenje,

npr: http://www.phash.org/

zidoo 29. 03. 2010. 16:03

md5, imam bazu od ~400.000 slika i za sad ni jedan problem ... Dejan rece da je sansa 0.007% ... veca je sansa da meteor pogodi server ...

ivanhoe 29. 03. 2010. 20:26

@zidoo: za md5 nije frka, sanse za koliziju sa minimalne, samo je on malo sporiji i zahtevniji, zato sam mislio da mozda koristim neki drugi...

@McKracken: thanks za ovo, pogledacu

@zira: svestan sam toga, ali to mi nije toliki problem, ovo je arhiva za profi fotografe i samo je bitno da neko greskom ne uveze iste slike 2 puta, a ako bude nekih izmena (tipa editori vrate sliku na doradu) to ionako tretiraju kao potpuno novu sliku, tako da me to ne pogadja.

@jablan: hmmm, mudro zboris :)


Vreme je GMT +2. Trenutno vreme je 13:31.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.