Znajdowanie duplikatów zdjęć oraz plików

0

Mam burdel bałagan bajzel chlew nieporządek w plikach.

Zalazło się trochę duplikatów plików, które są takie same. Obecnie aby sprawdzić czy dwa pliki są jednakowe sprawdzam ich dumy MD5 / SHA256 i porównuję.

Czy istnieje lepszy sposób na znajdowanie i usuwanie duplikatów plików?

1

Jedziesz bajt po bajcie i jak się nie zgadzają, to pliki są różne. Po co czytać cały plik i jakieś hasze liczyć?
Tylko posortuj najpierw po długości, bo się nie doczekasz wyniku. :P

A osobiście używam programu o nazwie AllDup.

0

Możesz też używać w skrypcie wsadowym standardowego polecenia COMP - zwraca ono informację o identyczności jako errorlevel (1 - różne, 0 - takie same). https://ss64.com/nt/comp.html

1

https://github.com/qarmin/czkawka -> znajduje także obrazy "podobne" i ma inne porównania do szukania duplikatów.

1

http://anti-twin.com/
stare ale jare

image

0
somekind napisał(a):

Jedziesz bajt po bajcie i jak się nie zgadzają, to pliki są różne. Po co czytać cały plik i jakieś hasze liczyć?

Bo w ten sposób musi porównać każdy z każdym. Licząc hasze może je wrzucić do Map<Hash, List<File>> i całość ma szansę się wykonać nie wpływając na bilans energetyczny kraju ;)

0
piotrpo napisał(a):

Bo w ten sposób musi porównać każdy z każdym.

Każdy z każdym w ramach grupy o tym samym rozmiarze, typie i dacie. No ale ok, to jeśli taka grupa ma więcej niż dwa elementy, to można zoptymalizować licząc hasz.

0

Podepnę się pod temat bo mam podobny problem - mam mnóstwo zdjęć, niektóre z nich są zdublowane w gorszej jakości (np wysłane whatsappem). Chciałbym usunąć zdjęcia o gorszej jakości.
Niestety narzędzia które przetestowałem do znajdowania duplikatów obrazków są wolne i dopuszczają zbyt wiele zmian. Większość każe sobie podać "współczynnik podobieństwa" obrazków. Ja nie chcę wyszukiwać podobnych obrazków tylko obrazków identycznych o gorszej rozdzielczości.
Ciężko odgadnąć jaki ma być ten współczynnik - 100% to nie jest, bo przez kompresję piksele nie są identyczne, ale jednocześnie 99% to za mało bo często znajduje dwa bardzo podobne obrazki (np po drobnej obróbce / nałożeniu filtra i przed). Czy jest na to jakiś ciekawy trick / algorytm?

0

@obscurity: Ciekawego tricku raczej nie znajdziesz. I jest pytanie co to są takie same zdjęcia? Jak masz zdjęcie w proporcjach 4:3 i przytniesz je do kwadratu zmieniając proporcje, to będzie takie samo? Jak robisz 3 zdjęcia i na jednym z nich ktoś ma zamknięte oczy, a na drugim otwarte to jak je zinterpretować? Moim zdaniem czegoś imperatywnego o przyzwoitej jakości nie da się zrobić. Pozostaje ML i algorytmy z dziedziny unsupervised learning.

  • Na początek definiujesz sobie zbiór cech kluczowych zdjęcia na przykład: proporcje, kolor dominujący, kolory dominujące regionów kontrast itp.
  • Liczysz sobie te te cechy dla każdego zdjęcia i zapisujesz w postaci wektora reprezentującego data point.
  • Odległość pomiędzy poszczególnymi data points, jest tym mniejsza im bardziej są one do siebie podobne.
  • szukasz takich punktów centralnych, dla którego suma odległości do wszystkich punktów będzie najmniejsza, ta suma + jakaś rosnąca f(c), gdzie c to liczba punktów centralnych to twoja funkcja kosztu.
  • Zakładając, że funkcja będzie miała postać sum(a*D^2) + (b*c^2) szukasz takich parametrów a, b, żeby jej wynik dla całości był jak najniższy, a wciąż dawał oczekiwany rezultat.

Plusem problemu z obrazkami jest to, że bardzo łatwo można wygenerować zbiór danych do uczenia - wrzucasz 10k obrazków, dla każdego z nich generujesz losową liczbę duplikatów w innej jakości, z lekkim przesunięciem itd. Ponieważ kontrolujesz tworzenie zbioru uczącego dokładnie wiesz jaki powinien być wynik.

0

@piotrpo: takie same znaczy wizualnie identyczne. Zamknięte oczy, nałożenie filtra, zmiana kontrastu czy przycięcie ma być traktowane jako inne zdjęcie.

  1. Otwierasz plik .jpg
  2. Zapisujesz ze zmniejszoną jakością powiedzmy 70%.
    Wizualnie dla człowieka te dwa zdjęcia będą identyczne, ale chcę zachować jedynie oryginał o wyższej jakości. Najwyraźniej jest to zbyt skomplikowane dla komputera.
0

AntiTwin.exe proste filtry i zmianę rozmiaru wyłapuje!

Ale jak już zrobisz CROP to już uznaje plik jako inny !
Przykłady:

IMG-20200626-WA0004.jpgIMG-20200626-WA0004_70.jpgIMG-20200626-WA0004_resize_down_80.jpgIMG-20200626-WA0004_grayscale.jpg

0

@obscurity: Bo computer vision to jest trudny temat. My (życie na Ziemi) mieliśmy 6 milionów lat na ogarnięcie zmysłów, języka, poruszania się, a komputery, które biją nas w trudnych i wymagających umysłowo dziedzinach, maja problem z ogarnięciem prostych i naturalnych dla nas rzeczy.
https://pl.wikipedia.org/wiki/Paradoks_Moraveca

1 użytkowników online, w tym zalogowanych: 0, gości: 1