Sommes de contrôle différentes pour fichiers identiques.

Fermé
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - 3 nov. 2013 à 12:18
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 3 nov. 2013 à 16:52
Salut,

Lorsque, sous Ubuntu, je vérifier la somme md5 (ou sha1) d'une photo sur une carte SD et de la même image transférée sur le PC, mais avec renommage, elles diffèrent pour les fichiers JPG mais sont identiques pour les fichiers RAW.

Ex. : DSC_0001.JPG sur la carte SD et 131103_DSC0001.jpg sur le PC <= sommes de contrôles différentes.
Mais DSC_0001.RAW sur la carte SD et 131103_DSC0001.raw sur le PC <= sommes de contrôles identiques.

Si quelqu'un sait pourquoi, ça m'aiderai beaucoup parce que je suis entrain de me faire un petit script pour vérifier si le transfert de touts les images de la carte SD s'est bien effectué avant de la formater.

Merci.

4 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 nov. 2013 à 12:34
hello
comment sont transférés les fichiers ? avec des commandes genre copy ou dd ?
des différences reportées par identify -verbose fichier.jpg ?
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
Modifié par jipicy le 3/11/2013 à 13:24
Salut,

Je n'ai pas précisé, c'est vrai (je suis sous Lucid au passage) :
les photos sont transférées avec un soft appelé Rapid Photo Downloader qui permet justement de les renommer au passage selon certains paramètres (dates de prise de vue, étiquette pour créer des dossiers par ex.)
Après, derrière, je ne sais pas sur quoi il se base pour effectuer le transfert.

https://damonlynch.net/rapid/
http://doc.ubuntu-fr.org/rapid-photo-downloader



Oui il y a des différences entre deux fichiers avec lesquels j'essaie la commande identify -verbose fichier.jpg :

Ligne 1 : le chemin d'accès passé à la commande identify change entre les deux fichiers. Forcément.
Lignes 60-61 :
date create : ne sont pas identiques (plus récents sur le fichier présent sur le PC)
et date modify : l'heure du fichier PC est shiftée de -1 par rapport au fichier de la carte SD.

Ligne 77 : exif:ExifOffset : la valeur numérique diffère (340 vs 348)
Ligne 90 : exif:GPSInfo: 43120 vs exif:GPSInfo: 12338

Etc. il y a deux trois autres valeurs numériques qui changent de l'un à l'autre sur certains paramètres exif.

Et pour finir :
Ligne 126 : Profile-exif: 65532 bytes vs Profile-exif: 21036 bytes
Ligne 130 : Filesize: 1.798MB vs Filesize: 1.753MB
Lignes 132,134 :
Pixels per second: 28.22M
User time: 0.560u
Elapsed time: 0:01.570
vs
Pixels per second: 29.25M
User time: 0.540u
Elapsed time: 0:01.550


Merci.

0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
Modifié par Swiss Knight le 3/11/2013 à 14:16
ps : il y a dans le résultat de la commande identify, une ligne "signature", elle veut dire quoi (si quelqu'un sait...) ?
J'ai vérifié ; il ne s'agit apparemment pas de la somme md5 ni sha.
Existe-t-il une commande pour ne sortir que cette ligne signature ?

EDIT : alors j'ai trouvé la réponse à cette question ici :
https://imagemagick.org/index.php
%#   CALCULATED: 'signature' hash of image values
donc avec un identify -format "%#" image.jpg on sort uniquement la signature.
Je ne sais pas si c'est mieux d'utiliser ça, ou une somme shaX pour vérifier si deux images sont identiques ou non.
Apparemment les sommes de contrôles sont plus sensibles puisqu'elles changent sur les fichiers jpg (et non les raw) après un simple transfert (j'ai encore vérifié : un cp source/image.jpg Desktop/imagecopiee.jpg change déjà ces sommes de contrôle) tandis que les signatures ne changent pas.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 3/11/2013 à 14:24
les dates sont différentes, c'est normal mais elles ne sont pas dans le fichier.
il suffit que le soft de copie change 1 bit et les signatures seront différentes.
$ identify -verbose fichier.jpg | awk '/signa/ {print $2}'
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
3 nov. 2013 à 16:10
Okay, mais la somme md5 ou sha est plus sensible puisqu'un changement dans les méta données change cette somme de calcul, quand bien même l'image est strictement identique.
Mais la signature ne change pas elle. Même après ces quelques petits changements lors du transfert. Je vais donc me basé sur cette valeur pour vérifier si mes images ont bien été copiées sur le disque.

J'ai juste un petit problème à résoudre :
les commandes identify -verbose fichier.jpg | awk '/signa/ {print $2}'
ou identify -format "%#" fichier.jpg
me donnent exactement le même résultat : la valeur de la signature de fichier.jpg.
C'est très bien.

Mais je souhaite faire en sorte que cette valeur apparaisse dans la seconde colonne d'un fichier, et que, dans la 1ère on trouve le nom du fichier. Comme ça, visuellement, lorsque j'ouvre le fichier, je peux être sûr que telle signature correspond à tel fichier.

Pour l'instant j'ai ce petit bout de code :
pathtocheck="/media/sdcard/pictures"
for file in $(find "${pathtocheck}" -iname *.jpg)
do echo "${file}" >> filenamecheck.txt
identify -format "%#" "${file}" >> filecheck.txt
done
wait
cat filenamecheck.txt filecheck.txt > out.txt

Mais cat ne permet pas la concaténation horizontale.
Et je ne sais pas si on peut faire un truc du genre :
for file in $(find "${pathtocheck}" -iname *.jpg)
do echo "${file}" >> filenamecheck.txt & identify -format "%#" "${file}" >> filecheck.txt
done

Du moins, ça ne fonctionne en tout cas pas comme ça ; il y a le nom du fichier sur une ligne et sa signature sur la suivante.

Je devrais trouver comment résoudre ça sans trop de difficulté.

Mais ensuite il faudra que je modifie ce bout de script pour qu'il vérifie parmi les images présentes sur le PC, UNIQUEMENT celles qui portent le même nom que ceux qui existent sur la carte SD. Pour éviter de passer en revue les XXXX photos présentent sur l'ordi qui auraient été uploadées depuis d'autres cartes par exemple.


Affaire à suivre.

0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
3 nov. 2013 à 16:52
Salut,

for file in $(find "${pathtocheck}" -iname *.jpg)
do echo "${file}" : $(identify -format '%#' ${file})" >> filecheck.txt
done
0