Ponieważ niektóre osoby w komentarzach do pytania wielokrotnie powtarzały mi, że to raczej trywialne, zrobiłem to: aplikacja, która sortuje obrazy w bieżącym katalogu, pozostawiając rzeczywiste porównanie między użytkownikami . 1
Napisany w C # dla .NET 2. Działa również na Mono (do tej pory testowany na Linuksie). Wymaga dcraw na PATH (skompilowany plik wykonywalny dla Windows lub OS X można pobrać tutaj ).
Obecnie interakcja użytkownika jest bardzo szczątkowa. To prawdopodobnie może ulec zmianie. Również kod jest jak zwykle złym bałaganem przy takiej hackerskiej robocie.
Aplikację należy uruchomić w katalogu zawierającym obrazy do sortowania. Następnie ładuje wszystkie obrazy, które może znaleźć i obsłużyć (JPEG, GIF, PNG, BMP są obsługiwane natywnie, wszystkie inne formaty są obsługiwane przez dcraw lub pomijane, jeśli nie są). Utrzymuj rozsądną liczbę obrazów, ponieważ każdy obraz jest wstępnie załadowany do pamięci w celu przyspieszenia wyświetlania - próbowałem uruchomić go w folderze zawierającym około 600 obrazów i zakończyłem go przy zużyciu pamięci około 2 GiB.
Następnie pojawi się dwupanelowy widok z obrazem po lewej i po prawej stronie. Kliknij ten, który uważasz za najlepszy z dwóch. Otrzymasz wtedy dwa nowe obrazy. Kontynuuj, aż skończysz. Możesz zamknąć program, jeśli chcesz, wznowi od miejsca, w którym przerwałeś.
Po wykonaniu wszystkich niezbędnych porównań 2 można zobaczyć wynik:
Ma posortowaną listę zdjęć po lewej stronie z najwyższą oceną u góry i najniższą oceną u dołu.
Lista rzeczy do zrobienia:
- Pozwól wybrać zdjęcia do posortowania.
- Rozwiąż problem polegający na tym, że zdjęcia portretowe są zawsze wyświetlane w orientacji poziomej (przynajmniej dla obrazów surowych. Dcraw pozwala na obracanie, ale nie może tego robić automatycznie i nie widzę łatwego sposobu na znalezienie tego na zewnątrz).
- Zmniejsz zużycie pamięci dla dużej liczby zdjęć.
- Przetasuj wcześniej zdjęcia, aby rzadziej porównywać zdjęcia niemal identyczne.
- Zmień synchronizację między wątkiem sortującym a interfejsem użytkownika, aby nie polegać
Thread.Sleep
i odpytywać, ale aby korzystać z odpowiednich metod synchronizacji.
- Dodaj podgląd 1: 1 (lub przynajmniej większy). Obecnie nie można tego użyć do oceny rzeczy na poziomie pikseli.
Jest tutaj 5:26, więc przestaję teraz hakować.
Kod źródłowy znajduje się w moim repozytorium SVN i jest wydany na licencji MIT. Witam łatki ;-)
Obrazy na powyższych zrzutach ekranu są moje własne.
1 Oczywiście nie było to tak trywialne, jak inni chcieliby sprawić, żebym uwierzył. Po długiej walce z Librawem po prostu poszedłem drogą dcraw. Nie ładna, ale działa z minimalną ilością kodu.
2 Jest to w kolejności n log 2 n, gdzie n to liczba porównywanych zdjęć - więc na 20 zdjęć można spodziewać się około 20 × 4,3 ≈ 85 porównań - wiem, to nie jest mała liczba. Za wspomniane 300 obrazów otrzymałeś około 2400. Rzeczywista liczba, którą należy wykonać ręcznie, jest (a) inna (ponieważ złożoności pomijają czynnik liniowy) i (b), o ile do tej pory obserwowałem, mniejsza. Aby uniknąć niespójności, użytkownik nigdy nie będzie monitowany dwukrotnie na tych samych obrazach (w dowolnej kolejności) i nigdy nie będzie monitowany o ten sam obraz po obu stronach.