Encontrar imagens / fotos duplicadas ou similares no Debian

Publicado por Fernando Medeiros em 22/03/2010

[ Hits: 16.304 ]

 


Encontrar imagens / fotos duplicadas ou similares no Debian



Recentemente baixei um pacotão de fotos (~11.000) de fontes diversas, para deixar rodando no widget "Picture Frame", do KDE. Para que todas as fotos tivessem a mesma chance de aparecer, eu quis localizar e remover as imagens repetidas.

Procurando um pouco no VOL, recomendaram o fdupes. Scriptzinho interessante, mas ele analisa (AFAIK) pelo tamanho e MD5. Mas no caso de uma imagem, é algo mais complexo, não pode resumir-se ao nome, tamanho, ou md5; afinal, você pode ter a mesma imagem diversas vezes, variando a qualidade, tamanho, resolução etc.

Procurando mais um pouco, encontrei o GQview (ou Geeqie). Bom programa (bem leve!). Totalmente GUI, tem uma funcionalidade que lhe permite encontrar imagens duplicadas, acessado pelo menu "Arquivo > Procurar por Duplicatas", e em modo de comparação, selecione "Similaridade". Para instalá-lo no Debian GNU/Linux, simplesmente use:

sudo apt-get install gqview

Bom programa, faz o que deve ser feito, apresenta um "relatório" completo das imagens em um grid, com dimensão, tamanho, miniatura etc.

Em matéria de desempenho, levou aproximadamente 20 minutos para comparar as 11.000 imagens (em um laptop AMD AthlonX2 1.9 / 2GB RAM). Mas achei um pouquinho ruim de usar... Esse negócio de navegar até a pasta, selecionar os arquivos, clicar-e-arrastar os arquivos para comparação... não me agradou (Ssu chato pra caramba com isso :P).

Além disso, não encontrei uma maneira de salvar os resultados da procura por imagens. Isso é ruim! Tem que remover uma por uma, "na unha"!

Procurando agora no apt-cache, encontrei o findimagedupes. Ele não tem front-end, precisa ser acessado via linha de comando. É um script em Perl que cria "fingerprints" das imagens usando ImageMagick. Então, faz uma procura baseado nesses fingerprints.

IMHO, findimagedupes é um bom exemplo de programa para Unix: você chama ele, ele fica processado... quieto... sem dar alertas, mensagens, ou medidores de progresso. Só dá alertas caso ocorram erros.

Para instalá-lo no Debian, também é bem simples:

sudo apt-get install findimagedupes

E para utilizá-lo:

findimagedupes /home/você/path/das/imagens

A questão do desempenho, ele pecou um pouco... Fez o mesmo trabalho em quase meia hora. Mas os resultados foram muito melhores! Muito mais precisos e eficientes que o GQview. Ele não apresenta um relatório completo como o GQview. Ao invés disso, ele joga no terminal o nome das duas imagens similares, uma ao lado da outra. Isso é ótimo, pois possibilita redirecionar a saída do termina para um txt e excluir as imagens repetidas com um simples scriptzinho.

Página do criador do script:
Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

VirtualBox 4.2.6 no Fedora 18

Instalação do SOLR no CentOS 6.7

Instalando o kernel e outros pacotes no Ubuntu e Debian-like

Habilitando o preview de áudio do Nautilus no Debian

KTorrent WebInterface: Controlando o Ktorrent pelo seu browser

  

Comentários
[1] Comentário enviado por chnpp-user em 14/11/2011 - 02:24h

Obrigado por sua dica, decidi usar o findimagedupes e os resultados são ótimos.

Ele identificou uma imagem de 94x56 pixels como uma duplicada de uma de 1920x1080 pixel :)

Fallow!

[2] Comentário enviado por removido em 02/01/2013 - 01:57h

Obrigado por compartilhar, é realmente uma ótima ferramenta.

Se você tem uma base muito grande de imagens, é interessante gerar um arquivo de fingerprint, caso queira comparar apenas uma nova imagem com uma coleção já existente

Para gerar um fingerprint de maneira recursiva para posterior comparação:
findimagedupes -f=/home/voce/colecao.txt -n -R *

Se deseja saber se um arquivo qualquer já está em sua coleção:
findimagedupes -a -f=/home/voce/colecao.txt /tmp/qualquer.jpg

Para ver todos os duplicados em sua coleção
findimagedupes -f=/home/voce/colecao.txt

Se deseja filtrar alguns tipos de arquivo para não serem analisados
find -type f \( -iname "*" ! -iname "*.ini" ! -iname "thumb_*" ! -iname "normal_*" ! -iname "*.html" \) -print0 | findimagedupes -f=/home/voce/colecao.txt -n -0 -- -

Existe também uma biblioteca chamada pHash, eficiente até mesmo para comparação de recortes, parece ser a melhor ferramenta http://www.phash.org/.

Uma boa comparação de ferramentas e algoritmos semelhantes pode ser encontrada em http://hackerlabs.org/blog/2012/07/30/organizing-photos-with-duplicate-and-similarity-checking/

[3] Comentário enviado por lnasci em 24/02/2013 - 01:00h

como seria um scrip para fazer a exclusão das imagens duplicadas? vlw!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts