Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/07/2025, à 08:31

ptilou007

Compare des images et supprime les doublons ?

Bonjour,

J'ai ce script, ou je rentre le bon chemin à la 2 ou 3 ligne :


#!/bin/bash

folder="chemin/vers/votre/dossier" # Modifie ce chemin
threshold=0 # Nombre de pixels tolérés pour considérer deux images comme identiques

# Récupère toutes les images du dossier, y compris avec espaces dans les noms
IFS=$'\n' read -d '' -r -a images < <(find "$folder" -type f -iname "*.jpg" -o -iname "*.png" -o -iname "*.jpeg" && printf '\0')

# Vérifie si des fichiers ont été trouvés
if [ ${#images[@]} -eq 0 ]; then
echo "⚠️ Aucun fichier image trouvé dans le dossier $folder"
exit 1
fi

# Compare les images
for (( i=0; i<${#images[@]}; i++ )); do
for (( j=i+1; j<${#images[@]}; j++ )); do
img1="${images[i]}"
img2="${images[j]}"

# Vérifie que les deux fichiers existent toujours
[ ! -f "$img1" ] && continue
[ ! -f "$img2" ] && continue

# Compare les images avec ImageMagick
result=$(compare -metric AE "$img1" "$img2" null: 2>&1)

if [ "$result" -le "$threshold" ]; then
res1=$(identify -format "%[fx:w*h]" "$img1")
res2=$(identify -format "%[fx:w*h]" "$img2")

if [ "$res1" -ge "$res2" ]; then
echo "?️ Doublon détecté : $img2 supprimé (résolution plus faible)"
rm "$img2"
else
echo "?️ Doublon détecté : $img1 supprimé (résolution plus faible)"
rm "$img1"
break # Arrête les comparaisons avec img1 si elle est supprimée
fi
fi
done
done

Cela me retourne qu'il n'y a pas de fichier, alors qu'il y en a, je me demande ou est l'erreur et si elle vient pas de l'OS ?

Merci

Ptilou

Hors ligne

#2 Le 20/07/2025, à 17:36

Watael

Re : Compare des images et supprime les doublons ?

salut,

cette création du tableau images est une mauvaise pratique.
procède ainsi :

shopt -s nulllglob globstar
images=( "$folder"/**/*.{png,jp{,e}g} )

(( ${#images[*]} )) || { >&2 echo "pas de fichiers"; exit;}

EDIT: quand je compare deux images différentes, j'obtiens ceci 1.84608e+06 (1), et en comparant une même image, j'obtiens 0 (0).
ce ne sont pas des nombres, et 1.84608e+06 ne sera pas compris par le shell comme un entier.

donc :

if compare -metric AE "$img1" "$img2" null: &>/dev/null; then echo similaire; else echo différente; fi

Dernière modification par Watael (Hier à 17:04)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Hier à 14:33

Hizoka

Re : Compare des images et supprime les doublons ?

Salut, et pourquoi ne pas utiliser la commande fdupes ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Hier à 17:38

ptilou007

Re : Compare des images et supprime les doublons ?

bonjour,

la question est es-ce que le script fonctionne ?

pour la pratique j’ai demande des cours et je suppose que l’ecole du libre n’a pas trouver d’enseignent.
(mais je vais l’essayer)

pour le choix de l’autre commande tu pars sur une idee de zero pixel different, mais on peut faire varier et je pense que imageMagick est mieux ?
(fdupes)

Chez moi c’est find qui ne fonctionne pas !

ptilou

Dernière modification par ptilou007 (Hier à 17:41)

Hors ligne

#5 Hier à 18:01

Watael

Re : Compare des images et supprime les doublons ?

Chez moi c’est find qui ne fonctionne pas !

j'ai dit ce que je pense de cette façon d'utiliser find pour construire un tableau.

la question est es-ce que le script fonctionne ?

ce n'est pas toi qui l'a écrit ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne