web-dev-qa-db-fra.com

Comment Shotwell détecte-t-il les doublons?

Impossible de trouver des réponses à cela avec Google. Lorsque vous importez deux fois le même dossier de photos, Shotwell ignorera les photos en double. Mais comment détecte-t-il les doublons? Si j'importe deux dossiers d'images différents, dont certains portent le même nom pour une raison quelconque, Shotwell va-t-il supposer qu'il s'agit de doublons? Ou bien est-ce que la taille du fichier est également prise en compte, ce qui rend peu probable les faux doublons? Ou est-ce que cela brouille les images, rendant les faux doublons presque impossibles?

4
Hubro

Je crois que c'est plus avancé que de simples noms, je viens d'essayer. En fait, il semblerait qu'il ne se base pas du tout sur le nom.

Alors je viens de créer ce qui suit:

TestDir
  │
  ├─ blue.png #Blue A4 page
  ├─ blue2.png #Blue A4 page
  ├─ green.png #Blue A4 page
  ├─ red.png #Yellow A4 page
  ├─ yellow.png #Yellow A4 page
  ├─ yellow2.png #Yellow A4 page
  └ TestDir2
       │
       ├─ yellow.png #Blue A4 page
       └─ yellow.png #Blue A4 page

Importé le dossier TestDir (qui importe également à partir de tous les sous-répertoires). C'était l'avis:

6 duplicate photos were not imported:
/home/tim/Pictures/Test/red.png
/home/tim/Pictures/Test/yellow2.png
/home/tim/Pictures/Test/green.png
/home/tim/Pictures/Test/blue2.png
(and 2 more)

2 photos successfully imported.

Les deux fichiers importés étaient blue.png et yellow.png. C'est parce qu'ils ont été créés en premier (le plus ancien est choisi s'il y a des doublons).

Cela a été confirmé par le test suivant:

TestDir
  │
  ├─ blue.png #Blue A4 page
  ├─ blue2.png #Blue A4 page
  ├─ green.png #Blue A4 page (sorry OCD people)
  ├─ red.png #Yellow A4 page (sorry OCD people)
  ├─ yellow.png #Yellow A4 page
  ├─ yellow2.png #Yellow A4 page
  ├─ pink2.png #Pink A4 page 
  ├─ pink.png #Pink A4 page
  └ TestDir2
       │
       ├─ yellow.png #Blue A4 page
       └─ yellow.png #Blue A4 page

pink2.png et pink.png ont été créés. pink2.png a été créé en premier, puis pink.png

8 duplicate photos were not imported:
/home/tim/Pictures/Test/red.png
/home/tim/Pictures/Test/yellow2.png
/home/tim/Pictures/Test/green.png
/home/tim/Pictures/Test/blue2.png
(and 4 more)

3 photos successfully imported.

Ceux qui ont été importés ont été blue.png, yellow.png et pink2.png.

À cause de cela, je suppose qu'il utilise un algorithme de hachage.

Il est suffisamment précis pour que le passage d'un pixel de couleur du vert au jaune sur une page A4 ne la détecte pas comme un doublon. Assez précis alors!

En fait, je viens de trouver ce post ici :

Une fois ce bogue corrigé, Shotwell utilisera (exclusivement) un hachage MD5 complet du fichier pour effectuer la vérification des doublons, ce qui est un moyen extrêmement précis de rechercher des doublons.

En fait, dans le code source , à la ligne 732, voici ceci: Kudos @ Jeremie Miserez

imported_full_md5_table.has_key(prepared_file.full_md5)) {

On dirait qu'il utilise un hash MD5!

Formes pour l'arborescence de répertoires d'ici

11
Tim