Pourquoi les images de mon téléphone portable sont-elles pivotées sur mon bureau?

Un jour, mon ami m'a envoyé des images pour tester mon algorithme. L'algorithme a très bien fonctionné et j'ai tout exécuté. Lors de l'analyse des résultats, j'ai toutefois constaté que certaines images avaient été pivotées.! 

Je ne pouvais vraiment pas comprendre la raison. Rien dans mon algorithme ne faisait de rotation, et c'était un peu bizarre. Heureusement, j’ai compris la raison pour laquelle cela s’est passé après tout, et dans cet article, je vais vous expliquer les étapes à suivre pour analyser des images qui subissent une rotation étrange à l’aide de Python..

Commençons!

Données EXIF

Avez-vous déjà pensé à ce qui se passe lorsque vous prenez une photo avec l'appareil photo de votre téléphone portable? Dans ce cas, l’appareil photo écrirait l’image dans un fichier image tout en incluant d’autres informations dans l’image appelée métadonnées; en bref, ce sont des données sur les données. Par exemple, notre image est considérée comme une donnée. Les métadonnées peuvent être l'heure à laquelle l'image a été prise.

Les métadonnées sont écrites dans le fichier image en utilisant le format de fichier image échangeable (Exif). De nombreuses balises de métadonnées intéressantes seront incluses dans votre image, telles que les faire et modèle du téléphone utilisé pour prendre la photo, en plus des balises plus intéressantes! Ainsi, les métadonnées pourraient inclure des informations précieuses sur votre image.. 

Si vous souhaitez approfondir les données Exif, les associations CIPA (Caméra et produits d'imagerie) et l'Association des industries des technologies de l'information (JEITA) ont conjointement formulé la norme: CIPA DC-008-Translation Format de fichier image échangeable pour appareils photo numériques: Exif Version 2.3.

Lecture de métadonnées

Maintenant que nous savons ce que nous entendons par métadonnées, allons de l'avant et lisons certaines balises de métadonnées dans notre image. Pour les besoins de ce tutoriel, j'utilise l'image ci-dessous, qui a été prise avec un appareil photo de téléphone portable. L'image originale peut être téléchargée à partir de toy.jpg.

Comme mentionné ci-dessus, différentes étiquettes de métadonnées seront incluses dans l'image. Écrivons un script Python permettant d'extraire les informations de certaines balises de métadonnées à partir de l'image ci-dessus. En ce qui concerne les informations, disons que nous voulons en savoir plus sur le faire et modèle du téléphone portable avec lequel la photo a été prise, et le flash statut au moment de prendre la photo. Pour cela, nous allons utiliser le module ExifTags, qui fait partie de PIL (Python Imaging Library)..

Je vais d'abord énumérer le script Python, puis passer en revue le code étape par étape:

from PIL import Image de PIL.ExifTags import TAGS image = Image.open ('toy.jpg') info = image._getexif () pour un tag, valeur dans info.items (): key = TAGS.get (tag) si key == 'Construire': print (clé + ':' + str (valeur)) elif key == 'Modèle': print (clé + ':' + str (valeur)) elif key == 'Flash': print ( clé + ':' + str (valeur))

La première chose que nous avons faite est d’importer le Image et MOTS CLÉS Des classes. le Image La classe est utilisée pour représenter une image PIL, tandis que la MOTS CLÉS class, comme indiqué dans la documentation, mappe les énumérations de balises EXIF ​​d'entiers 16 bits en noms de chaînes descriptives.

Nous passons ensuite à la lecture de notre image, toy.jpg, et en utilisant le ._getexif () fonction qui retourne un dictionnaire de Mots clés et leur valeurs. Après cela, avant d’imprimer la valeur de la balise (clé), nous vérifions si cette clé existe ou non dans l’image. 

Si vous souhaitez avoir une liste des balises disponibles dans l'image, vous pouvez simplement ajouter la déclaration clé d'impression sous la variable clé dans la boucle for. Quelles autres balises pouvez-vous voir après avoir exécuté cette instruction??

En vérifiant la sortie du script ci-dessus, voici ce que vous obtiendriez si vous utilisiez toy.jpg:

Flash: 0 Marque: samsung Modèle: SAMSUNG-SM-N920A

A la sortie, nous savons que le téléphone portable utilisé pour prendre la photo que nous avons vue était de type samsung et modèle SAMSUNG-SM-N920A. Qu'en est-il de la valeur 0 pour le tag Flash? Si nous nous référons au document standard lié dans la section Exif Data ci-dessus, nous verrons que la valeur 0 signifie que le le flash ne s'est pas déclenché au moment de prendre la photo.

Pourquoi l'image est-elle tournée sur mon bureau??

Venons-en à notre sujet principal: la raison pour laquelle vous pouvez parfois trouver que l'image que vous avez transférée à partir d'une caméra de téléphone portable est en rotation ou qu'elle est mal orientée. Nous pouvons découvrir la raison de ce problème en analysant les données Exif de l’image..

Une balise de métadonnées que nous pouvons utiliser à cette fin est Orientation, qui, sur la base du document standard lié ci-dessus, montre les orientation de l'image vue en termes de lignes et de colonnes. Afin de vérifier la valeur de la balise Orientation pour notre image, nous pouvons ajouter les instructions suivantes à la fin du script ci-dessus:

elif key == 'Orientation': print (clé + ':' + str (valeur))

Les déclarations ci-dessus retourneraient Orientation: 1. En se référant au document de normes Exif, la valeur 1 veux dire:

La 0ème ligne est située en haut de l'image et la 0ème colonne est celle de gauche..

Pour plus de clarté, comme décrit dans Exif Orientation Tag, la description ci-dessus peut être lue comme suit: La 0ème ligne de l'image enregistrée correspond au haut de la scène capturée et la 0ème colonne de l'image enregistrée correspond au côté gauche de la scène capturée.. En d'autres termes, l'image n'a pas été pivotée pour l'essentiel, nous n'avons donc aucun problème d'orientation lors du transfert de l'image de notre téléphone mobile vers le bureau. Le document JPEG Rotation and EXIF ​​Orientation fournit une bonne explication de la balise d’orientation Exif et de ses différentes valeurs..

Ainsi, lorsque vous constatez qu'une image transférée depuis votre téléphone mobile a une rotation inattendue ou une orientation incorrecte, il vous suffit de revenir à la balise Exif Orientation et de vérifier sa valeur pour une image particulière, sur laquelle vous pouvez corrigez l'orientation de votre image transférée ou de toute autre image reçue de quelqu'un d'autre.

Cela est particulièrement utile lorsque vous appliquez un algorithme à un lot d'images extraites d'un appareil photo de téléphone portable et que vous souhaitez vous assurer que chaque image a été enregistrée avec l'orientation correcte..