0% ont trouvé ce document utile (0 vote)
45 vues4 pages

Projet Python 2

Ce document présente un script Python pour charger, traiter et classifier des images à l'aide de SVM. Il inclut des étapes pour la normalisation des images, l'extraction de caractéristiques via LBP et HOG, ainsi que l'évaluation du modèle. Enfin, il affiche les résultats de la classification et les performances du modèle.

Transféré par

enamichak00
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
45 vues4 pages

Projet Python 2

Ce document présente un script Python pour charger, traiter et classifier des images à l'aide de SVM. Il inclut des étapes pour la normalisation des images, l'extraction de caractéristiques via LBP et HOG, ainsi que l'évaluation du modèle. Enfin, il affiche les résultats de la classification et les performances du modèle.

Transféré par

enamichak00
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

import matplotlib.

pyplot as plt
import os
import cv2
import numpy as np

def load_images_from_folder(folder):
images = []
labels = []

if not [Link](folder):
print(f"Erreur : Le dossier {folder} n'existe pas.")
return None, None, None

class_names = sorted([Link](folder)) # Trier les noms pour assurer un


ordre fixe
print(f"Classes détectées : {class_names}")

for label, class_name in enumerate(class_names):


class_path = [Link](folder, class_name)

if not [Link](class_path):
print(f"Attention : {class_path} n'est pas un dossier. Ignoré.")
continue

print(f"Chargement des images de {class_name}...")

for file in [Link](class_path):


img_path = [Link](class_path, file)

# Vérifier si c'est bien une image


if img_path.endswith(('.jpg', '.jpeg', '.png')):
img = [Link](img_path, cv2.IMREAD_GRAYSCALE)

if img is None:
print(f"Erreur : Impossible de lire {img_path}")
else:
img = [Link](img, (128, 128))
[Link](img)
[Link](label)

if len(images) == 0:
print("⚠️ Aucune image n'a été chargée. Vérifiez les chemins et le format
des fichiers.")

return [Link](images), [Link](labels), class_names

# 📂 Modifier le chemin du dossier ici


data_folder = r"C:\Users\usr\Desktop\dataset"

# Charger les images avec messages de vérification


images, labels, class_names = load_images_from_folder(data_folder)

if images is not None:


print(f"\n✅ {len(images)} images chargées avec succès.")
else:
print("\n❌ Échec du chargement des images.")
# Vérifier si des images ont été chargées
if images is None or len(images) == 0:
print("❌ Aucune image trouvée. Vérifiez votre dataset.")
else:
# Affichage de 5 images maximum
num_images = min(5, len(images)) # Afficher au maximum 5 images
[Link](figsize=(10, 5)) # Taille du graphe

for i in range(num_images):
[Link](1, num_images, i + 1) # Ajouter un sous-graph
[Link](images[i], cmap='gray') # Afficher en niveaux de gris
[Link](class_names[labels[i]]) # Afficher la classe correspondante
[Link]("off") # Supprimer les axes

[Link]() # Afficher les images

from sklearn.model_selection import train_test_split

# Normalisation des images (convertir les pixels entre 0 et 1)


images = images / 255.0

# Séparation en train (80%) et test (20%)


X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2,
random_state=42)

print(f"Train set : {len(X_train)} images, Test set : {len(X_test)} images")

from [Link] import local_binary_pattern, hog

def extract_features(images):
features = []
for img in images:
# LBP - Analyse de texture
lbp = local_binary_pattern(img, P=8, R=1, method='uniform')
lbp_hist, _ = [Link]([Link](), bins=[Link](0, 11), range=(0,
10))
lbp_hist = lbp_hist.astype("float") / (lbp_hist.sum() + 1e-6) #
Normalisation

# HOG - Formes et contours


hog_features, _ = hog(img, orientations=9, pixels_per_cell=(4, 4),
cells_per_block=(1, 1), visualize=True)

# Fusionner LBP et HOG


feature_vector = [Link]((lbp_hist, hog_features))
[Link](feature_vector)

return [Link](features)

# Extraction des caractéristiques sur les jeux de données


X_train_features = extract_features(X_train)
X_test_features = extract_features(X_test)

print(f"Nombre de caractéristiques extraites par image :


{X_train_features.shape[1]}")

# Vérifier si les caractéristiques ont bien été extraites


if len(X_train_features) > 0:
# Sélectionner une image pour affichage
img_index = 0,1,2
img = X_train[img_index]

# Extraction des descripteurs HOG


hog_features, _ = hog(img, orientations=9, pixels_per_cell=(4, 4),
cells_per_block=(1, 1), visualize=True)

# Affichage de l'image originale et des contours HOG


[Link](figsize=(12, 5))

[Link](1, 2, 1)
[Link](img, cmap='gray')
[Link]("Image originale")
[Link]("off")

[Link](1, 2, 2)
[Link](img, cmap='gray')
[Link]("HOG - Contours détectés")
[Link]("off")
[Link]()
else:
print("❌ Aucune caractéristique HOG à afficher.")

from [Link] import SVC

# Création et entraînement du modèle SVM


model = SVC(kernel='linear')
[Link](X_train_features, y_train)

print("Modèle entraîné avec succès !")

from [Link] import accuracy_score, classification_report


# Vérifier si le modèle a été entraîné
if not hasattr(model, "predict"):
print("❌ Erreur : Le modèle n'a pas été entraîné ! Exécutez
[Link](X_train_features, y_train) d'abord.")
else:
# Vérifier si X_test_features n'est pas vide
if X_test_features.shape[0] == 0:
print("❌ Erreur : X_test_features est vide ! Vérifiez l'extraction des
caractéristiques.")
else:
# Faire les prédictions
y_pred = [Link](X_test_features)

# Vérifier si les tailles correspondent


if y_test.shape != y_pred.shape:
print(f"❌ Erreur : y_test et y_pred n'ont pas la même taille !
({y_test.shape} ≠ {y_pred.shape})")
else:
# Évaluation des performances
accuracy = accuracy_score(y_test, y_pred)
print(f"✅ Précision du modèle : {accuracy:.2f}")

# Vérifier si les classes sont correctes


if len(set(y_test)) != len(class_names):
print(f"⚠️ Attention : Nombre de classes incorrect. Vérifiez
class_names = {class_names}")

# Rapport de classification
print("📊 Rapport de classification :")
print(classification_report(y_test, y_pred, target_names=class_names))

Vous aimerez peut-être aussi