import os import shutil from datetime import datetime import google.generativeai as genai import PIL.Image # --------------------- # CONFIGURATION # --------------------- photo_folder = "C:\\Users\\Antoine\\PycharmProjects\\PHOTO\\photo a organiser" dossier_folder = "C:\\Users\\Antoine\\PycharmProjects\\PHOTO\\dossier" genai.configure(api_key="VOTRE_CLE_API") model = genai.GenerativeModel('gemini-1.5-flash') # Créer le dossier de sortie s'il n'existe pas if not os.path.exists(dossier_folder): os.makedirs(dossier_folder) # --------------------- # FONCTION POUR EXTRAIRE L'HEURE DEPUIS LE NOM DE FICHIER # --------------------- def get_time_from_filename(filename): try: base = os.path.splitext(filename)[0] # on met les filename dans la base parts = base.split("_") time_part = parts[1] time_obj = datetime.strptime(time_part, "%H%M%S") # on traite l'infor en temps return time_obj except Exception as e: print(f"Impossible d'extraire l'heure de {filename}: {e}") return None # --------------------- # LISTER ET TRIER LES PHOTOS PAR HEURE # --------------------- photos_raw = [f for f in os.listdir(photo_folder) if f.lower().endswith(".jpg")] photo_times = [] for photo in photos_raw: time_obj = get_time_from_filename(photo) if time_obj: photo_times.append((photo, time_obj)) else: print(f"Photo ignorée (nom invalide) : {photo}") photo_times.sort(key=lambda x: x[1]) # faire un sort pour mettre l'heure du plus jeune au plus vieux. # --------------------- # GROUPEMENT PAR MINUTE # --------------------- groups = [] for photo, time_obj in photo_times: heure_lisible = time_obj.strftime("%H:%M:%S") # met le texte lisible print(f" {photo} → {heure_lisible}") if not groups: groups.append({"photos": [photo], "reference": time_obj}) img = PIL.Image.open("photos") response = model.generate_content(["Retourne moi unqiuement les lettres et les chiffres de cette image, uniquement sur le code barre",img groups.append({"photos": [photo], "reference": time_obj}) ]) print(f" → Nouveau groupe 1 (référence : {heure_lisible})") else: current_group = groups[-1] reference_time = current_group["reference"] difference = abs((time_obj - reference_time).total_seconds()) # on soustrait la reference of temps de référence if difference <= 60: current_group["photos"].append(photo) print(f" → Ajouté au groupe {len(groups)} (écart : {difference:.0f}s)") else: groups.append({"photos": [photo], "reference": time_obj}) print(f" → Nouveau groupe {len(groups)} (référence : {heure_lisible})") # --------------------- # FUSIONNER LES GROUPES AVEC UNE SEULE PHOTO # --------------------- merged_groups = [] for i, group in enumerate(groups): if len(group["photos"]) == 1 and merged_groups: # Une seule photo → on la fusionne dans le groupe précédent photo = group["photos"][0] merged_groups[-1]["photos"].append(photo) print(f" Photo seule '{photo}' fusionnée dans le groupe précédent") else: merged_groups.append(group) groups = merged_groups # --------------------- # CRÉER LES DOSSIERS NUMÉROTÉS ET DÉPLACER LES PHOTOS # --------------------- for i, group in enumerate(groups, start=1): group_folder = os.path.join(dossier_folder, str(i)) os.makedirs(group_folder, exist_ok=True) ref_time = group["reference"].strftime("%H:%M:%S") print(f"\nGroupe {i} (référence : {ref_time}) → dossier '{i}'") for photo in group["photos"]: src = os.path.join(photo_folder, photo) dst = os.path.join(group_folder, photo) shutil.move(src, dst) print(f" Déplacé : {photo}") print("\nRegroupement terminé !")