Pergunta

Estou montando um script para encontrar duplicatas remover na uma grande biblioteca de imagens. No momento eu estou fazendo um filtro de duas passagens dos primeiros arquivos conclusão do mesmo tamanho e, em seguida, fazendo um sha256 em um pedaço 10240 byte do arquivo para obter uma impressão digital dos arquivos com o mesmo tamanho (código aqui ).

Ele funciona bem, mas eu estou supondo que há provavelmente checksums embutidos no formato jpeg que eu poderia usar em vez de fazer o sha256.

Alguém sabe se existem somas de verificação ou outros componentes que possam agir como checksums / impressões digitais? Se assim for, há uma maneira eficiente de acesso a eles?

Foi útil?

Solução

Eu não acho que a especificação JPEG inclui qualquer tipo de soma de verificação da maneira que você está descrevendo.

A JPEG pode conter uma miniatura como parte de seus metadados EXIF, no entanto. Não é um indicador perfeito, já que é possível que duas imagens diferentes para ter a mesma miniatura. Há pelo menos um caso documentado de uma miniatura não sendo substituído depois que a imagem tinha modificações substanciais submetido, disse miniaturas revelando muito mais do que a editora tinha pretendido.

Outras dicas

Tem sido um tempo desde que eu tenho cavado na biblioteca IJG, mas eu não acho que há uma chamada de membro ou função de classe fácil você pode usar lá para verificar se há algum tipo de impressão digital. Você poderia usar o construída em etiquetas EXIF ??se você pode controlar a codificação das imagens ...

Eu estou apenas construiu um roteiro muito semelhante. Eu não quero a soma de verificação de metadados eu quero ver se as imagens reais são duplicatas, mesmo se as tags foram modificados. Melhor para que não seja para ordenar por tamanho, mas fazer ordenar pelo istelf soma de verificação. Eu uso jhead a remoção de metadados e, em seguida, soma de verificação do arquivo inteiro (mas eu também pensei em apenas fazer parte dela, mas na verdade eu não acho que economiza muito tempo). não jhead não utilizam memória partilhada (tubos) e faz de substituição, então eu só copiar o arquivo para a memória compartilhada em primeiro lugar. Eu coloco a soma de verificação no campo ImageDescription para mais tarde mais rápida recuperação. Obviamente, isso também permite verificar a integridade da imagem mais tarde e é parte da razão pela qual eu soma de verificação a coisa toda. Dica: exiv2 é muito mais rápido para ler e escrever os metadados de exiftool para um de manipulação baseada decisão tempo.

padrão no formato JPEG (ITU-T.81) eu acredito que não há qualquer elemento de campo / sintaxe que tem uma soma de verificação ou tal, para todo o arquivo de imagem JPEG comprimido. A menos que a coloca aplicações personalizadas, tais arquivado no segmento de aplicação, ou como metadados para o qual os segmentos são fornecidos no padrão. Então, para servir o seu propósito, o que você está fazendo é um soln. Outro poderia ser algum tipo um invólucro de aplicação que vai chamar algum arquivo binário utlitiy comparar (como além de comparação, ou comandar até mesmo janelas fc / b ) e verificar o resultado de que a utilidade comparar e tomar a decisão u quer.

-AD

Uma maneira que você pode fazer é reduzir todas as imagens para um tamanho fixo e loja que como uma miniatura. Em seguida, a comparação de imagem seria comparar imagens de tamanhos semelhantes e dar-lhe a chance de ser um duplicado -. Útil se você tiver cortada (a não ser cortado fortemente) ou imagens redimensionadas e quer encontrar essas 'duplicatas'

Na especificação XMP existem ID documento e versão ID que deve identificar exclusivamente a versão da imagem.

O problema com estes (e com qualquer outro método de identificação baseada em metadados) é que ele não pode ser respeitado por alguns aplicativos que podem mudar o conteúdo do jpeg atualizar os metadados em conformidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top