Comme certaines personnes dans la question, les commentaires m'ont répété que c'était plutôt trivial, c'est ce que j'ai fait: une application qui trie les images du répertoire actuel en laissant la comparaison tête à tête réelle à l'utilisateur . 1
Écrit en C # pour .NET 2. Fonctionne également sur Mono (testé sur Linux à ce jour). Nécessite dcraw sur le PATH (le fichier exécutable compilé pour Windows ou OS X peut être téléchargé ici ).
Actuellement, l'interaction utilisateur est très rudimentaire. Ceci est probablement sujet à changement. De plus, le code est un désordre diabolique comme d'habitude avec un tel travail de bidouille.
L'application doit être démarrée dans un répertoire contenant les images à trier. Il charge ensuite toutes les images qu'il peut trouver et gérer (JPEG, GIF, PNG, BMP sont supportés de manière native, tous les autres formats sont supportés par dcraw ou ignorés sinon). Conservez un nombre d'images raisonnable, car chaque image est préchargée en mémoire pour accélérer l'affichage. J'ai essayé de le démarrer sur un dossier contenant environ 600 images et de le terminer à une utilisation de mémoire d'environ 2 Gio.
Après cela, vous obtenez une vue à deux volets avec une image à gauche et à droite. Cliquez sur celui que vous considérez comme le meilleur des deux. Vous obtiendrez alors deux nouvelles images. Continuez jusqu'à ce que vous avez terminé. Vous pouvez fermer le programme si vous le souhaitez, il reprendra là où vous l'avez laissé.
Une fois que toutes les comparaisons nécessaires ont été effectuées 2, vous pouvez voir le résultat:
Il contient la liste des images triées à gauche, la plus haute en haut et la plus basse en bas.
Liste de choses à faire:
- Autoriser la sélection des images à trier.
- Résolvez le problème selon lequel les portraits sont toujours affichés en orientation paysage (du moins pour les images brutes. Dcraw autorise la rotation mais ne peut pas le faire automatiquement et je ne vois pas de moyen facile de le détecter de manière externe).
- Réduisez l'utilisation de la mémoire pour un grand nombre d'images.
- Mélangez les images à l'avance afin que les rafales d'images presque identiques soient moins susceptibles d'être comparées directement les unes aux autres.
- Modifiez la synchronisation entre le fil de tri et l'interface utilisateur pour qu'elle ne s'appuie plus sur l'
Thread.Sleep
interrogation, mais utilise les méthodes de synchronisation appropriées.
- Ajoutez un aperçu 1: 1 (ou au moins un plus grand). Actuellement, cela ne peut pas être utilisé pour juger des choses au niveau des pixels.
Il est 5h26 ici, alors j'arrête de m'occuper de ça maintenant.
Le code source se trouve dans mon référentiel SVN et est publié sous licence MIT. Je souhaite la bienvenue aux patches ;-)
Les images dans les captures d'écran ci-dessus sont les miennes.
1 Bien sûr, ce n'était pas aussi trivial que d'autres voudraient me faire croire. Après une longue lutte avec Libraw, j’ai tout simplement choisi la voie du tracé. Pas joli, mais fonctionne avec une quantité minimale de code.
2 Ceci est dans l'ordre de n log 2 n où n est le nombre de photos comparées - ainsi, pour 20 photos, vous pouvez vous attendre à environ 20 × 4,3 ≈ 85 comparaisons - je sais, ce n'est pas un petit nombre. Pour les 300 images que vous avez mentionnées, vous obtiendrez environ 2400. Le nombre réel qui doit être effectué manuellement est (a) différent (puisque les complexités omettent le facteur linéaire) et (b) autant que j'ai observé jusqu'à présent, plus petit. Pour éviter les incohérences, l'utilisateur ne sera jamais invité deux fois sur les deux mêmes images (ni par ordre), ni avec la même image des deux côtés.