Ask me anything
Ithy Logo
Sign in to save

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

script-organisation-photos-assurance-auto-qwzw0xy3

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:

mindmap root["Organisation Photos"] dossier_principal["Dossier Principal"] photos_source["Photos Source Non Traitées"] photos_organisees["Photos Organisées"] annee_2025["2025"] janvier["01-Janvier"] matricule_AA123BB["AA123BB"] matricule_CC456DD["CC456DD"] fevrier["02-Février"] matricule_EE789FF["EE789FF"] annee_2024["2024"] decembre["12-Décembre"] matricule_GG012HH["GG012HH"]

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:

  1. Par métadonnées EXIF: utilise les informations intégrées dans le fichier image
  2. 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

Formulaire d'assurance auto avec photos de garantie

Formulaire de réclamation

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

Que faire si les noms de mes fichiers ne suivent pas le format attendu?

Vous avez deux options principales:

  1. Modifier le script: Adaptez la fonction extraire_date_matricule() pour qu'elle corresponde à votre format de nommage spécifique. Vous devrez modifier les expressions régulières (regex) utilisées pour extraire les informations.
  2. Renommer vos fichiers: Vous pouvez utiliser un script distinct ou un logiciel de renommage par lot pour normaliser les noms de vos fichiers avant de les traiter avec ce script d'organisation.

Si vous avez de nombreux fichiers à traiter régulièrement, l'option 1 est généralement plus efficace à long terme.

Le script peut-il traiter des milliers de photos efficacement?

Oui, le script est conçu pour traiter de grands volumes de photos. Cependant, pour optimiser les performances avec des milliers de fichiers:

  • Exécutez le script sur un ordinateur avec suffisamment de RAM (au moins 8 Go recommandés)
  • Utilisez un disque SSD plutôt qu'un HDD pour de meilleures performances d'entrée/sortie
  • Si nécessaire, traitez les photos par lots (500-1000 à la fois) en déplaçant les fichiers dans des dossiers temporaires
  • Pour des volumes extrêmement importants (plus de 50 000 photos), envisagez d'ajouter du multitraitement au script pour utiliser plusieurs cœurs de processeur
Comment gérer les photos qui n'ont pas de métadonnées EXIF ou de noms conformes?

Le script gère déjà ce cas en gardant une copie de toutes les photos dans le dossier "photos_source_non_traitees". Pour les photos non organisées, vous pouvez:

  1. Créer un dossier spécial: Ajoutez une logique au script pour déplacer les photos non classifiables dans un dossier "à_traiter_manuellement"
  2. Journal d'erreurs: Modifiez le script pour générer un fichier CSV listant toutes les photos qui n'ont pas pu être traitées automatiquement
  3. Interface utilisateur: Développez une interface simple qui affiche les photos non traitées et permet de spécifier manuellement la date et la matricule

Le script actuel affiche déjà les statistiques des photos non organisées, ce qui vous permet d'évaluer l'ampleur du problème.

Est-il possible d'automatiser l'exécution régulière du script?

Absolument! Vous pouvez programmer l'exécution automatique du script de plusieurs façons:

  • Sous Windows: Utilisez le Planificateur de tâches pour exécuter le script quotidiennement ou hebdomadairement
  • Sous macOS/Linux: Configurez une tâche cron pour exécuter le script à intervalles réguliers
  • Solution avancée: Créez un service qui surveille le dossier source et exécute automatiquement le script lorsque de nouvelles photos sont ajoutées (avec les bibliothèques Python watchdog ou inotify)

Pour le Planificateur de tâches Windows, créez une tâche qui exécute la commande:

python C:\chemin\vers\organiser_photos.py C:\photos\source C:\photos\destination
Comment modifier le script pour extraire les matricules d'un format personnalisé?

Pour adapter le script à un format personnalisé, vous devez modifier la fonction extraire_date_matricule(). Voici comment procéder:

  1. Identifiez votre format exact (exemple: "assurance_AB123CD_photo_20250315.jpg")
  2. Déterminez les expressions régulières appropriées pour extraire la matricule et la date
  3. Modifiez la fonction dans le script pour ajouter votre format personnalisé

Exemple de modification pour le format mentionné:

# Ajoutez cette condition dans la fonction extraire_date_matricule
elif format_nom == "format_personnalise":
    match = re.match(r'assurance_([A-Z0-9]+)_photo_(\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

Puis, lors de l'exécution du script, utilisez l'option --format:

python organiser_photos.py source destination --format format_personnalise

Références

Pour Aller Plus Loin


Last updated April 4, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI