Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.04 LTS
Ubuntu-fr propose des clés USB de Ubuntu et toutes ses « saveurs » ainsi qu'un magnifique t-shirt pour cette toute nouvelle version d'Ubuntu !

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 11/05/2018, à 21:12

Tamarou

Détecter le sens de prise de vue d'une photo

Bonjour,
Sur la photo ci-dessous, le rocher qui semble couché devrait pointer vers le ciel.
1526065464.jpg

Je reçois assez souvent des lots de photos que je commence par traiter avec un script bash. Il s'agit de renommer et réduire les photos. Cela fonctionne bien.
Mais il arrive aussi que des photos soient prises en orientation verticale et que je les reçoive en orientation horizontale comme l'exemple du dessus.

Je suis à la recherche qu'un critère, peut-être dans les données exif, qui me permettrait de déterminer si je dois aussi faire pivoter la photo ou si ce n'est pas utile. J'ai tenté avec les dimensions hauteur et largeur mais ce  n'est pas distinctif.
D'autre part, l'orientation de prise de vue n'est pas gérée par tous les appareils photos.


Utilisateur d'Archlinux/Gnome-shell, Xubuntu.

Hors ligne

#2 Le 12/05/2018, à 05:27

moko138

Re : Détecter le sens de prise de vue d'une photo

À condition que les données exif n'aient pas été réduites
en amont (ni par ton script), tu y trouveras en effet le champ "Orientation".

Ex, 2 photos prises le même jour avec le même appareil et la même carte :
image au format paysage :

exif mon-paysage.JPG | grep Orientation
Orientation         |En haut à gauche

image au format portrait :

exif mon-portrait.JPG | grep Orientation
Orientation         |Left-bottom

(j'ignore pourquoi ce changement de langue).
Left-bottom est à comprendre comme "Mettre la gauche en bas".

Ce qui implique une variante, quand l'appareil est pivoté dans l'autre sens.
Cette variante devrait logiquement s'appeler
     soit Left-top (ou Left-up),
     soit Right-bottom ("Mettre la droite en bas").
Mais... en explorant mes répertoires à l'aide de

exif *.JPG | grep Orientation | grep -Ev "Left|En haut à gauche"

je finis par trouver un :

Orientation         |Right-top

qui est absurde lol   Mais ça fonctionne.



Si tu as installé le paquet imagemagick,
l'option -auto-orient de convert ou de mogrify exploite cette "Orientation" des exifs.
Tu peux l'utiliser sur ce modèle :

convert image.JPG -auto-orient image_orientee.jpg

soit au coup par coup, soit intégrée au début de ton script,
à condition, encore une fois, de l'appliquer avant toute manip susceptible de réduire les exifs.


Si les exifs manquent,
tu dois agir manuellement, et en ce cas :

convert image.JPG -rotate -90 image_orientee.jpg

ou

convert image.JPG -rotate +90 image_orientee.jpg

permettent la correction sans lancer d'appli gourmande.  smile

Dernière modification par moko138 (Le 12/05/2018, à 06:28)


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#3 Le 12/05/2018, à 05:40

Watael

Re : Détecter le sens de prise de vue d'une photo

le rocher qui semble couché devrait pointer vers le ciel

mais le rocher pointe bien vers le ciel !
par contre, le ciel devrait être en haut.

OK, je sors. wink


eval, c'est mal.

Hors ligne

#4 Le 12/05/2018, à 08:20

Tamarou

Re : Détecter le sens de prise de vue d'une photo

@Watael,
Là tu te surpasses, mais tu aurais pu incriminer la traînée d'avion. Tout le monde sait que les chemtrails peuvent renverser le ciel et plein d'autres choses encore.

@moko138,
Merci pour tes exemples avec tes images. J'ai testé quelques unes de celles que j'ai reçues, le résultat est très différent selon les expéditeurs. Les données exif sont parfois absentes ou peu nombreuses, ou parfois abondantes. Comme je ne peux pas agir sur les expéditeurs, je vais faire avec ce dont je dispose.

Sur cette base, je vais voir comment automatiser ce qui est possible, je continuerai à faire le reste à la main avec XnviewMP avec deux raccourcis clavier : un pour retourner et un pour enregistrer.

EDIT : La photo du rocher couché à une orientation "Horizontal" mais une hauteur supérieure à sa largeur. La commande avec auto-orient en option de convert n'a aucun effet sur elle. Mais si ces deux caractéristiques (orientation et rapport largeur/hauteur) sont présentes et si on a "Vertical" sur une qui n'a pas été couchée, on peut décider de la retourner avec rotate.. A voir si les autres seront aussi dans ce cas.
La suite à la réception du prochain lot de photos.

Dernière modification par Tamarou (Le 12/05/2018, à 14:31)


Utilisateur d'Archlinux/Gnome-shell, Xubuntu.

Hors ligne

#5 Le 12/05/2018, à 15:40

moko138

Re : Détecter le sens de prise de vue d'une photo

Tamarou a écrit :

EDIT : La photo du rocher couché à une orientation "Horizontal" mais une hauteur supérieure à sa largeur. La commande avec auto-orient en option de convert n'a aucun effet sur elle.

Bien sûr, puisque

bibi a écrit :

l'option -auto-orient de convert ou de mogrify exploite cette "Orientation" des exifs

et seulement cela.

Tamarou a écrit :

Mais si ces deux caractéristiques (orientation et rapport largeur/hauteur) sont présentes et si on a "Vertical" sur une qui n'a pas été couchée, on peut décider de la retourner avec rotate.

Stop ! Ou bien je n'ai rien compris, ou bien tu fais erreur. Car :
- si l'orientation est présente, tu appliques -auto-orient, Point. Pas -rotate !
- tu parles de "largeur/hauteur", mais c'est une interprétation humaine. Les scripts et applis, en l'absence du champ "Orientation", ne connaissent que x et y,  et ne savent pas lequel des deux est la hauteur, quel que soit le rapport x/y.


/!\  Une caractéristique intéressante du résultat de -auto-orient est que l'orientation correcte sera, je ne sais comment (*), conservée ultérieurement, même si on supprime les exifs ! Conservée et reconnue par tous les lecteurs (sauf les plus sommaires) sous tous les S.E.


(*) A moins que n'existe une convention stipulant que, en l'absence du champ "Orientation", x (la 1ère dimension dans les propriétés) doit être considéré comme la largeur, quel que soit x/y.


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#6 Le 12/05/2018, à 15:49

moko138

Re : Détecter le sens de prise de vue d'une photo

Si tu veux automatiser autant que possible le traitement par lot, voici comment je vois la chose :

à réception d'un lot d'images,
100)  tu les mets toutes, et seulement elles, dans le répertoire /rep0/.

120)  Tu appliques  -auto-orient  à tout le contenu de /rep0/, avec sortie dans /rep1/.
teste une commande de ce genre :

cd /chemin/vers/rep0 && mogrify -auto-orient -path /chemin/vers//rep1/  *.*  

(Le poids des images, je ne sais pourquoi, augmente de 5% environ.)
Watael ou un autre as du script saura corriger mes fautes de syntaxe  smile

140)  Sépare les images qui ont "Orientation" dans les exif et mets-les dans /rep2/ : celles-là ne poseront pas problème.

160)  Mets les autres dans /rep3/ : celles-là seules nécessiteront un filtrage manuel...
Et là, les difficultés commencent, puisque

200)  la rotation manuelle que tu appliqueras aux images de /rep3/ devra être reconnue par 99% des visionneuses, quel que soit le S.E.
  Heureusement, le sujet a été traité sur un blog au moins, que j'espère te retrouver d'ici deux jours.


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#7 Le 12/05/2018, à 16:28

grandtoubab

Re : Détecter le sens de prise de vue d'une photo

Salut
De quoi choper le mal de mer
https://www.impulseadventure.com/photo/ … ation.html
et quand ça devient flipant
https://www.impulseadventure.com/photo/ … t_flag.gif

Dernière modification par grandtoubab (Le 12/05/2018, à 16:28)


Linux tout seul sur HP Pavilion DV7 et Acer aspire T650
Debian 10 Buster XFCE/Gnome3 sur sda1
Canon MG3650 en wifi

Hors ligne

#8 Le 12/05/2018, à 16:35

Tamarou

Re : Détecter le sens de prise de vue d'une photo

Oui, c'est bien pire que mon ciel couché smile
J'avais vu cela dans mes recherches. C'est un peu à la suite de ces lectures que je vous demande s'il n'y a pas plus simple; d'autant plus que cette donnée n'est pas gérée par tous les appareils et chacun peut avoir sa logique pour décider qui est à l'endroit ou à l'envers, à droite ou à gauche.

Je verrai avec le prochain lot reçu. Je supprime tout après traitement donc je n'ai pas d'archive.

@moko138, merci pour tes recherches. Je te confirme qu'une fois que j'ai redressé une photo avec XnviewMP, elle conserve son orientation. Au pire je continuerai comme cela.

Dernière modification par Tamarou (Le 12/05/2018, à 16:36)


Utilisateur d'Archlinux/Gnome-shell, Xubuntu.

Hors ligne

#9 Le 12/05/2018, à 17:17

erresse

Re : Détecter le sens de prise de vue d'une photo

Tamarou a écrit :

Je te confirme qu'une fois que j'ai redressé une photo avec XnviewMP, elle conserve son orientation.

mon avis, c'est parce-que XnviewMP a réécrit le fichier modifié, je ne pense pas qu'il inscrive la valeur dans le champ exif orientation.
Les trois cas les plus courants (en tout les spécifications exif en prévoient 8) ont les codes :
- 1 Orientation normale, paysage, indiquée comme "Top-Left" ou "En haut à gauche"
- 8 Orientation à -90°, portrait, indiquée comme "Left-Bottom" (incliner la tête à droite pour voir la photo)
- 6 Orientation à +90°, portrait, indiquée comme "Right-Top" (incliner la tête à gauche pour voir la photo)
Apparemment, la valeur de ce champ est à interpréter en fonction du point de référence de l'image : le début des donnée est à la ligne 0 et colonne 0. Donc :
- lorsque le code est 1, le point de référence 0/0 correspond au début de l'image.
- lorsque le code est 8, le point de référence 0/0 correspond au coin à gauche et en bas de l'image.
- lorsque le code est 6, le point de référence 0/0 correspond au coin à droite et en haut de l'image.
C'est assez nébuleux à concevoir, mais en y réfléchissant intensément, ça finit par faire sens !!!
big_smile


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 13/05/2018, à 08:36

moko138

Re : Détecter le sens de prise de vue d'une photo

Tamarou a écrit :

une fois que j'ai redressé une photo avec XnviewMP, elle conserve son orientation. Au pire je continuerai comme cela.

Tamarou,
Peut-être ai-je, depuis le début, compris de travers ton objectif !

Merci de préciser
  si seul t'intéresse l'affichage chez toi,
  ou si (ce que je croyais initialement) tu veux que les photos que tu as traitées s'affichent correctement chez des tiers.


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#11 Le 13/05/2018, à 09:02

moko138

Re : Détecter le sens de prise de vue d'une photo

En #4, Tamarou a écrit :

EDIT : La photo du rocher couché à une orientation "Horizontal"

Non.
En #2, je parle clairement, exemples à l'appui, du champ "Orientation" dans les données exif.
Or, la photo du rocher couché, telle que tu l'as postée, n'a pas d'exif a des exif réduits, (cf. message suivant) :

moko@pc:~$ exif /.../tdct_1526065464.jpg
Données corrompues
Les données fournies ne respectent pas les spécifications.
ExifLoader: Les données fournies ne semblent pas contenir de données EXIF.
moko@pc:~$

Dernière modification par moko138 (Le 13/05/2018, à 11:21)


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#12 Le 13/05/2018, à 09:48

Naziel

Re : Détecter le sens de prise de vue d'une photo

Bonjour,

Je sais pas s'il y a une différence avec exiftool:

$ exiftool Téléchargements/test.jpg 
ExifTool Version Number         : 10.10
File Name                       : test.jpg
Directory                       : Téléchargements
File Size                       : 108 kB
File Modification Date/Time     : 2018:05:13 09:47:08+02:00
File Access Date/Time           : 2018:05:13 09:47:08+02:00
File Inode Change Date/Time     : 2018:05:13 09:47:08+02:00
File Permissions                : rw-rw-r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 300
Y Resolution                    : 300
Image Width                     : 1198
Image Height                    : 900
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 1198x900
Megapixels                      : 1.1

Personnellement, je vois rien d'utilisable là dedans pour l'orientation.

Dernière modification par Naziel (Le 13/05/2018, à 09:48)

En ligne

#13 Le 13/05/2018, à 11:17

moko138

Re : Détecter le sens de prise de vue d'une photo

exiftool, bien vu, Naziel !

En théorie, on peut en ligne de commande, éditer les Exif,
et donc, peut-être, ajouter la ligne "Orientation" et emplir son dernier champ.

Mais le man d'exiftool ou du chinois, pour moi c'est pareil.


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#14 Le 13/05/2018, à 19:56

grandtoubab

Re : Détecter le sens de prise de vue d'une photo

A partir des exemples vu dans https://sno.phy.queensu.ca/~phil/exifto … l_pod.html
orientation de départ

exif IMAG0424.jpg | grep Orient
Orientation         |Top-left

lire un parametre
-n          (--printConv)        No print conversion
-S          (-veryShort)         Very short output format

#  exiftool -Orientation -S -n IMAG0424.jpg
Orientation: 1

modifer

exiftool -Orientation=6 -n IMAG0424.jpg
Warning: [minor] Maker notes could not be parsed - IMAG0424.jpg
    1 image files updated

vérification

exif IMAG0424.jpg | grep Orient
Orientation         |Right-top

creer le tag ça serait ???

exiftool -Orientation+=1

Dernière modification par grandtoubab (Le 13/05/2018, à 20:06)


Linux tout seul sur HP Pavilion DV7 et Acer aspire T650
Debian 10 Buster XFCE/Gnome3 sur sda1
Canon MG3650 en wifi

Hors ligne

#15 Le 13/05/2018, à 21:57

moko138

Re : Détecter le sens de prise de vue d'une photo

Bravo grandtoubab !!!
Car, malgré l'absence d'exif,

~/Bureau$ sudo exiftool -Orientation=8 -n tdct_1526065464.jpg
    1 image files updated
moko@pc:~/Bureau$

ceci marche !


Tamarou,
La nouvelle orientation est prise en compte par eog et par geeqie.
Mais pas par feh ni par display... SAUF si après on ajoute :

convert tdct_1526065464.jpg -auto-orient tdct_1526065464_auto.jpg

%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne

#16 Le 14/05/2018, à 09:12

Tamarou

Re : Détecter le sens de prise de vue d'une photo

Bonjour à tous,
Merci pour vos recherches, on y voit plus clair sur ces données exif.

Et oui, sur mon poste Archlinux, j'utilise exiftool, exif n'est pas (ou plus ?) dans les dépôts. C'est pourquoi j'écrivais que mon image a une orientation "Horizontal".

exiftool IMG_1863.JPG | grep Orientation
Orientation                     : Horizontal (normal)

Dans l'attente d'un nouveau lot de photos à traiter, Je vais m'approprier toutes ces informations et demander des précisions si besoin.
Pour répondre à moko138, mon objectif immédiat est de les mettre dans le bon sens pour les charger sur l'album d'un site internet. Mais effectivement, c'est mieux si on arrive à pérenniser la bonne orientation.

A suivre.


Utilisateur d'Archlinux/Gnome-shell, Xubuntu.

Hors ligne

#17 Le 14/05/2018, à 09:31

moko138

Re : Détecter le sens de prise de vue d'une photo

Tamarou a écrit :

Pour répondre à moko138, mon objectif immédiat est de les mettre dans le bon sens pour les charger sur l'album d'un site internet. Mais effectivement, c'est mieux si on arrive à pérenniser la bonne orientation.

Donc 1) tu redresses les images par le moyen de ton choix,
2) il faut ensuite appliquer -auto-orient,
3) enfin tu peux appliquer un script d'allègement.


%NOINDEX%
Un utilitaire méconnu : ncdu

Hors ligne