Organisation Automatisée de Photos d'Assurance Véhicule: Solution Complète
Un script Python efficace pour classer vos photos par date et par matricule, avec une structure organisée pour votre agence
Points Essentiels
- Classification automatique des photos par mois et par matricule de véhicule
- Structure à double dossier pour séparer les photos brutes des photos organisées
- Système flexible qui s'adapte à différents formats de nommage de fichiers
Comprendre la Solution
Pour répondre à votre besoin d'organisation de photos d'assurance véhicule, nous allons créer un script Python qui automatise entièrement ce processus. Le script va scanner un dossier source, extraire les informations pertinentes (date et matricule), puis organiser les photos dans une structure de dossiers appropriée.
Structure de Dossiers Proposée
Le script créera l'arborescence suivante:
Extraction des Informations Clés
Pour classer correctement les photos, le script doit déterminer deux informations essentielles:
- La date de la photo: soit à partir des métadonnées EXIF, soit du nom du fichier
- La matricule du véhicule: généralement extraite du nom du fichier (ex: "AA123BB_20250315.jpg")
Méthodes d'extraction d'informations
Le script propose deux méthodes principales pour extraire ces informations:
- Par métadonnées EXIF: utilise les informations intégrées dans le fichier image
- Par nom de fichier: analyse le nom selon un format prédéfini (par exemple, "MATRICULE_YYYYMMDD.jpg")
Le Script Python
Voici le script complet pour automatiser l'organisation de vos photos d'assurance:
import os
import shutil
import re
from datetime import datetime
from PIL import Image
import argparse
def extraire_date_matricule(chemin_photo, format_nom="matricule_date"):
"""
Extrait la date et la matricule à partir du nom du fichier ou des métadonnées.
Args:
chemin_photo (str): Chemin vers le fichier photo
format_nom (str): Format attendu du nom de fichier ("matricule_date" ou "date_matricule")
Returns:
tuple: (date_obj, matricule) ou (None, None) si extraction impossible
"""
nom_fichier = os.path.basename(chemin_photo)
# Tentative d'extraction à partir du nom de fichier
try:
# Format attendu: MATRICULE_YYYYMMDD.jpg
if format_nom == "matricule_date":
match = re.match(r'([A-Z0-9]+)_(\d{8})\.', nom_fichier)
if match:
matricule = match.group(1)
date_str = match.group(2)
date_obj = datetime.strptime(date_str, '%Y%m%d')
return date_obj, matricule
# Format attendu: YYYYMMDD_MATRICULE.jpg
elif format_nom == "date_matricule":
match = re.match(r'(\d{8})_([A-Z0-9]+)\.', nom_fichier)
if match:
date_str = match.group(1)
matricule = match.group(2)
date_obj = datetime.strptime(date_str, '%Y%m%d')
return date_obj, matricule
except Exception as e:
print(f"Erreur lors de l'extraction depuis le nom de fichier {nom_fichier}: {e}")
# Tentative d'extraction à partir des métadonnées EXIF
try:
with Image.open(chemin_photo) as img:
exif_data = img._getexif()
if exif_data:
# Recherche de la date dans les métadonnées
for tag, value in exif_data.items():
if tag == 36867: # DateTimeOriginal
date_str = value
date_obj = datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
# Pour la matricule, on revient au nom de fichier
match = re.search(r'([A-Z0-9]{7})', nom_fichier)
if match:
matricule = match.group(1)
return date_obj, matricule
except Exception as e:
print(f"Erreur lors de l'extraction des métadonnées EXIF de {nom_fichier}: {e}")
return None, None
def organiser_photos(dossier_source, dossier_destination, format_nom="matricule_date"):
"""
Organise les photos du dossier source vers le dossier destination.
Args:
dossier_source (str): Chemin vers le dossier contenant les photos à organiser
dossier_destination (str): Chemin vers le dossier où les photos seront organisées
format_nom (str): Format attendu du nom de fichier
"""
# Création des dossiers principaux s'ils n'existent pas
dossier_source_non_traite = os.path.join(dossier_destination, "photos_source_non_traitees")
dossier_photos_organisees = os.path.join(dossier_destination, "photos_organisees")
os.makedirs(dossier_source_non_traite, exist_ok=True)
os.makedirs(dossier_photos_organisees, exist_ok=True)
# Compteurs pour les statistiques
compteur_total = 0
compteur_succes = 0
compteur_echec = 0
# Parcourir les fichiers du dossier source
for nom_fichier in os.listdir(dossier_source):
chemin_fichier = os.path.join(dossier_source, nom_fichier)
# Vérifier s'il s'agit d'une image
if os.path.isfile(chemin_fichier) and nom_fichier.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')):
compteur_total += 1
# Copier d'abord dans le dossier source non traité
shutil.copy2(chemin_fichier, os.path.join(dossier_source_non_traite, nom_fichier))
# Extraire la date et la matricule
date_obj, matricule = extraire_date_matricule(chemin_fichier, format_nom)
if date_obj and matricule:
# Créer la structure de dossiers
annee = str(date_obj.year)
mois = f"{date_obj.month:02d}-{date_obj.strftime('%B')}"
chemin_dossier_annee = os.path.join(dossier_photos_organisees, annee)
chemin_dossier_mois = os.path.join(chemin_dossier_annee, mois)
chemin_dossier_matricule = os.path.join(chemin_dossier_mois, matricule)
os.makedirs(chemin_dossier_matricule, exist_ok=True)
# Copier la photo dans le dossier organisé
shutil.copy2(chemin_fichier, os.path.join(chemin_dossier_matricule, nom_fichier))
compteur_succes += 1
print(f"Photo organisée: {nom_fichier} -> {os.path.join(annee, mois, matricule)}")
else:
compteur_echec += 1
print(f"Impossible d'extraire les informations nécessaires de {nom_fichier}")
# Afficher les statistiques
print(f"\nStatistiques d'organisation:")
print(f" Photos traitées: {compteur_total}")
print(f" Photos organisées avec succès: {compteur_succes}")
print(f" Photos non organisées: {compteur_echec}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Organise les photos d'une agence d'assurance par mois et par matricule de véhicule.")
parser.add_argument("source", help="Dossier contenant les photos à organiser")
parser.add_argument("destination", help="Dossier où les photos seront organisées")
parser.add_argument("--format", choices=["matricule_date", "date_matricule"], default="matricule_date",
help="Format du nom de fichier (matricule_date: MATRICULE_YYYYMMDD.jpg ou date_matricule: YYYYMMDD_MATRICULE.jpg)")
args = parser.parse_args()
organiser_photos(args.source, args.destination, args.format)
Comment Utiliser le Script
Pour utiliser ce script, vous devez avoir Python installé sur votre ordinateur, ainsi que les bibliothèques PIL (Pillow) pour traiter les images.
Installation des Prérequis
pip install pillow
Exécution du Script
python organiser_photos.py /chemin/vers/photos/source /chemin/vers/dossier/destination --format matricule_date
Exemple concret:
python organiser_photos.py C:/photos/a_traiter C:/photos/organisees --format matricule_date
Visualisation de l'Organisation
Pour mieux comprendre comment le script organise vos photos, voici une représentation visuelle de la structure créée et des décisions prises lors du traitement:
Explications des Métriques
Le graphique ci-dessus compare différentes approches pour organiser vos photos:
- Organisation manuelle: Très facile à comprendre mais peu efficace et chronophage
- Script Python proposé: Excellente automatisation et organisation, avec un bon équilibre entre les autres aspects
- Solution commerciale: Performante mais potentiellement coûteuse et moins adaptable à vos besoins spécifiques
Exemples de Formats de Noms de Fichiers
Le script est conçu pour traiter différents formats de noms de fichiers. Voici des exemples:
| Format | Exemple | Règle d'extraction | Résultat |
|---|---|---|---|
| matricule_date | AB123CD_20250315.jpg | Matricule avant la date | Date: 15/03/2025, Matricule: AB123CD |
| date_matricule | 20250315_AB123CD.jpg | Date avant la matricule | Date: 15/03/2025, Matricule: AB123CD |
| EXIF + nom | photo_AB123CD.jpg (avec métadonnées) | Métadonnées pour la date, nom pour matricule | Date: métadonnées, Matricule: AB123CD |
| Format personnalisé | Adapté à vos besoins | Modification du regex dans le script | Selon votre format |
Galerie d'Images: Photos d'Assurance Auto
Voici quelques exemples de photos typiques de garantie de véhicule, similaires à celles que votre script organisera:
Formulaire d'assurance auto avec photos de garantie
Documentation photographique pour réclamation d'assurance
Vidéo Explicative: Comment Photographier Correctement les Véhicules
Cette vidéo explique comment prendre des photos de qualité pour les évaluations de véhicules, ce qui est directement pertinent pour votre agence d'assurance. Ces conseils vous aideront à standardiser les photos que votre script organisera ensuite:
Questions Fréquemment Posées
Références
- How to Properly Photograph Damage during an Auto Appraisal - YouTube
- Auto Appraisal Photos you MUST Know - YouTube
- Never Miss a Photo When Doing a Vehicle Inspection - YouTube
- How to Sort 5,000+ Photos Quickly in Photo Mechanic - YouTube
- Information Needed for Car Insurance - Pronto Insurance
- Insurance Claims - Our Expert Staff Help You with Insurance
Pour Aller Plus Loin
Last updated April 4, 2025