Photo/Photo_heure.py

214 lines
7.4 KiB
Python

<<<<<<< HEAD
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}")
=======
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}")
>>>>>>> fd17b0aa2007e272777fcf6570af9c6af1b2b0a3
print("\nRegroupement terminé !")