md5 sur images - trouver des images identiques
Le
yves
Bonjour,
suite au questionnement d'un ami qui souhaitait trouver les images
dupliquées sur son disque, je me suis lancé dans l'écriture d'un petit
script python pour comparer les empreintes numériques md5 des images.
Le problème, c'est qu'en faisant des tests, il y a des images
différentes (fichier .jpg) qui ont la MEME EMPREINTE NUMERIQUE:
je pense faire une erreur quelque part: quelqu'un peut-il me dire
laquelle ?
Les images (elles sont très similaires, produites à partir de copies
d'écran dans le presse-papiers, mais néammoins différentes (même pas
la même taille).
14.jpg:
http://cjoint.com/?eioUUiwHLR
24.jpg
http://cjoint.com/?eioVUja5Zb
Mon script:
******************
import md5
import os
img_a = '14.jpg'
img_b = '24.jpg'
fa = open(img_a)
fra = fa.read()
a = md5.new(fra)
print a.digest()
print os.stat(img_a)
fb = open(img_b)
frb = fb.read()
b = md5.new(frb)
print b.digest()
print os.stat(img_b)
print a.digest() == b.digest()
*******************************
Le resultat du script:
<N
æAà·Á
(33206, 0L, 0, 0, 0, 0, 187976L, 1176036410, 1176034877, 1176034877)
<N
æAà·Á
(33206, 0L, 0, 0, 0, 0, 188290L, 1176036471, 1176034885, 1176034885)
True
Pour résoudre le problème posé par mon ami, il a fdupes:
http://en.wikipedia.org/wiki/Fdupes
Mais cette histoire de md5 me titille.
Des idées ?
--
Yves
suite au questionnement d'un ami qui souhaitait trouver les images
dupliquées sur son disque, je me suis lancé dans l'écriture d'un petit
script python pour comparer les empreintes numériques md5 des images.
Le problème, c'est qu'en faisant des tests, il y a des images
différentes (fichier .jpg) qui ont la MEME EMPREINTE NUMERIQUE:
je pense faire une erreur quelque part: quelqu'un peut-il me dire
laquelle ?
Les images (elles sont très similaires, produites à partir de copies
d'écran dans le presse-papiers, mais néammoins différentes (même pas
la même taille).
14.jpg:
http://cjoint.com/?eioUUiwHLR
24.jpg
http://cjoint.com/?eioVUja5Zb
Mon script:
******************
import md5
import os
img_a = '14.jpg'
img_b = '24.jpg'
fa = open(img_a)
fra = fa.read()
a = md5.new(fra)
print a.digest()
print os.stat(img_a)
fb = open(img_b)
frb = fb.read()
b = md5.new(frb)
print b.digest()
print os.stat(img_b)
print a.digest() == b.digest()
*******************************
Le resultat du script:
<N
æAà·Á
(33206, 0L, 0, 0, 0, 0, 187976L, 1176036410, 1176034877, 1176034877)
<N
æAà·Á
(33206, 0L, 0, 0, 0, 0, 188290L, 1176036471, 1176034885, 1176034885)
True
Pour résoudre le problème posé par mon ami, il a fdupes:
http://en.wikipedia.org/wiki/Fdupes
Mais cette histoire de md5 me titille.
Des idées ?
--
Yves

Poser une question


C'est bien d'ouvrir un nouveau md5, mais il faut l'alimenter avec le
contenu du fichier.
Un exemple :
import md5
BLOCKSIZE = 1024*1024
fichier='c:\velo.jpg'
f = open(fichier, "rb")
m = md5.new()
while 1:
block = f.read(BLOCKSIZE)
if not block:
break
m.update(block)
f.close()
print 'Fichier :'+fichier
#print 'Md5 ascii (16 car.):'+m.digest()
print 'Md5 hexa (32 car.):'+m.hexdigest()
--
@-salutations
Michel Claveau