Données Exif

Exemple

Cette image a été prise sur le site internet du Monde https://www.lemonde.fr

A partir de cette photo il est possible de retrouver le nom de l'auteur de l'image et le lieu de prise de vue de l'image.

Exemple

Le fichier "image" issu d'un appareil photo numérique contient généralement bien plus qu'une simple image. En effet, on y trouve des informations sur l'image elle-même (définition, résolution...) mais on peut y trouver aussi des informations sur la prise de vue (date, heure, lieu...). Cette spécification des fichiers "image" d'un appareil photo numérique s'appelle EXIF

\(\color{magenta}{\textbf{EXIF Exchangeable image file format }}\) correspond à un ensemble de métadonnées générées lors de la prise de vue d'un appareil photographique. Ces données sont stockées dans les fichiers images de formats .jpg, .raw ou .tiff.

Ce format de stockage des données a été établi en 1995 par la Japan Electronic Industry Developpement Association.

Elles permettent de sauvegarder, entre autres :

  • des informations géographiques (coordonnées GPS, lieu, date...)

  • les données techniques de l'image (poids, résolution, dimensions...)

  • les paramètres de configuration de l'appareil (références du boitier, ouverture, distance focale, sensibilité...)

  • le crédit photo (nom de la photo, auteur, droits d'usage...)

Ces données supplémentaires contenues dans un fichier "image" d'un appareil photo s'appellent des métadonnées. Elles sont généralement automatiquement supprimées des images chargées dans les bases de données des réseaux sociaux de façon à améliorer la protection des données personnelles, mais est-ce bien toujours le cas ? Quel risque y a-t-il de garder ces métadonnées ?

La plupart des logiciels de retouche photo permettent de lire ces métadonnées. Nous n'allons pas utiliser ce type de logiciel, nous allons plutôt écrire un petit programme Python (plus précisément, nous utiliserons la bibliothèque Python "PIL").

Sur un ordinateur :

Faire un clic droit sur l'image puis Propriétés / Détails Notez qu'il est possible de supprimer les propriétés et

les informations personnelles en cliquant sur le lien en bas de l'encart d'affichage.

Certains logiciels permettent d'opérer des recherches multi-critères en indexant les photographies sur la base des métadonnées (Xnview, Picasa...).

Plus de 80% des photographes professionnels renseignent les métadonnées pour protéger leurs photos cependant, 85% des images publiées sur internet n'ont pas de métadonnées (enquête

IMATAG 2018).

Saisissez et testez le programme suivant (il faudra enregistrer le fichier contenant ce programme dans le dossier "exif" ) :

1
from PIL import Image
2
from PIL.ExifTags import TAGS,GPSTAGS
3
4
img = Image.open('photo.jpg')
5
6
exif_decode= {}
7
8
exif_data = img._getexif()
9
10
for tag,value in exif_data.items():
11
  nom_encode=TAGS.get(tag,tag)
12
  exif_decode[nom_encode]=value
13
14
15

Comme vous pouvez le constater, nous avons un système clé:valeur (à chaque clé correspond une valeur). Les clés sont "codées" par des nombres, pour comprendre la signification de ces nombres, consultez le site http://www.exiv2.org/tags.html

En vous aidant du site web cité ci-dessus, essayez de trouver les informations suivantes pour chaque image :

  • la largeur de l'image en pixel

  • la hauteur de l'image en pixel

  • le fabricant du matériel

  • la date et l'heure de la prise de vue

DD = degrés+(minute/60)+(seconde/3600)

1
from PIL import Image
2
from PIL.ExifTags import TAGS, GPSTAGS
3
4
def get_exif(filename):
5
    exif = Image.open(filename)._getexif()
6
7
    if exif is not None:
8
        for key, value in exif.items():
9
            name = TAGS.get(key, key)
10
            print(name)
11
            exif[name] = exif.pop(key)
12
13
14
        print(exif)
15
16
        if 'GPSInfo' in exif:
17
            for key in exif['GPSInfo'].keys():
18
                name = GPSTAGS.get(key,key)
19
                exif['GPSInfo'][name] = exif['GPSInfo'].pop(key)
20
21
22
            if 'GPSLatitude' in exif['GPSInfo'] and 'GPSLatitudeRef' in exif['GPSInfo']:
23
                Latitude = exif['GPSInfo']['GPSLatitude']
24
                Orientation = exif['GPSInfo']['GPSLatitudeRef']
25
                exif['GPSInfo']['Latitude'] = ( str(Latitude[0][0]/Latitude[0][1]) + '°' +
26
                              str(Latitude[1][0]/Latitude[1][1]) + '′' +
27
                              str(Latitude[2][0]/Latitude[2][1]) + '″ ' +
28
                              Orientation )
29
30
                exif['GPSInfo']['LatitudeGoogle'] = (Latitude[0][0]/Latitude[0][1]) + \
31
                                                (Latitude[1][0]/Latitude[1][1])/60+ \
32
                                                (Latitude[2][0]/Latitude[2][1])/3600
33
34
            if Orientation=='S':
35
36
                exif['GPSInfo']['LatitudeGoogle']=-exif['GPSInfo']['LatitudeGoogle']
37
38
            if 'GPSLongitude' in exif['GPSInfo'] and 'GPSLongitudeRef' in exif['GPSInfo']:
39
                Longitude = exif['GPSInfo']['GPSLongitude']
40
                Orientation = exif['GPSInfo']['GPSLongitudeRef']
41
                exif['GPSInfo']['Longitude'] = ( str(Longitude[0][0]/Longitude[0][1]) + '°' +
42
                              str(Longitude[1][0]/Longitude[1][1]) + '′' +
43
                              str(Longitude[2][0]/Longitude[2][1]) + '″ ' +
44
                              Orientation )
45
                exif['GPSInfo']['LongitudeGoogle'] = (Longitude[0][0]/Longitude[0][1]) + \
46
                                                 (Longitude[1][0]/Longitude[1][1])/60+ \
47
                                                 (Longitude[2][0]/Longitude[2][1])/3600
48
49
50
            if Orientation=='W':
51
52
                exif['GPSInfo']['LongitudeGoogle']=-exif['GPSInfo']['LongitudeGoogle']
53
54
55
            if 'Latitude' in exif['GPSInfo'] and 'Longitude' in exif['GPSInfo']:
56
                return [exif['GPSInfo']['Latitude'], exif['GPSInfo']['Longitude'],exif['GPSInfo']['LatitudeGoogle'],exif['GPSInfo']['LongitudeGoogle']]
57
58
    else:
59
            return 'Pas de coordonnées GPS'
60
61
Coordonnees= get_exif('temple.jpg')
62
print(Coordonnees)
63
64

ExempleNous allons ensuite afficher la localisation sur Openstreetmap :

1
from PIL import Image
2
import webbrowser
3
# on affiche le tout dans openstreetmap
4
zoom='18'
5
webbrowser.open('https://www.openstreetmap.org/note/new?lat='+str(Coordonnees[2])+'&lon='+str(Coordonnees[3])+'#map='+zoom+'/'+str(Coordonnees[2])+'/'+str(Coordonnees[3]))
6

Méthode

En accédant aux données EXIF respectifs des photos ci-dessous arépondre aux questions suivantes :

a) L'une de ces photographies a été retouchée avec Photoshop car son EXIF a été altéré. De laquelle s'agit-il ?

b) Laquelle des photographies n'est une photo d'un tableau mais seulement la photo d'un poster ?

c) L'expéditeur de la photo de la Joconde prétend être allé au Louvre pour la photographier. Qu'en pensezvous ?

La Persistance de la mémoire est un tableau surréaliste peint en 1931 par Salvador Dalí.

La Joconde, ou Portrait de Mona Lisa, est un tableau de l'artiste Léonard de Vinci, réalisé entre 1503 et 1506.

La Jeune Fille à la perle réalisée par le peintre néerlandais Johannes Vermeer vers 1665