#1 Le 12/04/2015, à 14:25
- O'Bit
Script de tri automatique de photos par couleurs avec imageMagick
Bonjour je viens vers vous car je bloque un peu sur la rédaction d'un script shell (pourtant basique)
Voila je reviens de vacances en Islande avec trois autres potes, tous armés d'appareils photos, autant vous dire que la quantité de donnée à traité est énorme. j'avais envie de me faire un petit programme PureData ou autre pour faire un diaporama interactif qui change de la soirée diapo de vacance mais pour cela je cherche à trier mes photos de façons chromatique.
Ma première envie est de les trier de la plus claire à la plus sombre (de jour dans la neige - de nuits avec les étoiles).
Me penchant sur la question je découvre ImageMagick super top avec la commande
O-bit:~$ convert ~/Photos/Islande/IMG_3009.JPG -gravity center -crop 70x70%+0+0 -scale 1x1\! -depth 8 txt:-
et il me répond
# ImageMagick pixel enumeration: 1,1,255,rgb
0,0: (153,156,159) #999C9F rgb(153,156,159)
code trouvé ici : http://www.imagemagick.org/Usage/compare/#type_general
en utilisant cut je peux récupérer et additionner les trois valeurs RGB et organiser ainsi jusqu’à 765photos (3*255) de la plus claire à la plus sombre.
Je me rédige un début de script shell :
#!/bin/bash
IMAGE=$('~/Photos/Islande/IMG_3009.JPG')
RED=$(convert "$IMAGE" -gravity center -crop 70x70%+0+0 -scale 1x1\! -depth 8 txt:- | cut -d" " -f6| cut -b5-7)
GREEN=$(convert "$IMAGE" -gravity center -crop 70x70%+0+0 -scale 1x1\! -depth 8 txt:- | cut -d" " -f6| cut -b9-11)
BLUE=$(convert "$IMAGE" -gravity center -crop 70x70%+0+0 -scale 1x1\! -depth 8 txt:- | cut -d" " -f6| cut -b13-15)
mv "$IMAGE" "~/Photos/Islande/Rename/$(echo "($RED+$GREEN+$BLUE)/3"| bc).jpg"
Je nomme mon fichier luminosite.sh et le rend exécutable, mais celui ci me répond
luminosite.sh: ligne 3: ~/Photos/Islande/IMG_3009.JPG: Permission non accordée
et pourtant toute les permission et shakra me semblent ouvertes...
j'ai sûrement une mauvaise syntaxe et ne trouve pas de tuto qui arrivent à m'éclairer.
Si vous trouvez ce qui ne vas pas je vous en serez reconnaissant !!
PS: je me doute bien que je vais ensuite rencontrer des problème de doublons dans les noms et que la syntaxe pour traiter l'ensemble d'un dossier sera différente que pour une photo (sûrement une boucle qui s'incrémente ou un truc comme ça) mais si déja le test sur une photo ne marche pas alors sur plusieurs centaine ....
Hors ligne
#2 Le 12/04/2015, à 17:23
- pingouinux
Re : Script de tri automatique de photos par couleurs avec imageMagick
Bonjour,
C'est
IMAGE=~/Photos/Islande/IMG_3009.JPG
Hors ligne
#3 Le 17/04/2015, à 15:42
- O'Bit
Re : Script de tri automatique de photos par couleurs avec imageMagick
Merci pingouinux pour l'info,
depuis j'ai essayé d'élaborer plus en avant mon script
actuellement il donne cela :
#!/bin/sh
echo "_______________________"
echo "Debut"
for file in $(find /dossier/ou/son les/Photos/ -maxdepth 1 -type f -name '*.jpg')
do
echo "fichier : $file"
convert -scale 4x4 -format %c -depth 8 $file histogram:info:-| sed -e 's/(//g' -e 's/,/ /g' -e 's/)//g' temp.txt |cut -d"#" -f-1 |cut -d":" -f2 > /dossier/ou/son les/Photos/temp.txt
for ((ligne=1; ligne<13; ligne++))
do
LIGNECOULEUR=$(sed -n ${ligne}p temp.txt)
Rouge=$(echo ${LIGNECOULEUR[0]})
Vert=$(echo ${LIGNECOULEUR[1]})
Bleu=$(echo ${LIGNECOULEUR[2]})
echo "R: $Rouge V: $Vert B: $Bleu"
done
done
echo "travail fini !"
echo "______________________________________"
en gros l'option histogram de convert me donne 12 série de trois valeurs (rvb) ainsi que d'autres infos. Mon but est de nettoyer ce résultat pour ne garder que trois valeurs sous cette forme : 255 255 255 , d'ou les série de cut et sed, cela ne posait pas de problème. j'enregistre ensuite dans un fichier txt ces valeurs pour dans une boucle y accéder ligne par ligne et tenter de dispatcher sur trois variable Rouge Vert et Bleu. Mon gros problème est que le fichier texte est bien édité avec les valeurs comme je les veux (parfois des espaces viennent se rajouter selon les photos mais j'ajusterais ça après) mais quand je refais appel au fichier tmp.txt ensuite il me ressort l'intégralité des infos ignorant superbement tout mes filtres ...
Je vous avoue être dépassé et ne trouve pas vraiment d'info qui puisse m'éclairer...
si vous avez des idées
Hors ligne
#4 Le 17/04/2015, à 17:22
- pingouinux
Re : Script de tri automatique de photos par couleurs avec imageMagick
convert -scale 4x4 -format %c -depth 8 $file histogram:info:-| sed -e 's/(//g' -e 's/,/ /g' -e 's/)//g' temp.txt |cut -d"#" -f-1 |cut -d":" -f2 > /dossier/ou/son les/Photos/temp.txt
Ton fichier temp.txt apparaît 2 fois de manière incohérente.
Voici une suggestion en bash
#!/bin/bash
echo "_______________________"
echo "Debut"
while read file
do
echo "fichier : $file"
while read Rouge Vert Bleu
do
echo "R: $Rouge V: $Vert B: $Bleu"
done < <(convert -scale 4x4 -format %c -depth 8 "$file" histogram:info:-| awk -F'[,()]' '!/^ *$/{print $2" "$3" "$4}')
done < <(find "/dossier_ou_sont_les_Photos/" -maxdepth 1 -type f -name '*.jpg')
echo "travail fini !"
echo "______________________________________"
Édité : Un peu plus simple
#!/bin/bash
echo "_______________________"
echo "Debut"
while read file
do
echo "fichier : $file"
while IFS='(),' read bidon Rouge Vert Bleu bidon
do
[ "$Rouge" ] || continue
echo "R: $Rouge V: $Vert B: $Bleu"
done < <(convert -scale 4x4 -format %c -depth 8 "$file" histogram:info:-)
done < <(find "/dossier_ou_sont_les_Photos/" -maxdepth 1 -type f -name '*.jpg')
echo "travail fini !"
echo "______________________________________"
Dernière modification par pingouinux (Le 18/04/2015, à 06:26)
Hors ligne