Skip to content

Allowexe/Projet_Java-IA-THS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet de Classification Audio (Chats vs Chiens)

Ce projet Java permet de classer des fichiers audio (WAV) en deux catégories : chats ou chiens. Il utilise une extraction de caractéristiques basée sur la FFT (Fast Fourier Transform) et des réseaux de neurones (Heavyside, Sigmoïde ou ReLU) pour l'entraînement et la prédiction.

Objectifs

  • Extraction de caractéristiques audio
    – Découper chaque fichier WAV en blocs de taille fixe (512 échantillons), calculer la FFT, puis agréger et normaliser les magnitudes pour obtenir un vecteur de caractéristiques (taille 512) pour chaque fichier.
  • Réseau de neurones unique ou double
    – Entraîner :
    • Un seul neurone (sortie 0 = chat, 1 = chien)
    • Deux neurones séparés (un neurone “chat” et un neurone “chien”, la classe prédite est celle dont la sortie est la plus élevée)
  • Évaluation et robustesse
    – Mesurer la précision sur un jeu de test (dossiers audio/test/**), tester la robustesse au bruit, suivre la convergence de la MSE, etc.
  • Interface Swing minimale
    – Certaines classes proposent une interface Swing pour charger un fichier WAV, afficher la FFT, tracer des courbes ou visualiser des résultats.

Prérequis

  • Java 17+ (ou toute version compatible Java 11/17)
  • Make (pour le Makefile)
  • Un interpréteur ou compilateur javac et le runtime java accessibles depuis la ligne de commande

Installation et compilation

  1. Cloner le dépôt sur votre machine :
git clone xxx
  1. Compiler tout le projet et générer les classes dans bin/ :
make all

Cela crée le dossier bin/ puis compile tous les fichiers sous FFT/, Son/, neurone/, reseau/, tests/ et le fichier MainMenu.java.

Structure du projet

<repo>/
├─ FFT/                      # Packages FFT (Complexe, FFTCplx, etc.)
├─ Son/                      # Package Son (lecture WAV)
├─ neurone/                  # Package Neurone (interfaces et implémentations Heavyside, Sigmoïde, ReLU)
├─ reseau/                   # Package Reseau (couche cachée + neurone de sortie)
├─ tests/                    # Classes de tests et utilitaires (GUI, évaluation, etc.)
├─ MainMenu.java             # Classe principale (optionnel menu de démarrage)
├─ makefile                  # Cible `all`, `run`, `javadoc`, `clean`
└─ README.md                 # Ce fichier

Dossiers de données audio

  • audio/train/cats/ : fichiers WAV de chats pour l'entraînement
  • audio/train/dogs/ : fichiers WAV de chiens pour l'entraînement
  • audio/test/cats/ : fichiers WAV de chats pour le test
  • audio/test/dogs/ : fichiers WAV de chiens pour le test
  • audio/modeles/ : dossier où seront sauvegardés les modèles (neurone chat / neurone chien)

Comment exécuter le projet

1. Lancer l'application principale

Utilisez :

make run
  • Cette commande assure que bin/ existe, compile le projet, crée éventuellement audio/modeles/, et exécute la classe MainMenu.
  • Selon l'implémentation de MainMenu, vous pourrez choisir une fonctionnalité (par exemple “Entraînement simple neurone”, “Entraînement double neurone”, “Test par lots”, etc.).

2. Exécuter une classe de test individuellement

Vous pouvez aussi lancer directement une des classes sous tests/, par exemple :

  • testReseau (entraînement d'un petit réseau à une couche sigmoïde pour la porte logique ET) :
    java -cp bin tests.testReseau
  • PredictWav (prédire la classe d'un fichier WAV à l'aide de deux neurones pré-entraînés) :
    java -cp bin tests.PredictWav
  • EntrainementDoubleNeurone (entraînement + test de deux neurones chat/chien) :
    java -cp bin tests.EntrainementDoubleNeurone
  • BatchTest (test de classification audio en mode simple ou double) :
    java -cp bin tests.BatchTest

Chaque classe a son propre mécanisme Swing pour demander les paramètres (fonction d'activation, learning rate, dossier à analyser, etc.).

Générer la documentation Javadoc

Pour créer une documentation Javadoc dans le dossier doc/, exécutez :

make javadoc
  • La commande javadoc -d doc ... parcourt tous les packages et génère la documentation HTML dans doc/.
  • Ouvrez doc/index.html dans votre navigateur pour consulter la documentation.

Nettoyage des fichiers compilés

Pour effacer le dossier des classes compilées, utilisez :

make clean

Cela supprime entièrement le répertoire bin/ et doc/.

Conseils d'utilisation

  1. Préparer les données audio

    • Placez vos fichiers WAV dans audio/train/cats/, audio/train/dogs/, audio/test/cats/ et audio/test/dogs/.
    • Veillez à ce que chaque dossier contienne suffisamment d'exemples (au moins un fichier de 512 échantillons ou plus).
  2. Choisir la fonction d'activation

    • Heavyside (seuil binaire)
    • Sigmoïde (fonction logistique)
    • ReLU (Rectified Linear Unit)
  3. Paramétrer le learning rate (pour ReLU)

    • Si vous optez pour ReLU, une boîte de dialogue vous demande un learning rate (par ex. 1e-5).
  4. Vérifier les résultats

    • Après l'entraînement, inspectez le pourcentage de classification correcte sur le jeu de test.
    • Certaines classes (par ex. NoiseRobustness) permettent d'évaluer la robustesse au bruit.
    • Des utilitaires Swing (AfficheurFFTConsole, AfficheurFFTGraphique, AfficheurFFTInteractif) montrent comment visualiser des FFT en console ou graphiquement.

Licence

Ce projet est placé sous MIT License.


About

Classification audio (miaulements vs aboiements) en Java avec FFT et neurone simple.

Topics

Resources

Stars

Watchers

Forks

Contributors