mapillary_download/2_move_france_folder.py
2025-07-28 12:15:43 +02:00

83 lines
2.7 KiB
Python

import os
import random
import piexif
from PIL import Image
#username="konink360"
username="raymond"
counter=0
# Définition de la bounding box de la France métropolitaine
FRANCE_METROPOLITAINE = {
'min_lat': 42.25,
'max_lat': 51.1,
'min_lon': -4.8,
'max_lon': 8.2
}
def get_random_jpg_file(dossier):
"""Renvoie le chemin d'un fichier JPG au hasard dans le dossier"""
jpg_files = [f for f in os.listdir(dossier) if f.endswith('.jpg')]
if not jpg_files:
return None
return os.path.join(dossier, random.choice(jpg_files))
def get_exif_info(file_path):
"""Renvoie les informations EXIF de la photo"""
try:
exif_dict = piexif.load(file_path)
return exif_dict
except Exception as e:
print(f"Erreur lors de la lecture des EXIF : {e}")
return None
def is_in_france(exif_info):
"""Vérifie si la photo a des informations de géolocalisation situées en France métropolitaine"""
if not exif_info or 'GPS' not in exif_info:
return False
gps_info = exif_info['GPS']
lat_ref = gps_info[1]
lat = gps_info[2]
lon_ref = gps_info[3]
lon = gps_info[4]
if lat_ref == b'N':
signe_lat = 1
else:
signe_lat = -1
if lon_ref == b'E':
signe_lon = 1
else:
signe_lon = -1
# Convertir les tuples en nombres
lat = signe_lat * (lat[0][0] / lat[0][1] + lat[1][0] / (lat[1][1] * 60) + lat[2][0] / (lat[2][1] * 3600))
lon = signe_lon * (lon[0][0] / lon[0][1] + lon[1][0] / (lon[1][1] * 60) + lon[2][0] / (lon[2][1] * 3600))
return (FRANCE_METROPOLITAINE['min_lat'] <= lat <= FRANCE_METROPOLITAINE['max_lat'] and
FRANCE_METROPOLITAINE['min_lon'] <= lon <= FRANCE_METROPOLITAINE['max_lon'])
def move_to_found_in_france(dossier):
"""Déplace le dossier vers found_in_france"""
dest_folder = 'found_in_france'
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
os.rename(dossier, os.path.join(dest_folder, os.path.basename(dossier)))
print('dossier déplacé:',counter, dossier, dest_folder)
def main():
root_folder = 'data/'+username
for dossier in os.listdir(root_folder):
dossier_path = os.path.join(root_folder, dossier)
# print(dossier_path)
if os.path.isdir(dossier_path):
jpg_file = get_random_jpg_file(dossier_path)
# print(jpg_file)
if jpg_file:
exif_info = get_exif_info(jpg_file)
# print(exif_info)
if exif_info and is_in_france(exif_info):
move_to_found_in_france(dossier_path)
# counter += 1
print(f"Dossier {dossier} déplacé vers found_in_france")
if __name__ == '__main__':
main()