From 5e1e7e294732ca27832f675e206c1103aa5103ab Mon Sep 17 00:00:00 2001 From: antoinewg Date: Wed, 15 Apr 2026 14:50:25 -0400 Subject: [PATCH] d --- Photo_heure copy 3.py | 135 ------------------------------------------ 1 file changed, 135 deletions(-) delete mode 100644 Photo_heure copy 3.py diff --git a/Photo_heure copy 3.py b/Photo_heure copy 3.py deleted file mode 100644 index 25e65b8..0000000 --- a/Photo_heure copy 3.py +++ /dev/null @@ -1,135 +0,0 @@ -import os -import shutil -from datetime import datetime -import google.generativeai as genai -import PIL.Image -import time - -# --------------------- CONFIGURATION lol --------------------- -photo_folder = r"C:\Users\Antoine\PycharmProjects\PHOTO\photo a organiser" -dossier_folder = r"C:\Users\Antoine\PycharmProjects\PHOTO\dossier" - -genai.configure(api_key="AIzaSyDq2LmX_fwKGAwxGAtmBfX940vT2wDQzBU") -model = genai.GenerativeModel('models/gemini-2.5-flash') - -if not os.path.exists(dossier_folder): - os.makedirs(dossier_folder) - -# --------------------- FONCTIONS --------------------- -def get_time_from_filename(filename): - try: - base = os.path.splitext(filename)[0] - parts = base.split("_") - time_part = parts[-1] - return datetime.strptime(time_part, "%H%M%S") - except Exception: - return None - -def analyze_group_photos(group_paths): - """ - Envoie les images et demande de lier les valeurs aux noms de fichiers. - """ - prompt = ( - "Analyze these images one by one. For each image, if you see a 6-character Barcode " - "or a 5-character LCLC, identify it.\n" - "Return the results in this exact format for each relevant file:\n" - "FILENAME: [filename], TYPE: [BARCODE or LCLC], VALUE: [value]\n" - "If a file has nothing, don't list it." - ) - - content = [prompt] - - # On ouvre les images (avec gestion de fermeture automatique) - images_to_close = [] - for path in group_paths: - img = PIL.Image.open(path) - content.append(f"Filename: {os.path.basename(path)}") - content.append(img) - images_to_close.append(img) - - try: - # Note: Utilisez 'gemini-1.5-flash' car 2.5 n'existe pas encore - response = model.generate_content(content) - res_text = response.text - print(f"--- Gemini Analysis ---\n{res_text}\n-----------------------") - - # Fermeture des images pour libérer les fichiers - for i in images_to_close: i.close() - - return res_text - except Exception as e: - print(f"Error calling Gemini: {e}") - return "" - -# --------------------- TRAITEMENT --------------------- -photos_raw = [f for f in os.listdir(photo_folder) if f.lower().endswith((".jpg", ".jpeg", ".png"))] -photo_times = [] - -for photo in photos_raw: - time_obj = get_time_from_filename(photo) - if time_obj: - photo_times.append((photo, time_obj)) - -photo_times.sort(key=lambda x: x[1]) - -groups = [] -for photo, time_obj in photo_times: - if not groups: - groups.append({"photos": [photo], "reference_time": time_obj}) - else: - current_group = groups[-1] - difference = abs((time_obj - current_group["reference_time"]).total_seconds()) - if difference <= 60: - current_group["photos"].append(photo) - current_group["reference_time"] = time_obj - else: - groups.append({"photos": [photo], "reference_time": time_obj}) - -# --------------------- ANALYSE ET RENOMMAGE --------------------- -for i, group in enumerate(groups, start=1): - print(f"Analyzing Group {i}...") - group_paths = [os.path.join(photo_folder, p) for p in group["photos"]] - analysis_result = analyze_group_photos(group_paths) - - group_folder_path = os.path.join(dossier_folder, str(i)) - os.makedirs(group_folder_path, exist_ok=True) - - # Créer un dictionnaire pour mapper Filename -> NouveauNom - # Exemple: {"IMG_123.jpg": "ABC123.jpg"} - filename_mapping = {} - - # Parsing de la réponse de Gemini - for line in analysis_result.splitlines(): - if "FILENAME:" in line and "VALUE:" in line: - try: - fname = line.split("FILENAME:")[1].split(",")[0].strip() - vtype = line.split("TYPE:")[1].split(",")[0].strip() - val = line.split("VALUE:")[1].strip() - - # On vérifie la validité des données - if (vtype == "BARCODE" and len(val) == 6) or (vtype == "LCLC" and len(val) == 5): - filename_mapping[fname] = val - except: - continue - - for photo_name in group["photos"]: - src_path = os.path.join(photo_folder, photo_name) - extension = os.path.splitext(photo_name)[1] - - # On vérifie si Gemini a trouvé une valeur spécifique pour CE fichier - if photo_name in filename_mapping: - new_name = f"{filename_mapping[photo_name]}{extension}" - else: - # Sinon on garde le nom original - new_name = photo_name - - dst_path = os.path.join(group_folder_path, new_name) - - # Gestion des doublons (si deux photos ont le même code) - counter = 1 - base_name = os.path.splitext(new_name)[0] - while os.path.exists(dst_path): - dst_path = os.path.join(group_folder_path, f"{base_name}_{counter}{extension}") - counter += 1 - - shutil.move(src_path, dst_path) \ No newline at end of file