Domanda

Sto mettendo insieme uno script per trovare rimuovere i duplicati in una grande libreria di immagini. Al momento sto facendo un filtro a due passaggi per trovare prima i file della stessa dimensione e poi fare uno sha256 su un pezzo di file da 10240 byte per ottenere un'impronta digitale dei file con le stesse dimensioni (codice qui ).

Funziona bene, ma suppongo ci siano probabilmente checksum integrati nel formato jpeg che potrei usare invece di fare sha256.

Qualcuno sa se ci sono checksum o altri componenti che potrebbero fungere da checksum / impronte digitali? In tal caso, esiste un modo efficace per accedervi?

È stato utile?

Soluzione

Non credo che le specifiche JPEG includano alcun tipo di checksum nel modo in cui stai descrivendo.

Un JPEG può contenere una miniatura come parte dei suoi metadati EXIF. Non è un indicatore perfetto, poiché è possibile che due immagini diverse abbiano la stessa miniatura. Esiste almeno un caso documentato in cui una miniatura non viene sostituita dopo che l'immagine è stata sottoposta a sostanziali modifiche, ha dichiarato la miniatura rivelando molto più di quanto l'editore intendesse.

Altri suggerimenti

È passato un po 'di tempo da quando ho scavato nella libreria IJG, ma non credo che ci sia un membro di classe o una chiamata di funzione che puoi usare lì per verificare la presenza di qualche tipo di impronta digitale. È possibile utilizzare i tag EXIF ??incorporati se è possibile controllare la codifica delle immagini ...

Ho appena creato uno script molto simile. Non voglio fare il checksum dei metadati. Voglio vedere se le immagini reali sono duplicate anche se i tag sono stati modificati. La cosa migliore non è ordinare per dimensione, ma ordinarli per checksum. Uso jhead per rimuovere i metadati e quindi fare il checksum dell'intero file (ma ho anche pensato di farne solo una parte, ma in realtà non penso che risparmi molto tempo). jhead non usa la memoria condivisa (pipe) e sovrascrive quindi copio prima il file nella memoria condivisa. Posiziono il checksum nel campo ImageDescription per un successivo recupero più rapido. Ovviamente questo consente anche di verificare l'integrità dell'immagine in un secondo momento ed è parte del motivo per cui ho fatto il checksum del tutto. Suggerimento: exiv2 è MOLTO più veloce per leggere e scrivere i metadati di exiftool per una manipolazione basata su una decisione alla volta.

Nello standard JPEG (ITU-T.81) credo che non ci sia alcun elemento campo / sintassi che abbia un checksum o simile, per l'intero file di immagine jpeg compresso. A meno che un'applicazione personalizzata non inserisca tale archiviazione nel segmento Applicazione o come metadati per i quali i segmenti sono forniti nello standard. Quindi, per servire il tuo scopo, quello che stai facendo è un soln. Altri potrebbero essere in qualche modo un wrapper di applicazioni che chiamerà alcuni file binari confronta utlitiy (come al di là del confronto, o anche un comando di Windows fc / b ) e controlla il risultato di tale utility di confronto e prende la decisione voglio.

-AD

Un modo per eseguire è ridurre tutte le immagini a una dimensione fissa e memorizzarle come anteprima. Quindi il confronto delle immagini confronterebbe immagini di dimensioni simili e ti darebbe la possibilità di essere un duplicato, utile se hai ritagliato (se non ritagliato pesantemente) o ridimensionato le immagini e vuoi trovare quei "duplicati".

Nella specifica XMP ci sono ID documento e ID versione che dovrebbero identificare in modo univoco la versione dell'immagine.

Il problema con questi (e con qualsiasi altro metodo di identificazione basato sui metadati) è che potrebbe non essere rispettato da alcune applicazioni che possono cambiare il contenuto del jpeg aggiornando i metadati di conseguenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top