Comparer 2 photos pixel par pixel

marmotte18

XLDnaute Impliqué
Bonjour,

Est-il possible de comparer 2 photos jpg, pixel par pixel et d'affirmer avec certitude qu'elles sont parfaitement identiques ou non ?

Merci par avance
 

YANN-56

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Bonjour Marmotte,

Heureux de te voir présent.

Je suis dans le même cas puisque ma fille envoi à son frère des photos que je lui ai
envoyées et ce que dernier me les retourne ne sachant pas qu'elles viennent de moi.

Je me trouve donc avec une foultitude de doublons.
Pour l'instant, je n'ai pas trouvé autre solution que de nettoyer manuellement.

Amicalement, et à suivre je l'espère.

Yann
 

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Re, bonjour marmotte,

Michel a parfaitement raison quand il parle des tailles des fichiers : si elles sont différentes, les photos ne peuvent pas être identiques.

J'ai donc ajouté un test avec FileLen qui permet d'éviter l'ouverture du 2ème fichier.

Le temps de calcul est considérablement réduit :

- 100 photos sans doublon => 99 ouverture/enregistrement/fermeture => 1 mn 25 s

- 1000 photos sans doublon => 999 ouverture/enregistrement/fermeture => 14 mn 20 s

Prenez la version (2) jointe.

A+
 

Pièces jointes

  • Recherche des photos doublons(2).xls
    39 KB · Affichages: 42

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Re,

Pour peaufiner, j'ai ajouté une macro permettant de supprimer les doublons en colonne C :

Code:
Private Sub CommandButton2_Click() 'Suppression doublons
Dim p$, cel As Range
p = ThisWorkbook.Path & "\"
On Error Resume Next
If MsgBox("Supprimer les doublons ?", 4) = 7 Then Exit Sub
For Each cel In Range([C6], [C65536].End(xlUp))
  Kill p & cel
Next
End Sub

Version (3).

Edit pour Yann : Michel a parlé de la taille au post #8, toi au post #10, j'ai donc voulu rendre à César...

A+
 

Pièces jointes

  • Recherche des photos doublons(3).xls
    42 KB · Affichages: 29
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Re à tous

Job: Je viens de tester sur la version 3 en copiant 4 images sur mon bureau dans un dossier Test dont une image en copie et il me l'a bien trouvé.

Bon c'est sur qu'avec 10 000 images, cela risque d'être plus long .;)

Merci et bone soirée à tous :).
 

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Bonjour le fil, le forum,

Bon c'est sur qu'avec 10 000 images, cela risque d'être plus long .;)

Bon, j'ai encore amélioré la macro (variable ouv).

Le 1er fichier n'est maintenant ouvert que si les 2 fichiers ont la même taille.

Même avec 10000 photos ça ira vite s'il y a peu de doublons.

Version (4).

A+
 

Pièces jointes

  • Recherche des photos doublons(4).xls
    42.5 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Re,

Même avec 10000 photos ça ira vite s'il y a peu de doublons.

C'est relatif, car le nombre de combinaisons de 2 photos, donc la durée, est sensiblement proportionnel au carré du nombre de photos.

J'ai testé la version (4) avec 1000 photos.

Il n'y avait pas de doublons (mais 2 fois les couples de fichiers avaient la même taille...), la durée du calcul a été de 88 secondes.

Avec 10000 photos il faudra près de 100 fois plus de temps, soit 2h 27mn :)

A+
 

sigismond

XLDnaute Occasionnel
Re : Comparer 2 photos pixel par pixel

Bonjour à tous, marmotte, chris, risleure, job75, yann56, mj13


Je suis votre fil depuis le début avec intérêt.

Le temps me semble venu pour rappeler que le VBA étant un langage interprété, il souffre cruellement de performance dans des situations de calcul intensif (même simple) par rapport à un langage compilé.

Certes on peut limiter cet écart par une optimisation savante, et les processeurs actuels hyperprotéinés peuvent camoufler le phénomène.

Un exemple perso : J'ai réalisé un programme d'optimisation de planning multi-contraintes avec VBA Excel.
Une fois les contraintes positionnées, un calcul d'optimisation prenait environ 2 minutes.
Comme c'était trop pour le client (il voulait pouvoir décider entre une vingtaine de solutions concurrentes) j'ai recommencé en Delphi, algorithme identique, le calcul d'optimisation ne prenait plus que 2 secondes...

Comme cela a déjà été signalé il existe de nombreux logiciels libres qui ont ce même objectif de traquer les doublons.

Je suis bien placé pour savoir que s'entrainer à programmer une fonctionnalité qu'on va utiliser quotidiennement est un exercice à la fois riche et motivant. C'est pourquoi je vous propose une piste : plutôt que de comparer les fichiers bit à bit pourquoi ne pas comparer leur CRC ?

Le calcul s'appuyant sur l'API est rapide et en croisant MD5, SHA1 et SFV la probabilité que le fichier, à taille identique, soit différent doit être inférieur à 10E-9.

Bon WE à tous.

Sigismond
 

kiki29

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Salut,petite digressiuon , j'abonde dans le même sens que Sisgismond pour avoir eu ce type de probleme de doublons n'ayant pas le même nom mais le même contenu , et cela fait plaisir de parler d'un outil qui malheureusement tend à disparaitre Delphi : exemple de CRC 32 sur efg's Mathematics Projects -- CRC Calculator ainsi que
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Salut sigismond et kiki29,

Bien d'accord avec vous, mais ici on est sur un forum Excel pour résoudre des problèmes Excel ;)

Pour ceci :

(...) plutôt que de comparer les fichiers bit à bit pourquoi ne pas comparer leur CRC ?

Si vous avez compris la macro, vous avez vu que la comparaison des pixels n'a lieu qu'entre 2 fichiers de tailles identiques, ce qui normalement est bien sûr très rare : sur 1000 photos que j'ai testées, donc 499500 combinaisons, cela ne s'est produit que 2 fois...

Sur mon ordi l'exécution de la fonction FileLen prend 1,603E-04 s.

Avec 1000 photos, cette fonction est exécutée 999 + 499500 = 500499 fois, ce qui prend donc 80 s sur un total de 88 s.

C'est donc FileLen qui prend l'essentiel du temps de calcul de la macro quand il n'y a pas de doublons.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Re,

Bien vu le post précédent, on avance :)

C'est donc FileLen qui prend l'essentiel du temps de calcul de la macro quand il n'y a pas de doublons.

J'ai donc en 1ère partie de macro calculé la taille de chaque fichier qui est stockée dans le tableau L.

Pour 1000 photos, FileLen n'est exécutée que 1000 fois, et la durée totale du calcul est maintenant de 3,4 s :)

Pour 10000 photos la durée ne sera plus que 3,4 x 100 = 5 mn 40 s.

C'est honorable non ?

Version (5).

A+
 

Pièces jointes

  • Recherche des photos doublons(5).xls
    43.5 KB · Affichages: 31

sigismond

XLDnaute Occasionnel
Re : Comparer 2 photos pixel par pixel

Re,


Job 75 a dit :
Sur mon ordi l'exécution de la fonction FileLen prend 1,603E-04 s.


Rassure toi, job75, ça doit prendre 100 fois moins de temps en réalité (si Windows et ton antivirus ne mobilisaient pas toute la capacité de calcul de ton processeur).

Quand je commençais mon post par :

Je suis votre fil depuis le début avec intérêt.

Je ne faisais pas du tout dans la dérision.

Si je suis intervenu c'était simplement pour mettre les pendules à l'heure.

  • J'approuve parfaitement le fait qu'on parte sur un projet (dans un but pédagogique) en utilisant des outils pas forcément les plus adaptés.
  • Je comprends aussi qu'on utilise, pour son usage personnel quotidien, les outils qu'on s'est soi-même ainsi forgé (je le fais tout le temps, par respect pour l'énergie que j'y ai dépensé).
  • J'estime aussi qu'il faut en être conscient et garder les pieds sur terre.


Ceci étant dit, je ne veux donner de leçon à personne, je suis venu sur ce forum consacré à Excel en connaissance de cause, de mon plein gré et je m'y éclate régulièrement. Il est rarissime que je n'y apprenne pas quelque chose et c'est pour ça que :


Je continuerai à suivre votre fil avec grand intérêt.

Sigismond

PS. : Merci à toi kiki29 pour tes liens sur un site exceptionnel, j'ai tout particulièrement apprécié celui-ci :

:D efg's Pepsi Challenge :D

.

.
 

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Bonjour le fil, le forum,

Rassure toi, job75, ça doit prendre 100 fois moins de temps en réalité (si Windows et ton antivirus ne mobilisaient pas toute la capacité de calcul de ton processeur).

Ce qui me rassure c'est surtout d'avoir, dans la version (5), fait en sorte que la fonction FileLen soit calculée peu de fois...

Et notre marmotte, elle est en hibernation prolongée :confused:

A-t-elle testé les versions proposées, et qu'est-ce que ça donne ?

Mais je sais que sur ce forum on se décarcasse souvent pour des prunes :mad:

A+
 

job75

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Bonjour le fil, le forum,

Les versions (1) à (5) amélioraient la durée du calcul pour des fichiers de tailles différentes.

Cette version (6) l'améliore pour des fichiers de mêmes tailles.

Ce ne sont plus les cellules de fichier1.xls et fichier2.xls qui sont comparées mais les tableaux P1 et P2.

La durée du calcul pour une paire de doublons passe de 3,5 s sur la version (5) à 1,9 s sur la version (6).

Edit : j'ai laissé le Timer, mis en commentaires.

A+
 

Pièces jointes

  • Recherche des photos doublons(6).xls
    45.5 KB · Affichages: 44
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Comparer 2 photos pixel par pixel

Bonjour à tous

Job: Merci pour cette 6 ème mouture :eek:. avec 412 images de petites tailles (de 2 à 100 ko) pour être plus sur d'avoir des doublons, il me trouve 11 doublons en 15 secondes.

Je pense que tu peux t'arrêter la ;).

Bonne journée :).

PS: Pour Sigismond et Kiki, merci pour vos interventions et les liens très intéressant.
 

Discussions similaires

Réponses
12
Affichages
486

Statistiques des forums

Discussions
312 398
Messages
2 088 066
Membres
103 711
dernier inscrit
amin Saadaoui