Come geo localizzare foto smartphone con python

In questa guida, vi mostro come geolocalizzare le foto del vostro smartphone utilizzando uno script in Python, eseguibile sia su PC che su Termux su Android.

Cosa vuol dire geolocalizzare una foto?

Geolocalizzare una foto significa aggiungere le coordinate GPS (latitudine e longitudine) ai dati della foto per sapere dove è stata scattata. Molti smartphone fanno questo automaticamente usando il GPS integrato.

Queste informazioni sono memorizzate nei metadati EXIF della foto, che contengono dettagli come la data, l’ora e il luogo dello scatto.

Geolocalizzare le foto è utile per:

  • Organizzare e trovare le foto in base alla posizione.
  • Ricordare dove sono state scattate le foto.
  • Visualizzare le foto su una mappa.

Script in python:

import subprocess
import sys
import os
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS

# Funzione per installare pacchetti
def install(package):
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# Verifica se il modulo termcolor è installato, altrimenti lo installa
try:
    from termcolor import colored
except ImportError:
    print("Installazione del modulo termcolor...")
    install('termcolor')

# Definizione della funzione termcolored che utilizza il modulo termcolor
def termcolored(text, color):
    return colored(text, color)

def get_exif_data(image_path):
    try:
        image = Image.open(image_path)
    except FileNotFoundError:
        print(termcolored("Errore: Percorso non corretto o file non trovato.", 'red'))
        return None
    exif_data = {}

    # Estrae i dati EXIF
    info = image._getexif()
    if info:
        for tag, value in info.items():
            decoded = TAGS.get(tag, tag)
            if decoded == "GPSInfo":
                gps_data = {}
                for gps_tag in value:
                    sub_decoded = GPSTAGS.get(gps_tag, gps_tag)
                    gps_data[sub_decoded] = value[gps_tag]
                exif_data[decoded] = gps_data
            else:
                exif_data[decoded] = value
    return exif_data

def get_geotagging(exif_data):
    if not exif_data or 'GPSInfo' not in exif_data:
        return None

    gps_info = exif_data['GPSInfo']
    gps_latitude = gps_info.get("GPSLatitude")
    gps_latitude_ref = gps_info.get('GPSLatitudeRef')
    gps_longitude = gps_info.get('GPSLongitude')
    gps_longitude_ref = gps_info.get('GPSLongitudeRef')

    if gps_latitude and gps_latitude_ref and gps_longitude and gps_longitude_ref:
        lat = convert_to_degrees(gps_latitude)
        if gps_latitude_ref != "N":
            lat = -lat
        lon = convert_to_degrees(gps_longitude)
        if gps_longitude_ref != "E":
            lon = -lon
        return lat, lon
    return None

def convert_to_degrees(value):
    d, m, s = value
    return d + (m / 60.0) + (s / 3600.0)

# Chiede all'utente di inserire il percorso dell'immagine
image_path = input("Inserisci il percorso dell'immagine: ")

# Verifica se il percorso del file è valido
if not os.path.isfile(image_path):
    print(termcolored("Errore: Percorso non corretto o file non trovato.", 'red'))
else:
    # Ottiene i dati EXIF
    exif_data = get_exif_data(image_path)

    # Ottiene i geotag
    geotags = get_geotagging(exif_data)
    if geotags:
        lat = termcolored(f"Latitudine: {geotags[0]}", 'green')
        lon = termcolored(f"Longitudine: {geotags[1]}", 'green')
        print(lat)
        print(lon)
    else:
        print("Geotag non trovati nell'immagine.")

Funzionamento complessivo:

  • Lo script chiede all’utente di inserire il percorso di un’immagine.
  • Verifica se il percorso è valido.
  • Se valido, estrae i dati EXIF dell’immagine, inclusi i dati GPS se presenti.
  • Converte i dati GPS in coordinate latitudine e longitudine.
  • Stampa le coordinate geografiche se trovate, colorandole con termcolor.

Questo script può essere utilizzato per identificare la posizione in cui una foto è stata scattata, visualizzando le coordinate GPS memorizzate nei metadati della foto.

Come si utilizza su pc?

Per usare lo script Python fornito su un PC, segui questi passaggi:

  1. Installa Python: Assicurati di avere Python installato sul tuo computer. Puoi scaricarlo da python.org.
  2. Installa Pillow: Pillow è una libreria per la manipolazione delle immagini. Puoi installarla usando il comando:
pip install Pillow

Salva lo script: Copia il codice fornito e incollalo in un file di testo. Salva il file con estensione .py, ad esempio geolocalizzazione_foto.py.

Esegui lo script: Apri un terminale o prompt dei comandi, naviga fino alla directory in cui hai salvato lo script ed esegui il comando:

    python geolocalizzazione_foto.py

    Nel mio caso sul mio smartphone Android con Termux devo eseguire:

    python gps_photo.py

    Oltre a installare Pillow occorre avere installato altre due librerie:

    pip install termcolor
    pip install colorred

    Come usare lo script?

    Installazione di Termux: Scarica Termux gratuitamente dal Google Play Store e avvialo sul tuo dispositivo Android.

    Installa Python: Utilizza il gestore di pacchetti di Termux chiamato pkg per installare Python con il comando:

    pkg install python

    Installa Pillow e termcolor: Dopo aver installato Python, usa pip, il gestore dei pacchetti Python, per installare Pillow e termcolor con i comandi:

    pip install Pillow 
    pip install termcolor

    Copia lo script direttamente sul tuo dispositivo Android tramite email, messaggistica istantanea o utilizzando strumenti come ADB (Android Debug Bridge) se hai accesso alla riga di comando da remoto.

    Esegui lo script: Apri Termux e naviga fino alla directory in cui si trova lo script utilizzando il comando cd. Assicurati che lo script abbia i permessi di esecuzione con il comando:

    chmod +x nome_del_tuo_script.py

    Esecuzione su Android:

    python gps_photo.py

    Ora dobbiamo inserire il percorso dell’immagine della foto. Nel mio caso, all’interno di Termux, è stata inserita una foto del mio smartphone chiamata cristian.jpg.

    Risultato Latitudine e Longitudine della foto estratti

    Ora, se ci rechiamo sul sito coordinategps.it, possiamo inserire i dati per scoprire con precisione dove è stata scattata la fotografia del nostro smartphone.

    Come evitare di essere geolocalizzati dalle foto?

    • Disattiva i servizi di localizzazione: Nei dispositivi Android e iOS, puoi disattivare i servizi di localizzazione per la fotocamera o per l’intero dispositivo. Questo impedirà alle app di registrare le coordinate GPS quando scatti una foto.
    • Rimuovi i metadati dalle foto: Puoi utilizzare applicazioni o servizi online per rimuovere i metadati, comprese le informazioni di geolocalizzazione, dalle tue foto prima di condividerle pubblicamente.
    • Utilizza modalità di privacy avanzate: Alcuni smartphone offrono modalità di privacy avanzate che consentono di disattivare la registrazione delle coordinate GPS per le foto.
    • Scegli app di fotocamera con attenzione: Alcune app di fotocamera consentono di disattivare la registrazione delle coordinate GPS direttamente dalle impostazioni dell’app.
    • Esamina le impostazioni di condivisione delle foto: Prima di condividere una foto online, assicurati di esaminare le impostazioni di condivisione per garantire che i metadati non vengano inclusi.
    • Utilizza fotocamere senza GPS: Se la privacy è una preoccupazione principale, puoi considerare l’utilizzo di fotocamere tradizionali o fotocamere digitali che non registrano automaticamente le coordinate GPS.

    Adottando queste pratiche, puoi proteggere la tua privacy evitando che le tue foto vengano geolocalizzate e condividendo solo le informazioni che desideri.