Como algumas pessoas nos comentários das perguntas me disseram repetidamente que era bastante trivial, eu realmente fiz isso: Um aplicativo que classifica as imagens no diretório atual, deixando a comparação direta entre os usuários . 1 1
Escrito em C # para .NET 2. Funciona em Mono (testado no Linux até agora) também. Requer dcraw no PATH (o executável compilado para Windows ou OS X pode ser baixado aqui ).
Atualmente, a interação do usuário é muito rudimentar. Provavelmente isso está sujeito a alterações. Além disso, o código é uma bagunça do mal, como de costume com um trabalho de hackers.
O aplicativo deve ser iniciado em um diretório que contém as imagens para classificar. Em seguida, ele carrega todas as imagens que pode encontrar e manipular (JPEG, GIF, PNG, BMP são suportados nativamente, todos os outros formatos são suportados pelo dcraw ou ignorados, se não). Mantenha o número de imagens razoável, pois todas as imagens são pré-carregadas na memória para acelerar a exibição - tentei iniciá-la em uma pasta com cerca de 600 imagens e finalizei-a com cerca de 2 GiB de uso de memória.
Depois disso, você obtém uma visualização em dois painéis com uma imagem à esquerda e à direita. Clique no que você considera o melhor dos dois. Você receberá duas novas imagens. Continue até terminar. Você pode fechar o programa, se quiser, ele continuará de onde parou.
![Vista de comparação](https://i.stack.imgur.com/pj1Er.jpg)
Após todas as comparações necessárias 2, o resultado pode ser visto:
![Visualização de resultados](https://i.stack.imgur.com/Q9OIn.jpg)
Ele tem a lista ordenada de imagens à esquerda, com a classificação mais alta no topo e a mais baixa na parte inferior.
Lista de afazeres:
- Permite selecionar as imagens para classificar.
- Resolva o problema de que as fotos em retrato são sempre exibidas na orientação paisagem (pelo menos para imagens em bruto. O dcraw permite rotação, mas não pode fazê-lo automaticamente e não vejo uma maneira fácil de descobrir isso externamente).
- Reduza o uso de memória para um grande número de imagens.
- Embaralhe as imagens com antecedência, para que rajadas de imagens quase idênticas tenham menos probabilidade de serem comparadas diretamente entre si.
- Altere a sincronização entre o thread de classificação e a interface do usuário para não confiar mais na
Thread.Sleep
pesquisa, mas para usar métodos de sincronização adequados.
- Adicione uma visualização 1: 1 (ou pelo menos uma visualização maior). Atualmente, isso não pode ser usado para julgar coisas no nível de pixel.
São 5:26 aqui, então paro de invadir isso agora.
O código-fonte pode ser encontrado no meu repositório SVN e é liberado sob a licença MIT. Congratulo-me com os patches ;-)
As imagens nas capturas de tela acima são minhas.
1 É claro que não foi tão trivial quanto os outros gostariam de me fazer acreditar. Depois de uma longa luta com Libraw, simplesmente segui a rota do dcraw. Não é bonito, mas funciona com uma quantidade mínima de código.
2 Isso está na ordem de n log 2 n em que n é o número de imagens comparadas - portanto, para 20 imagens, você pode esperar algo em torno de 20 × 4,3 ≈ 85 comparações - eu sei, não é um número pequeno. Nas 300 imagens que você mencionou, você obteria cerca de 2400. O número real que deve ser executado manualmente é (a) diferente (já que as complexidades omitem o fator linear) e (b), tanto quanto eu observei até agora, menor. Para evitar inconsistências, o usuário nunca será solicitado duas vezes nas mesmas duas imagens (por ordem) e nunca será solicitado com a mesma imagem nos dois lados.