AnalyseMorphologique/exemple d'utilisation de l'api.ipynb
2023-06-23 08:23:44 +00:00

361 lines
52 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exemple d'utilisation de l'api de l'application"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Importer/Lire les données d'un fichier\n",
"\n",
"Pour utiliser un fichier, il faut d'abord le lire et extraire les données qui nous intéressent (ici, les coordinnées des points, ainsi que les informations sur les faces de l'objet si disponible).\n",
"Pour ce faire on passe par une classe qui abstrait le fichier, et qui permet de récupérer les données sous forme d'une classe nommée `ScannedObject`.\n",
"\n",
"Cette classe possède la methode `from_file` qui permet de lire un fichier stl,obj ou xyz et de le convertir en objet `ScannedObject`.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from utils.files.input import ScannedObject\n",
"obj = ScannedObject.from_file('exemple_file/exemple.obj')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Une instance de `ScannedObject` uniquement les données qui nous intéressent, à savoir les points et les faces de l'objet, toute autres données sont ignorées.\n",
"Nous pouvons donc visualiser les données en utilisant les methodes `get_vertices` et `get_faces` qui renvoient respectivement les points et les faces de l'objet."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ -15.27013 -102.8562 -21.04008]\n",
" [ -15.05591 -102.8562 -21.19151]\n",
" [ -15.05591 -102.9366 -21.04008]\n",
" [ -12.83076 -98.88948 -14.36465]\n",
" [ -12.83076 -98.81498 -14.64281]]\n",
"[[ 0 1 2]\n",
" [ 3 4 5]\n",
" [ 5 6 3]\n",
" [ 7 8 9]\n",
" [ 2 1 10]]\n"
]
}
],
"source": [
"vertices = obj.get_vertices()\n",
"print(vertices[:5])\n",
"faces = obj.get_faces()\n",
"print(faces[:5])"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Comme beaucoup des autres methode de la classe `ScannedObject`, ces deux methodes possèdent des paramètres optionnels qui permettent d'alterer les données renvoyées.\n",
"Par exemple, la methode `get_vertices` possède un paramètre `sort` qui permet de trier les points par ordre croissant de leur coordonnée z, et la methode `get_faces` possède un paramètre `resolved` qui permet de renvoyer les faces sous forme de liste de points au lieu de liste d'indices de points."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[array([ -4.208344, -101.4655 , -25.25799 ]), array([ -4.208344, -101.1874 , -25.24189 ])]\n",
"[[[ -15.27013 -102.8562 -21.04008]\n",
" [ -15.05591 -102.8562 -21.19151]\n",
" [ -15.05591 -102.9366 -21.04008]]\n",
"\n",
" [[ -12.83076 -98.88948 -14.36465]\n",
" [ -12.83076 -98.81498 -14.64281]\n",
" [ -12.94191 -98.96223 -14.64281]]]\n"
]
}
],
"source": [
"vertices = obj.get_vertices(sort=True)\n",
"print(vertices[:2])\n",
"faces = obj.get_faces(resolved=True)\n",
"print(faces[:2])"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Nous pouvons avoir une visualisation de l'objet 3D via les methodes de rendu3D integrées au programme:\n",
"\n",
"- Via la bibliotheque mathplotlib : La methode la plus simple a manier au niveau du code, cepandant **tres lente** lorsqu'il y a un nombre important de données, pour les visualisation de ce notebook nous utiliserons cette methode\n",
" \n",
"- Via la bibliotheque vispy : Methode moin intuitive mais plus performante du fait de l'utilisation d'openGL pour le rendu graphique, c'est la methode utilisé pour les graphes de l'interface graphique du programme"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils.graph3D.mpl_render import render3D\n",
"render3D(obj)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Alterer les données d'un objet\n",
"\n",
"Une fois que nous avons un objet `ScannedObject`, nous pouvons normaliser les données en utilisant la methode `normalize` qui prend en paramètre le ou les axes sur lesquels normaliser les données."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"z minimal pre-normalisation :-25.25799\n",
"z minimal post-normalisation :0.0\n"
]
}
],
"source": [
"# On recupere le z le plus petit\n",
"min_z = obj.get_vertices(sort=True)[0][2]\n",
"print(f\"z minimal pre-normalisation :{min_z}\")\n",
"obj.normalise('z')\n",
"min_z = obj.get_vertices(sort=True)[0][2]\n",
"print(f\"z minimal post-normalisation :{min_z}\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Nous pouvons aussi verticaliser un fichier scanné, pour cela il faut importer la fonction verticalise du module `utils.math.position_manipulation`"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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dDodQ1LCxEk5Q59xZ3cEqO4G5/70jxe++vn4lShcjSjIcKUGr2zaRFneZDEu8XrBoCOt7QZUdDdMHM+ZlBIdYRgKRTPuSuudNs1oE5oZIh0XxZOTknLt5JSzW/Dqa28eOmo4QvGQJlypv/fPP8P5JHib8JQQMZIu8A6vnb/F577YedSgALdWcPsmXD8FVbhz8xaSMuKOuKJZcTfm7QYdM1a3lHHBXI3p4QP+m7/yp7h5M6aLhycnjvmEK1X7jHuh9pnl4sZuKk+d0VIwAzNI7P61qfCdV6Bn6A3GdA83eOm98OEX73KxvuBr3z9nfQkffkG5fnaCz5WxLJlK4tc/+xX++s/91IETh2MSBRmu1PNP3eKrrz4kjwt8nugqdAytjbs3rvF5uc8IsJtuRges7f6/18/gfS8ObLYz/+Z3X+fWKbx4t3DzfTcwOnWamLWSN87J6oyHj9YHTBqOURRkuFK/+PEf4nuvfppJMts2s1gtsZzIokhzXn4JpgwVpU7G2w9gew4f+xA8c/smLk47XfCe55ZoTojvVsSKOcO4gtZAtohkLMXXOTxZ8RtkuHK1Vv7ur3x6V3AmFC1UA7cJbxvSuEJ1iYqhuXBx+QDajEhmXJ4g7NY0qGbm6YJhWNLcmbfnlLIkJcXNWGTnv/6Lnzx03HBE4il2uHKlFP7cy+/jztmIpgHDqXULwHY7kfNI94b3Tt2uWQxLTk5usViu6NUwOqSEuADsnnyboWXJbI2pzgiVa6uTQ8YMRygKMuzFxz/wAn/z5/4EP/+x5/G6oZQRFUNGxXqn+YwraC5Agt7pc2O5HEmS2U4bulVqF5CMSAJxBhVSUi63W4rMh44ZjkwUZNirl9/7DH/z53+cm6eJ84ePGH1BpVEkgxRqm2i905OQxhOqNYzOkEfMHRXBekVk9w63mwBGks577j596HjhyERBhr27feOM/+rPfoJPfOgu3TupdsSceXsBmnAxeutM8/muAB3MARV0yJg5qJIXKzQvsZYZlre5cz1uscOTFQUZDuYXPvEy11YLOok2r0mD4hgJRXMiaaIMhWaJbhVBabWiRXGDzcUjSqp89Pnr/OLL7+GFu08dOlI4MvEUOxzUxeWWf/e17/A7X/4mQqGUFYjh4mgacGtoGgFnurzPe+4+xQtPX+eZa0uevn7C2VlM8QlXJwoy/Afh97/xCt966yGb9ZaLyw2bOmPeKYsFRWCphR/7wHP86AdePPRHDe8iUZAhhPAY8RtkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8RhRkCCE8xv8N+Sbk38WcWKAAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 500x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils.math.position_manipulation import verticalise\n",
"verticalise(obj)\n",
"render3D(obj)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calculer les indicateurs"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Le calcul des indicateurs ce fait par le module `utils.data_processing.data_processing`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"from utils.data_processing.data_processing import get_discrete_data, get_advanced_data,get_raw_data\n",
"\n",
"raw_data = get_raw_data(obj, ndigits=3, delta_z=1)\n",
"discrete_data = get_discrete_data(obj, ndigits=3, delta_z=1)\n",
"morphological_data = get_advanced_data(discrete_data,raw_data)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X (en mm) : [3.517,3.301,3.33,...]\n",
"Y (en mm) : [0.468,0.284,0.677,...]\n",
"Z (en mm) : [-73.741,-73.731,-73.728,...]\n",
"theta (en rad) : [0.877,0.878,0.807,...]\n",
"rayon (en mm) : [4.009,3.725,4.009,...]\n",
"Xi-Xmoy : [3.082,2.866,2.896,...]\n",
"Yi-Ymoy : [2.564,2.379,2.772,...]\n"
]
}
],
"source": [
"for key, value in raw_data.items():\n",
" print(f\"{key} : [{value[0]},{value[1]},{value[2]},...]\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X moy (en mm) : [0.435,0.14,1.368,...]\n",
"Y moy (en mm) : [-2.095,-1.837,-3.44,...]\n",
"Z moy (en mm) : [-72.991,-71.519,-70.5,...]\n",
"Discretisation(en mm) : [1.741,0.998,0.998,...]\n",
"Rayon moyen (en mm) : [6.756,8.106,7.596,...]\n",
"Rayon ecart type (en mm) : [2.6,2.407,2.762,...]\n"
]
}
],
"source": [
"for key, value in discrete_data.items():\n",
" print(f\"{key} : [{value[0]},{value[1]},{value[2]},...]\")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tortuosité : 1.0797297570494615\n",
"Volume en mm3 : 13505.551076405092\n",
"Surface en mm2 : 5201.0729735920295\n",
"<R> : 5.064711656441718\n",
"<R²> : 26.302927226993862\n",
"σ_<R> : 0.8097193518068154\n",
"σ_<R>^tot : 1.4360271048515636\n",
"H : 163.44\n",
"L : 163.5244273857001\n",
"l : 176.5621902528143\n",
"MI_l : 0.1598747187862013\n",
"MI_p : 0.2341636776566463\n",
"R_max : 8.106\n",
"MI_mR : 1.6004859802216225\n",
"MI_mH : 0.04959618208516887\n",
"MI_mR_in : 0.20265\n",
"V_scan : 0\n",
"R_V_scan : 0.0\n",
"S_V_scan : 0.0\n",
"Rayon hydraulique R_h : 5.193371115913308\n",
"HI : 0.0\n"
]
}
],
"source": [
"for key, value in morphological_data.items():\n",
" print(f\"{key} : {value}\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Nous pouvons apres enregistrer ces resultats dans un fichier csv par exemple"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from utils.files.output import format_data, save_output_file\n",
"\n",
"string = format_data(raw_data,\";\")\n",
"save_output_file(\"result.csv\",string)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.3"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}