104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
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})
|
|
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é !") |