projet-reseaux-profond/notebook.ipynb

149 lines
147 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import PIL.Image\n",
"import glob\n",
"import os"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"IMAGE_SIZE = (150, 400, 3)\n",
"DATASET_PATH = \"./dataset/\"\n",
"DATASET_PATH = os.path.abspath(DATASET_PATH)\n",
"CLASSES = glob.glob(f\"{DATASET_PATH}/*\")\n",
"CLASSES = list(map(lambda f: f.split(\"/\")[-1], CLASSES))\n",
"\n",
"print(DATASET_PATH)\n",
"print(CLASSES)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def load_data():\n",
" # Récupération des fichiers\n",
" files = glob.glob(f\"{DATASET_PATH}/**/*.jpg\", recursive = True)\n",
"\n",
" # Initialise les structures de données\n",
" x = np.zeros((len(files), *IMAGE_SIZE))\n",
" y = np.zeros((len(files), 1))\n",
"\n",
" for i, path in enumerate(files):\n",
" # Lecture de l'image\n",
" img = PIL.Image.open(path)\n",
" \n",
" # Remplissage de la variable x\n",
" x[i] = np.asarray(img)\n",
"\n",
" # On récupère l'index dans le path\n",
" class_label = path.split(\"/\")[-2]\n",
"\n",
" # On récupère le numéro de la classe à partir du string\n",
" class_label = CLASSES.index(class_label)\n",
" \n",
" # Remplissage de la variable y\n",
" y[i] = class_label\n",
"\n",
" return x, y"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"x, y = load_data()\n",
"x = x / 255"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x504 with 9 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"# Randomisation des indices et affichage de 9 images alétoires de la base d'apprentissage\n",
"indices = np.arange(x.shape[0])\n",
"np.random.shuffle(indices)\n",
"\n",
"plt.figure(figsize=(12, 7))\n",
"for i in range(0, 9):\n",
" plt.subplot(3, 3, i+1)\n",
" plt.title(CLASSES[int(y[i])])\n",
" plt.imshow(x[i])\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".env",
"language": "python",
"name": ".env"
},
"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.8.10"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}