mirror of
https://forge.chapril.org/tykayn/mapillary_download
synced 2025-10-04 17:04:53 +02:00
83 lines
2.7 KiB
Python
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()
|