#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