AnalyseMorphologique/README.md
Djalim Simaila 914d6bb7cb 📝 docs(README.md): capitalize the first letter of the title
The first letter of the title "Analyse morphologique" was not capitalized, which is inconsistent with the usual capitalization rules for titles.

🖼️ chore(README.md): update image and fix typo in rotation instructions
The image in the README.md file was updated to reflect the correct rotation instructions. A typo in the rotation instructions was also fixed.

👥 chore(README.md): fix typo in contributor's role
A typo in the role of one of the contributors was fixed.

🐛 fix(data_processing.py): add missing half discretisation values to L calculation
The calculation of L in the get_advanced_data function of data_processing.py was missing half the discretisation values at the beginning and end of the object.

🐛 fix(input.py): remove print statement
A print statement was accidentally left in the from_xyz_file method of the ScannedObject class in input
2023-05-12 09:13:21 +02:00

5.8 KiB

Analyse Morphologique

"Analyse morphologique" est un outil développé par le laboratoire de géomécanique du centre PACA d'INRAE. Son objectif est d'extraire des informations sur la morphologie de scans 3D provenant de tests HET (Hydraulic Erosion Test).

Fonctionnalités

L'outil dispose des fonctionnalités suivantes :

Analyse de l'objet

  • Lecture de fichiers .obj et .xyz
  • Redressement et normalisation de l'objet
  • Discrétisation de l'objet en couches de taille égale
  • Calcul d'indices morphologiques
  • Export des indices morphologiques dans un fichier

Affichage de graphiques

L'outil permet également l'affichage de plusieurs graphiques, tels que :

  • Le maillage de l'objet
  • La coupe de l'objet sur les axes xz et yz
  • L'évolution du rayon moyen en fonction de la hauteur
  • L'évolution de la différence entre le rayon moyen de chaque couche et la moyenne des rayons moyens en fonction de la hauteur
  • La coupe d'une couche sélectionnée
  • L'évolution de la différence entre le rayon de chaque point et le rayon moyen de la couche en fonction de l'angle theta (de 0 à 2pi).

images/1.png images/2.png images/3.png


Installation et utilisation

Veuillez noter que ce programme nécessite une version de Python 3.10 ou supérieure.

Pour utiliser le programme, vous pouvez le cloner à partir du dépôt Git ou télécharger l'une des versions disponibles et installer les dépendances à l'aide de pip.

git clone https://forgemia.inra.fr/scanner3d/analysemorphologique.git
cd analysemorphologique
pip install -r requirements.txt
python main.py

Problème de compatibilité avec la bibliothèque pyQt et utilisation de l'environnement virtuel

Si vous utilisez Anaconda, il est possible que vous rencontriez des problèmes avec la bibliothèque pyQt. Vous pourriez rencontrer une erreur telle que :

line 9, in <module>
from PyQt5.QtWidgets import QApplication
ImportError: DLL load failed while importing QtWidgets: La procédure spécifiée est introuvable.

Cependant, vous pouvez toujours utiliser le programme en créant un environnement virtuel avec les dépendances nécessaires. Pour cela, vous devez créer un environnement virtuel, l'activer, puis installer les dépendances.

pip install venv
python -m venv venv
# Pour les utilisateurs de windows
venv\Scripts\activate.bat
# Pour les utilisateurs de linux ou mac
source venv/bin/activate
pip install -r requirements.txt
python main.py

Instructions pour l'utilisation des graphiques 2D et 3D

Graphiques 2D :

  • Pour zoomer, utilisez la molette de la souris.
  • Pour vous déplacer, cliquez sur le graphique et déplacez la souris.
  • Pour modifier l'échelle, cliquez avec le bouton droit de la souris sur le graphique et déplacez la souris :
    • vers le haut pour augmenter l'échelle de l'axe y.
    • vers le bas pour diminuer l'échelle de l'axe y.
    • vers la gauche pour diminuer l'échelle de l'axe x.
    • vers la droite pour augmenter l'échelle de l'axe x.

Graphiques 3D :

  • Pour zoomer, utilisez la molette de la souris ou maintenez le clic droit et déplacez la souris vers le haut ou le bas.
  • Pour vous déplacer, maintenez le bouton 'Majuscule', puis cliquez sur le graphique et déplacez la souris.
  • Pour effectuer une rotation, maintenez le clic gauche et déplacez la souris :
    • pour une rotation autour de l'axe x, déplacez la souris vers le haut ou le bas dans la zone indiquée en bleu.
    • pour une rotation autour de l'axe y, déplacez la souris dans une trajectoire de cercle suivant la zone indiquée en vert.
    • pour une rotation autour de l'axe z, déplacez la souris vers la gauche ou la droite dans la zone indiquée en rouge.

images/4.png


Informations et Documentation pour les Developpeurs

Informations

  • Convention des variables :
    • snake_case pour les fonctions et les variables.
    • PascalCase pour les classes.
  • Les imports sont relatif au fichier exécuté. (ici main.py)
  • L'interface graphique est modifiable avec Qt Designer.
    • Le fichier .ui est ensuite converti en fichier .py avec la commande suivante : pyuic5 -x <fichier.ui> -o <fichier.py>
  • Le code est commenté et documenté en anglais.
  • Le backend du rendu de graphe "matplotlib" n'est (actuellement) pas compatible avec le programme. Il peut cepandant etre utilisé independamment du programme pour des scripts ou des notesbooks.

Stack trace de l'analyse d'un fichier .obj :

flowchart TD
    A(app.py)-- calls --> B(MainWindow.py)
    B -- event loop--> B
    B -- calls in a thread --> C(PreProcessWorker.py)
    C -- When finished, triggers and calls in a thread --> D(RawDataWorker.py)
    C -- When finished, triggers and calls in a thread --> E(DiscreteDataWorker.py)
    D -- Stores results in --> B
    D --> G(Save result in a file)
    E -- Stores results in --> B
    E --> G
    E -- When finished triggers and calls in a thread --> F(AdvancedDataWorker.py)
    F -- Stores results in --> B

Contributeurs

  • Djalim SIMAILA : mail, github

    • Implementation de la specification du projet.
  • Alexis DOGHMANE : mail

    • Redacteur des specifications du projet.

Avec du code de :

  • Jerome Duriez : mail

    • Redressement de l'objet 3D en passant par un alignement des axes de l'espace avec les axes d'inertie de l'objet 3D.
  • Rick van Hattem : mail

    • Code permettant de calculer le centre de gravité d'un objet, la matrice d'inertie et le volume d'un objet 3D. source