-
Notifications
You must be signed in to change notification settings - Fork 0
/
TPF_ModeloCNN_CargaImágenes y RtaVoz
1 lines (1 loc) · 172 KB
/
TPF_ModeloCNN_CargaImágenes y RtaVoz
1
{"cells":[{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":7,"status":"ok","timestamp":1717957537201,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"rVomi3VaoeJy","outputId":"71a4794a-8ad4-4a71-8345-5ace6910c764"},"outputs":[{"output_type":"stream","name":"stdout","text":["Failed to load (likely expired) https://storage.googleapis.com/kaggle-data-sets/111880/269359/bundle/archive.zip?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com%2F20240602%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240602T202631Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=4f332d0fb3ca065027acca0dfe4b89ce077bf569d7c62d4d61c94aa9c74d50cf95cd3ed9c4c39b3c439852afdfcd0113f67f9db54f9ce449dddbd33648272bee38c3425f043c86dc547cbff27b6e284abcf1825dba293ef27b10807ed74c3cf727a0a7ce4507fc73a97e756d9ba7d8c0241eeaa59e629ec3c13a2348c7d75d6527432a4b3f4f83449b33814565207bade8b4960ee4a6b2a0863570a5ee38e73171ee2b0f51753f3100fddd56c92f0a8d3e437ca7899bff73501a5eb09a940791a528bdc225b53d6efda312da31823dc9bbc51d88fc3fb0d5799b2ea1bba59d5fb4e39431e82f1b9d8e818be30e4866b8e32e29c8d5eb8c79cb90e7997dad0747 to path /kaggle/input/intel-image-classification\n","Data source import complete.\n"]}],"source":["\n","# IMPORTANT: RUN THIS CELL IN ORDER TO IMPORT YOUR KAGGLE DATA SOURCES\n","# TO THE CORRECT LOCATION (/kaggle/input) IN YOUR NOTEBOOK,\n","# THEN FEEL FREE TO DELETE THIS CELL.\n","# NOTE: THIS NOTEBOOK ENVIRONMENT DIFFERS FROM KAGGLE'S PYTHON\n","# ENVIRONMENT SO THERE MAY BE MISSING LIBRARIES USED BY YOUR\n","# NOTEBOOK.\n","\n","import os\n","import sys\n","from tempfile import NamedTemporaryFile\n","from urllib.request import urlopen\n","from urllib.parse import unquote, urlparse\n","from urllib.error import HTTPError\n","from zipfile import ZipFile\n","import tarfile\n","import shutil\n","\n","CHUNK_SIZE = 40960\n","DATA_SOURCE_MAPPING = 'intel-image-classification:https%3A%2F%2Fstorage.googleapis.com%2Fkaggle-data-sets%2F111880%2F269359%2Fbundle%2Farchive.zip%3FX-Goog-Algorithm%3DGOOG4-RSA-SHA256%26X-Goog-Credential%3Dgcp-kaggle-com%2540kaggle-161607.iam.gserviceaccount.com%252F20240602%252Fauto%252Fstorage%252Fgoog4_request%26X-Goog-Date%3D20240602T202631Z%26X-Goog-Expires%3D259200%26X-Goog-SignedHeaders%3Dhost%26X-Goog-Signature%3D4f332d0fb3ca065027acca0dfe4b89ce077bf569d7c62d4d61c94aa9c74d50cf95cd3ed9c4c39b3c439852afdfcd0113f67f9db54f9ce449dddbd33648272bee38c3425f043c86dc547cbff27b6e284abcf1825dba293ef27b10807ed74c3cf727a0a7ce4507fc73a97e756d9ba7d8c0241eeaa59e629ec3c13a2348c7d75d6527432a4b3f4f83449b33814565207bade8b4960ee4a6b2a0863570a5ee38e73171ee2b0f51753f3100fddd56c92f0a8d3e437ca7899bff73501a5eb09a940791a528bdc225b53d6efda312da31823dc9bbc51d88fc3fb0d5799b2ea1bba59d5fb4e39431e82f1b9d8e818be30e4866b8e32e29c8d5eb8c79cb90e7997dad0747'\n","\n","KAGGLE_INPUT_PATH='/kaggle/input'\n","KAGGLE_WORKING_PATH='/kaggle/working'\n","KAGGLE_SYMLINK='kaggle'\n","\n","!umount /kaggle/input/ 2> /dev/null\n","shutil.rmtree('/kaggle/input', ignore_errors=True)\n","os.makedirs(KAGGLE_INPUT_PATH, 0o777, exist_ok=True)\n","os.makedirs(KAGGLE_WORKING_PATH, 0o777, exist_ok=True)\n","\n","try:\n"," os.symlink(KAGGLE_INPUT_PATH, os.path.join(\"..\", 'input'), target_is_directory=True)\n","except FileExistsError:\n"," pass\n","try:\n"," os.symlink(KAGGLE_WORKING_PATH, os.path.join(\"..\", 'working'), target_is_directory=True)\n","except FileExistsError:\n"," pass\n","\n","for data_source_mapping in DATA_SOURCE_MAPPING.split(','):\n"," directory, download_url_encoded = data_source_mapping.split(':')\n"," download_url = unquote(download_url_encoded)\n"," filename = urlparse(download_url).path\n"," destination_path = os.path.join(KAGGLE_INPUT_PATH, directory)\n"," try:\n"," with urlopen(download_url) as fileres, NamedTemporaryFile() as tfile:\n"," total_length = fileres.headers['content-length']\n"," print(f'Downloading {directory}, {total_length} bytes compressed')\n"," dl = 0\n"," data = fileres.read(CHUNK_SIZE)\n"," while len(data) > 0:\n"," dl += len(data)\n"," tfile.write(data)\n"," done = int(50 * dl / int(total_length))\n"," sys.stdout.write(f\"\\r[{'=' * done}{' ' * (50-done)}] {dl} bytes downloaded\")\n"," sys.stdout.flush()\n"," data = fileres.read(CHUNK_SIZE)\n"," if filename.endswith('.zip'):\n"," with ZipFile(tfile) as zfile:\n"," zfile.extractall(destination_path)\n"," else:\n"," with tarfile.open(tfile.name) as tarfile:\n"," tarfile.extractall(destination_path)\n"," print(f'\\nDownloaded and uncompressed: {directory}')\n"," except HTTPError as e:\n"," print(f'Failed to load (likely expired) {download_url} to path {destination_path}')\n"," continue\n"," except OSError as e:\n"," print(f'Failed to load {download_url} to path {destination_path}')\n"," continue\n","\n","print('Data source import complete.')\n"]},{"cell_type":"code","execution_count":2,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":28440,"status":"ok","timestamp":1717957571683,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"Te-u8k8MUyv0","outputId":"02fc7d0b-386a-407c-ce34-2e9a62aca312"},"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"markdown","metadata":{"id":"L248uxhQqjtW"},"source":["# **INSTITUTO SUPERIOR POLITÉCNICO CÓRDOBA**\n","\n","# **Módulo Científico de Datos**\n","### **TPF: Clasificación de Imágenes utilizando Redes Neuronales Convulcionales**\n","\n"," ### **Grupo 18:**\n"," Viviana Farabollini\n"," Mariano Ledezma\n"," Natalia Lamia\n","\n"]},{"cell_type":"markdown","metadata":{"id":"MU_bxoMHqsNq"},"source":["\n","Para realizar el presente trabajo utilizamos el dataset proporcionado por \"Kaggle Intel Image Classification\" del siguiente link: https://www.kaggle.com/puneet6060/intel-image-classification/data\n","\n","\n","El mismo posee 3 carpetas las cuales contienen:\n","\n","1. Carpeta de entrenamiento:\n"," + 6 carpetas con las imagenes para entrenar.\n","2. Carpeta de test:\n"," + 6 carpetas con las imagenes para testear.\n","3. Carpeta de predicción:\n"," + Imagenes para que el modelo prediga su clasificación.\n"," \n","## **Objetivo:**\n","\n","* Desarrollar y entrenar un modelo de Red Neuronal Convolucional (CNN) para clasificar y predecir imágenes organizadas en una estructura grid, con el objetivo de facilitar la futura construcción de una aplicación para una agencia de turismo.\n","\n","\n","\n","\n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"gSdYmlmlQq7G"},"source":["#**Importación de librerías**"]},{"cell_type":"code","execution_count":3,"metadata":{"id":"tWs2ya5kVFAn","executionInfo":{"status":"ok","timestamp":1717957582448,"user_tz":180,"elapsed":4229,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"}}},"outputs":[],"source":["# Procedemos a importar las librerias necesarias para desarrollar el proyecto.\n","\n","import numpy as np\n","import os\n","from tensorflow.keras import Sequential\n","from sklearn.metrics import confusion_matrix\n","from tensorflow.keras.layers import Conv2D, MaxPool2D, Dropout, Dense, Flatten, Reshape, Conv2DTranspose, UpSampling2D, Input,MaxPooling2D\n","from tensorflow.keras import Model\n","import seaborn as sn\n","from tensorflow.keras.optimizers import SGD\n","import warnings\n","warnings.filterwarnings(\"ignore\")\n","\n","from keras.preprocessing.image import ImageDataGenerator\n","import matplotlib.pyplot as plt"]},{"cell_type":"markdown","metadata":{"id":"XeaCihe3Q1KF"},"source":["# **Carpeta contenedora del DATASET**"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":671,"status":"ok","timestamp":1717957591431,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"aVnIFHgRVyJ2","outputId":"2e4f58f7-83bd-4de9-a69e-09ea332b9984"},"outputs":[{"output_type":"stream","name":"stdout","text":["[Errno 2] No such file or directory: '/kaggle/input/intel-image-classification'\n","/content\n"]}],"source":["# Nos desplazamos por el Drive hasta la carpeta contenedora del DataSet.\n","%cd '/kaggle/input/intel-image-classification'"]},{"cell_type":"markdown","metadata":{"id":"TXfsE3XXRDWF"},"source":["# **Definición de Rutas**"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"GgHxhvsxWEtR"},"outputs":[],"source":["# Definimos las rutas donde se alojan los datos.\n","train = 'seg_train/seg_train/'\n","validation = 'seg_test/seg_test/'\n","test = 'seg_pred/'"]},{"cell_type":"markdown","metadata":{"id":"gcUr8MIrczT_"},"source":["# **Definición del Generador de Datos**"]},{"cell_type":"markdown","metadata":{"id":"417qjXAqRLpV"},"source":["## **Preparación de imágenes para entrenamiento, validación y prueba**"]},{"cell_type":"markdown","metadata":{"id":"uCeE53YSRlyb"},"source":["Con la importación de la clase 'ImageDataGenerator' de Keras, se generan lotes de datos de imágenes con aumentos y transformaciones en tiempo real.\n","\n"," **Creación de *instancias* de ImageDataGenerator:**\n","\n"," Se crean tres instancias para los conjuntos de datos: *entrenamiento, validación y prueba*. El argumento rescale=1./255 normaliza los valores de los píxeles de las imágenes al rango [0, 1] (originalmente los valores de los píxeles están en el rango [0, 255]).\n","\n","\n","**Configuración del generador de datos de entrenamiento:**\n","\n","*train:* Directorio donde se encuentran las imágenes de entrenamiento.\n","\n","*batch_size=32*: Las imágenes se procesan en lotes de 32.\n","\n","*target_size=(150, 150):* Las imágenes se redimensionan a 150x150 píxeles.\n","\n","*class_mode='categorical'*: Se asume que las etiquetas de las imágenes son categóricas (más de dos clases).\n","\n","\n","**Configuración del generador de datos de validación:**\n","\n","*validation:* Directorio donde se encuentran las imágenes de validación.\n","\n","*batch_size=32:* Las imágenes se procesan en lotes de 32.\n","\n","*shuffle=False:* Las imágenes no se mezclan, lo cual es útil para mantener un orden predecible durante la evaluación.\n","\n","*target_size=(150, 150):* Las imágenes se redimensionan a 150x150 píxeles.\n","\n","*class_mode='categorical':* Se asume que las etiquetas de las imágenes son categóricas.\n","\n","**Configuración del generador de datos de prueba:**\n","\n","*test:* Directorio donde se encuentran las imágenes de prueba.\n","\n","*target_size=(150,150):* Las imágenes se redimensionan a 150x150 píxeles.\n","\n","*batch_size=1:* Las imágenes se procesan una a una, lo cual puede ser útil para la evaluación precisa de cada imagen de prueba.\n","\n","Así, en el siguiente script se prepara los datos de imágenes para el modelo de red neuronal, asegurando que todas las imágenes tengan el mismo tamaño y estén normalizadas, lo que es crucial para un entrenamiento eficaz del modelo.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1186,"status":"ok","timestamp":1717467104186,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"MUODYc1uYrTB","outputId":"6ef4a1b5-5b1d-4510-b49d-159f06f9c17f"},"outputs":[{"name":"stdout","output_type":"stream","text":["Found 14034 images belonging to 6 classes.\n","Found 3000 images belonging to 6 classes.\n","Found 7301 images belonging to 1 classes.\n"]}],"source":["# Utilizamos la libreria proporcionada por Keras para leer las imagenes del DataSet.\n","\n","train_datagen = ImageDataGenerator(rescale = 1./255)\n","\n","validation_datagen = ImageDataGenerator(rescale = 1./255)\n","\n","train_generator = train_datagen.flow_from_directory(train,\n"," batch_size=32,\n"," target_size = (150, 150),\n"," class_mode='categorical')\n","\n","validation_generator = validation_datagen.flow_from_directory(validation,\n"," batch_size=32,\n"," shuffle=False,\n"," target_size = (150, 150),\n"," class_mode='categorical')\n","\n","\n","test_datagen = ImageDataGenerator(rescale = 1./255)\n","test_generator = test_datagen.flow_from_directory(test, target_size = (150, 150), batch_size = 1)"]},{"cell_type":"markdown","metadata":{"id":"dEHUm8XUWiZK"},"source":["## **Clases**"]},{"cell_type":"markdown","metadata":{"id":"_rtzVIF9XEFS"},"source":["**Nombres de las clases**\n","\n","*train_generator.class_indices:* Esta propiedad del objeto train_generator devuelve un diccionario que asigna nombres de clases a sus respectivos índices. Por ejemplo, {'buildings': 0, 'forest': 1 ......etc.}.\n","\n","Se imprime el diccionario de nombres de clases y sus índices, lo cual es útil para verificar que las clases han sido correctamente identificadas y asignadas.\n","\n","*list(class_names.keys()):* convierte las claves del diccionario class_names (que son los nombres de las clases) en una lista.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":338,"status":"ok","timestamp":1717467112897,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"5y-i6yRKZOJv","outputId":"f8c5f824-49cf-421a-91ff-892c94b3281e"},"outputs":[{"name":"stdout","output_type":"stream","text":["{'buildings': 0, 'forest': 1, 'glacier': 2, 'mountain': 3, 'sea': 4, 'street': 5}\n"]}],"source":["# Obtenemos los nombres de las clases.\n","class_names = train_generator.class_indices\n","print(class_names)\n","label=list(class_names.keys())"]},{"cell_type":"markdown","metadata":{"id":"j6vlAxh4dK5I"},"source":["# **Visualización de los Datos**"]},{"cell_type":"markdown","metadata":{"id":"MxPDN8ElYFIO"},"source":["## **Iteración sobre el generador de datos de entrenamiento**"]},{"cell_type":"markdown","metadata":{"id":"RDdSt1jVZQy-"},"source":["Utilizando las bibliotecas *matplotlib.pyplot* y *numpy*\n","\n","Se un bucle que itera sobre los lotes de datos generados por *train_generator*. En cada iteración, *img_batch* contiene un lote de imágenes y *label_batch* contiene el correspondiente lote de etiquetas.\n","\n","Se imprime la forma del lote de imágenes. Por ejemplo, si *batch_size=32* y las imágenes se redimensionan a 150x150 píxeles con 3 canales de color (RGB), la forma será (32, 150, 150, 3).\n","\n","Se crea una nueva figura de Matplotlib con un tamaño especificado de 20x10 pulgadas, que será utilizada para mostrar las imágenes del lote.\n","\n","Se construye un bucle que itera sobre las 32 imágenes en el lote.\n","\n","*sub = plt.subplot(4, 8, ix + 1):* Crea un subgráfico en la figura con una cuadrícula de 4 filas y 8 columnas. ix + 1 indica la posición del subgráfico.\n","\n","*plt.imshow(img_batch[ix]):* Muestra la imagen ix del lote.\n","\n","*plt.xticks([])* y *plt.yticks([]):* Elimina las marcas de los ejes x e y para que la visualización sea más clara.\n","\n","*plt.xlabel(label[np.argmax(label_batch[ix])]):* Muestra el nombre de la clase como la etiqueta del eje x. *np.argmax(label_batch[ix])* obtiene el índice de la clase con la mayor probabilidad para la imagen ix, y label se usa para obtener el nombre de la clase correspondiente.\n","\n","De este modo, se puede visualizar un lote de imágenes junto con sus etiquetas, asegurando que el generador de datos funciona correctamente y que las imágenes están etiquetadas de manera adecuada; y, se puede verificar visualmente que las imágenes han sido correctamente preprocesadas (redimensionadas y normalizadas).\n","\n","\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":629,"output_embedded_package_id":"1k8FB-nffu1I1fd9TH9NDOM7I4mmmKOCU"},"executionInfo":{"elapsed":5239,"status":"ok","timestamp":1717467125486,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"sOhcAoWrZTi_","outputId":"48e3c631-cad6-4156-e2f7-c9056015bd02"},"outputs":[{"output_type":"display_data","data":{"text/plain":"Output hidden; open in https://colab.research.google.com to view."},"metadata":{}}],"source":["# Imprimimos algunas imagenes que se utilizarán en el entrenamiento con su respectivo rótuolo.\n","for img_batch,label_batch in train_generator:\n"," print(img_batch.shape)\n"," plt.figure(figsize=(20,10))\n"," for ix in range(32):\n"," sub = plt.subplot(4, 8, ix + 1)\n"," plt.imshow(img_batch[ix])\n"," plt.xticks([])\n"," plt.yticks([])\n"," plt.xlabel(label[np.argmax(label_batch[ix])])\n"," break"]},{"cell_type":"markdown","metadata":{"id":"IkrM3fnpcQR4"},"source":["# **Creación del Modelo**"]},{"cell_type":"markdown","metadata":{"id":"irLaiVhoepSV"},"source":["## **Definición de la función *build_model***\n","\n","Esta función acepta un parámetro input_shape con un valor predeterminado de (150, 150, 3), que representa el tamaño de entrada de las imágenes (150x150 píxeles y 3 canales de color RGB).\n","\n","## **Inicialización del Modelo Secuencial**\n","\n","Se crea una instancia del modelo secuencial de Keras, lo que permite agregar capas de la red neuronal de manera lineal.\n","\n","* *Primer capa convulcional:* Agrega una capa convolucional con 64 filtros, un tamaño de kernel de 3x3, un paso (stride) de 2x2, relleno (padding) 'same' para conservar el tamaño de la entrada, y la función de activación ReLU. Esta capa también especifica el tamaño de entrada input_shape.\n","\n","* *Segunda capa convulcional:* Agrega una segunda capa convolucional con 128 filtros y las mismas configuraciones de kernel, stride, padding y activación que la primera capa, excepto el input_shape.\n","\n","* *Capa de Max Pooling:* Agrega una capa de max pooling con tamaño de pool predeterminado (2x2), que reduce la dimensión espacial de la salida de la capa convolucional anterior.\n","\n","* *Tercer capa convulcional:* Agrega una tercera capa convolucional con 256 filtros y las mismas configuraciones de kernel, stride, padding y activación.\n","\n","* *Cuarta capa convulsional:* Agrega una cuarta capa convolucional con 512 filtros y las mismas configuraciones de kernel, stride, padding y activación.\n","\n","* *Otra capa de Max Pooling:* Agrega otra capa de max pooling para reducir nuevamente la dimensión espacial de la salida.\n","\n","* *Aplanar la salida:* Aplana la salida tridimensional de la última capa convolucional en un vector unidimensional para poder conectarla a las capas completamente conectadas (densas).\n","\n","* *Primer capa densa:* Agrega una capa de dropout con una tasa del 20% para prevenir el sobreajuste, y una capa densa con 1048 neuronas y la función de activación ReLU.\n","\n","* *Segunda capa densa:* Agrega otra capa de dropout con una tasa del 20%, y una capa densa con tantas neuronas como clases en class_names, utilizando la función de activación softmax para obtener probabilidades de pertenencia a cada clase.\n","\n","* *Compilación del modelo:* usando el optimizador Adam, la función de pérdida de entropía cruzada categórica (adecuada para clasificación multiclase) y la métrica de precisión para evaluar el rendimiento del modelo.\n","\n","* *Devolución del modelo construido y compilado*\n","\n","En este script se define una función para construir y compilar una red neuronal convolucional (CNN) con varias capas convolucionales, de pooling, aplanamiento, dropout y densas. El modelo está diseñado para aceptar imágenes de tamaño 150x150 con 3 canales de color y clasificar imágenes en tantas categorías como clases haya en class_names.\n","\n","\n","\n","\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"GaFfKDsNZoLf"},"outputs":[],"source":["# Definimos el método que creará la arquitectura de la red neuronal.\n","def build_model(input_shape = (150, 150, 3)):\n"," Model = Sequential()\n"," Model.add(Conv2D(64, kernel_size = (3, 3), strides = (2, 2), padding = 'same', activation = 'relu', input_shape = input_shape))\n"," Model.add(Conv2D(128, kernel_size = (3, 3), strides = (2, 2), padding = 'same', activation = 'relu'))\n"," Model.add(MaxPool2D())\n"," Model.add(Conv2D(256, kernel_size = (3, 3), strides = (2, 2), padding = 'same', activation = 'relu'))\n"," Model.add(Conv2D(512, kernel_size = (3, 3), strides = (2, 2), padding = 'same', activation = 'relu'))\n"," Model.add(MaxPool2D())\n"," Model.add(Flatten())\n"," Model.add(Dropout(0.2))\n"," Model.add(Dense(1048, activation = 'relu'))\n"," Model.add(Dropout(0.2))\n"," Model.add(Dense(len(class_names), activation = 'softmax'))\n","\n"," Model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])\n","\n"," return Model"]},{"cell_type":"markdown","metadata":{"id":"FYH6IGk2ddrr"},"source":["# **Entrenamiento del Modelo**"]},{"cell_type":"markdown","metadata":{"id":"Nbngzh34iVOi"},"source":["## **Creación de la red neuronal para ser entrenada**\n","\n","Se llama a la función *build_model*, y ésta devuelve un modelo de red neuronal convolucional (CNN) ya compilado con la arquitectura definida anteriormente.\n","\n","*model.summary():* imprime un resumen detallado de la arquitectura del modelo en la consola y proporciona información sobre cada capa del modelo, incluyendo el tipo de capa, la forma de la salida de cada capa, y el número de parámetros que se pueden entrenar (weights).\n","\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":642,"status":"ok","timestamp":1717467140744,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"AV0bdlogZysZ","outputId":"f343b06f-072d-4d60-fd92-c1972d5e088e"},"outputs":[{"name":"stdout","output_type":"stream","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d (Conv2D) (None, 75, 75, 64) 1792 \n"," \n"," conv2d_1 (Conv2D) (None, 38, 38, 128) 73856 \n"," \n"," max_pooling2d (MaxPooling2 (None, 19, 19, 128) 0 \n"," D) \n"," \n"," conv2d_2 (Conv2D) (None, 10, 10, 256) 295168 \n"," \n"," conv2d_3 (Conv2D) (None, 5, 5, 512) 1180160 \n"," \n"," max_pooling2d_1 (MaxPoolin (None, 2, 2, 512) 0 \n"," g2D) \n"," \n"," flatten (Flatten) (None, 2048) 0 \n"," \n"," dropout (Dropout) (None, 2048) 0 \n"," \n"," dense (Dense) (None, 1048) 2147352 \n"," \n"," dropout_1 (Dropout) (None, 1048) 0 \n"," \n"," dense_1 (Dense) (None, 6) 6294 \n"," \n","=================================================================\n","Total params: 3704622 (14.13 MB)\n","Trainable params: 3704622 (14.13 MB)\n","Non-trainable params: 0 (0.00 Byte)\n","_________________________________________________________________\n"]}],"source":["# Creamos la red neuronal para que se entrene utilizando el TPU.\n","model = build_model()\n","model.summary()"]},{"cell_type":"markdown","metadata":{"id":"6t87SrSZkiYv"},"source":["# **Entrenamiento del modelo**"]},{"cell_type":"markdown","metadata":{"id":"OboCYhFtkmMa"},"source":["Se entrena el modelo CNN utilizando el generador de datos de entrenamiento *train_generator* durante 30 epochs (iterations over the entire dataset).\n","\n","*shuffle=True* asegura que los datos se mezclen aleatoriamente en cada epoch, lo que ayuda a generalizar mejor y evita que el modelo aprenda patrones específicos del orden de los datos.\n","\n","*validation_data = validation_generator* especifica el generador de datos de validación que se utilizará para evaluar el modelo después de cada epoch de entrenamiento. Esto permite monitorear la performance del modelo en datos no vistos durante el entrenamiento.\n","\n","*hist* almacena el historial del entrenamiento, que incluye información sobre la pérdida y la precisión del modelo en cada epoch tanto para los datos de entrenamiento como de validación. Esto puede ser útil para la visualización y el análisis posterior del rendimiento del modelo."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"background_save":true,"base_uri":"https://localhost:8080/"},"id":"IWTt_VfnZ55l","outputId":"2b66b542-5275-4a5a-d7a4-a789c2381697"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/30\n","439/439 [==============================] - 486s 1s/step - loss: 0.9954 - accuracy: 0.5950 - val_loss: 0.7793 - val_accuracy: 0.6823\n","Epoch 2/30\n","439/439 [==============================] - 495s 1s/step - loss: 0.6855 - accuracy: 0.7480 - val_loss: 0.6350 - val_accuracy: 0.7583\n","Epoch 3/30\n","439/439 [==============================] - 477s 1s/step - loss: 0.5333 - accuracy: 0.8090 - val_loss: 0.5215 - val_accuracy: 0.8080\n","Epoch 4/30\n","439/439 [==============================] - 482s 1s/step - loss: 0.4447 - accuracy: 0.8427 - val_loss: 0.4878 - val_accuracy: 0.8240\n","Epoch 5/30\n","439/439 [==============================] - 472s 1s/step - loss: 0.3552 - accuracy: 0.8744 - val_loss: 0.4725 - val_accuracy: 0.8320\n","Epoch 6/30\n","439/439 [==============================] - 473s 1s/step - loss: 0.2900 - accuracy: 0.8944 - val_loss: 0.4861 - val_accuracy: 0.8363\n","Epoch 7/30\n","439/439 [==============================] - 468s 1s/step - loss: 0.2240 - accuracy: 0.9197 - val_loss: 0.5342 - val_accuracy: 0.8277\n","Epoch 8/30\n","213/439 [=============>................] - ETA: 3:49 - loss: 0.1702 - accuracy: 0.9375"]}],"source":["# Entrenamos el modelo.\n","hist = model.fit_generator(train_generator, epochs = 30, shuffle=True, validation_data = validation_generator)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Oe-Jl83maMrd"},"outputs":[],"source":["# Guardamos los parametros del modelo para futuras pruebas.\n","model.save_weights('/kaggle/working/model_weights_cnn.h5')"]},{"cell_type":"markdown","metadata":{"id":"FD1yqF3Ymttk"},"source":["# **Evaluación del Modelo**"]},{"cell_type":"markdown","metadata":{"id":"SRBN8-mLmyfz"},"source":["## **Evaluación del desempeño durante el entrenamiento**\n","\n","Se generan y visualizan las gráficas históricas de la pérdida y la precisión (loss - accuracy). Estas gráficas son esenciales para entender si el modelo está aprendiendo correctamente o si está experimentando problemas como el sobreajuste.\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":408},"executionInfo":{"elapsed":985,"status":"ok","timestamp":1717366724967,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"vwyByWzLaQ8h","outputId":"45268363-c211-4a5b-f2b4-3790dfe48400"},"outputs":[{"data":{"text/plain":["<matplotlib.legend.Legend at 0x7b2020512410>"]},"execution_count":13,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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q7s048aNg4uLC7Zu3Yra2lrz+g8//LBdXePqxcXFNRlzlJGRga+++gozZsxos1UpKioKKpUKr776apMWprfffht6vb7JRA12dnatdvUrKChoclulUmHo0KEQRRE1NTXtrp+IiNqHs64REVmg+sH2Tz31FG655RZYW1tjzpw55gDUmquvvhobNmzArFmzcOuttyI3NxebN29GSEgIjh071lOlt0mlUmH16tV4+OGHceWVV+Lmm29GWloatm/fjuDg4Ha3YoWFhWHmzJlNppcGgDVr1rS5j5ubG5YvX441a9Zg1qxZuOaaa5CYmIjXX38d48ePbzLD2tixY7Fr1y5ER0dj/PjxsLe3x5w5czBjxgx4enpi0qRJ8PDwwMmTJ7Fp0yZcffXVcHBw6NybQ0RELTDoEBFZoPHjx2Pt2rXYsmUL9uzZA5PJhNTU1AsGnSuvvBJvv/02XnjhBSxduhRBQUH497//jbS0tF4RdABpumtRFLF+/XosW7YMI0eOxNdff41HHnkEGo2mXY8xZcoUREREYM2aNUhPT8fQoUOxfft2jBgx4oL7rV69Gm5ubti0aRMee+wxODs747777sPzzz8Pa2tr83YPPfQQEhISsG3bNvznP/9BQEAA5syZg/vvvx8ffvghNmzYgLKyMvj6+uKRRx7B008/3an3hIiIWieIljLKk4iI+iWTyQQ3Nzdcf/312Lp16wW3FQQBixcvxqZNm3qoOiIikgvH6BARUZ9RVVXVYha29957D4WFhZg6dao8RRERUa/ErmtERNRn/P7773jsscdw0003wcXFBUePHsXbb7+NsLAw3HTTTXKXR0REvQiDDhER9RmBgYHw8/PDq6++isLCQjg7O+POO+/ECy+8AJVKJXd5RETUi3CMDhERERERWRyO0SEiIiIiIovDoENERERERBanT4zRMZlMOHfuHBwcHNp9QjgiIiIiIrI8oiiitLQU3t7eUCjabrfpE0Hn3Llz8PPzk7sMIiIiIiLqJTIyMuDr69vm/X0i6Dg4OACQXoxWq5W5GiIiIiIikktJSQn8/PzMGaEtfSLo1HdX02q1DDpERERERHTRIS2cjICIiIiIiCwOgw4REREREVkcBh0iIiIiIrI4DDpERERERGRxGHSIiIiIiMjiMOgQEREREZHFYdAhIiIiIiKLw6BDREREREQWp8NB55dffsGcOXPg7e0NQRDw5ZdfXnSfffv2YcyYMVCr1QgJCcH27dsvoVQiIiIiIqL26XDQKS8vx8iRI7F58+Z2bZ+amoqrr74aV1xxBRISErB06VLcc889+P777ztcLBERERERUXtYdXSH2bNnY/bs2e3efsuWLQgKCsL69esBAEOGDMFvv/2G//znP5g5c2ZHn15WZwvK8dzukyiuqMHHD0TIXQ4REREREbWh28foxMXFISoqqsm6mTNnIi4urrufuss5aKzxw985OJRWiLzSarnLISIiIiKiNnR70MnOzoaHh0eTdR4eHigpKUFlZWWr+1RXV6OkpKTJ0hs426kw1EsLAIg7UyBzNURERERE1JZeOevaunXroNPpzIufn5/cJZlFBrsAAA4k58tcCRERERERtaXbg46npydycnKarMvJyYFWq4WNjU2r+yxfvhx6vd68ZGRkdHeZ7TYpxBUAEJvCoENERERE1Ft1eDKCjoqIiMC3337bZN3evXsREdH2YH61Wg21Wt3dpV2SCUHOsFIIyCisREZhBfycbeUuiYiIiPorYw1QpZeWymKgqn5pfLsEUFoDKjtpsbZruK6yB1S2ja432sZKJetL6xImI2A01C21DddNtU3Xm2oAK03De6C2l94DhUydn0xG6fhVFAAV+XWXBUB5PlBR2HDbfF8hUFPR6BjWvw6HZsfaXnptjW/Xv97Wbiut5Xn9XaTDQaesrAzJycnm26mpqUhISICzszP8/f2xfPlyZGVl4b333gMAPPDAA9i0aRP+9a9/4a677sJPP/2Ejz/+GLt37+66V9GD7NRWGOXniCNni3AgJR/znP3lLomIiHo7kwmoLpG+fNZfmpdmt6ub3aewAmxd6hbnRtddWq7X6ABB6P7XI4rSl6qKQqCysNllUdPb1aVSXXZugL2bdNl4sXeXalcou7/u9hJFoLaqISzUVgKCAoAgXZoXoen1C91vvq/5pQIQTXX/DoobBRR9K4GllfsMZd33PiismwUg22ZhqNFtpbX0OhovJmPddbHZfcZmt8VG27axmIxSGDHW1IWTxtdbCS711yF27j2wtm0UFBqHBrtmoaHx+2Tf9H2qv26srgsrBY2CSn1YKWwaZiqLLq326hJp6SpKVdOANOo2IHJJ1z1+N+tw0Dly5AiuuOIK8+3o6GgAwIIFC7B9+3acP38e6enp5vuDgoKw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\n","text/plain":["<Figure size 1000x400 with 1 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["# Observamos la grafica historica de la perdida y el nivel de predicción.\n","plt.figure(figsize = (10, 4))\n","plt.plot(hist.history['loss'], label = 'train_loss')\n","plt.plot(hist.history['accuracy'], label = 'train_accuracy')\n","plt.title('training plots')\n","plt.legend()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"5kHXyj1daw7n"},"outputs":[],"source":["# Cargamos los parametros de las neuronas.\n","#model.load_weights('model_weights.h5')"]},{"cell_type":"markdown","metadata":{"id":"FpNn-x0onrY3"},"source":["## **Evaluación en el conjunto de prueba**\n","\n","Se evalúa el modelo utilizando el conjunto de datos de prueba. Proporcionando métricas de desempeño (loss y accuracy) en datos que el modelo no ha visto durante el entrenamiento, lo que es crucial para entender su capacidad de generalización.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3017,"status":"ok","timestamp":1717366732465,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"ptlPWVp5a4YZ","outputId":"4b13bb81-37ac-4530-a1a0-3d65b326121e"},"outputs":[{"name":"stdout","output_type":"stream","text":["94/94 [==============================] - 3s 29ms/step - loss: 1.1895 - accuracy: 0.8113\n"]}],"source":["#loss, accuracy = model.evaluate(test_generator)\n","\n","error = model.evaluate(validation_generator)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"PmXG121_a90j"},"outputs":[],"source":["# Preparamos los datos para graficarlos en una matriz de confusión.\n","predictions = model.predict_generator(validation_generator)\n","predicted_classes = np.argmax(predictions, axis=1)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":452},"executionInfo":{"elapsed":1086,"status":"ok","timestamp":1717366743349,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"CVoDn3nubCyX","outputId":"e0341a53-e413-4401-aea4-6ab8a05b7294"},"outputs":[{"data":{"image/png":"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\n","text/plain":["<Figure size 640x480 with 2 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["# Graficamos la matriz de confusión.\n","CM = confusion_matrix(validation_generator.classes,predicted_classes)\n","ax = plt.axes()\n","sn.heatmap(CM, annot=True,\n"," annot_kws={\"size\": 10},\n"," fmt=\"d\",#mostrar números de manera no exponencial.\n"," xticklabels=class_names,\n"," yticklabels=class_names,\n"," linewidths=.5,\n"," ax = ax)\n","ax.set_title('Confusion matrix')\n","plt.show()"]},{"cell_type":"markdown","metadata":{"id":"Mns71vGwo3VA"},"source":["## **Puesta a Prueba del modelo**\n","\n","Se configura la visualización de imágenes, se definene filas y columnas para la cuadrícula de subplots para mostrar 32 imágenes (4x8).\n","\n","Se itera sobre los lotes de imágenes del generador de prueba.\n","\n","Se muestran las imágenes.\n","\n","Se hace una predicción para las imágenes: *model.predict(img_batch)* genera una predicción para la imagen.\n","*np.argmax(pred)* obtiene el índice de la clase con la mayor probabilidad.\n","*np.max(pred) * 100* calcula la probabilidad máxima y la convierte en un porcentaje.\n","\n","Se etiqueta en el eje *y* con la probabilidad de la predicción y en el eje *x* con el nombre de la clase predicha.\n","\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"h-wD2LuNbLt-"},"outputs":[],"source":["# Ponemos a prueba el modelo con los datos para testear.\n","index = 1\n","plt.figure(figsize=(20,10))\n","row = 4\n","col = 8\n","for img_batch,_ in test_generator:\n"," sub = plt.subplot(row, col, index)\n"," plt.imshow(img_batch[0])\n"," plt.xticks([])\n"," plt.yticks([])\n"," pred = model.predict(img_batch)\n"," class_key = np.argmax(pred)\n"," prob = np.max(pred) * 100\n"," plt.ylabel('{:.2f}%'.format(prob))\n"," plt.xlabel(label[np.argmax(pred)])\n"," index = index + 1\n"," if index > row * col:\n"," break"]},{"cell_type":"markdown","metadata":{"id":"BpWF1eXKriNX"},"source":["## **Devolución de predicción por Voz**"]},{"cell_type":"markdown","metadata":{"id":"bITmcGktsqYW"},"source":["*model.predict(img_batch)* genera una predicción para la imagen img_batch. Esto dará un vector de probabilidades para cada clase.\n","\n","*np.argmax(pred)* obtenie el índice de la clase con la mayor probabilidad en el vector de predicciones pred. Este índice corresponde a la clase predicha por el modelo.\n","\n","*np.max(pred) * 100* calcula la probabilidad máxima entre todas las clases predichas y la convierte en un porcentaje, proporcionando la confianza del modelo en su predicción.\n","\n","Así se generar un mensaje de voz que anuncia la clase predicha y su probabilidad asociada proporcionando una retroalimentación auditiva sobre las predicciones del modelo. Pensado para futuras aplicaciones de asistencia o accesibilidad."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":6698,"status":"ok","timestamp":1717366778200,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"2c5wkbPmYZ67","outputId":"521a542e-d156-445e-8145-958d39410361"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting gTTS\n"," Downloading gTTS-2.5.1-py3-none-any.whl (29 kB)\n","Requirement already satisfied: requests<3,>=2.27 in /usr/local/lib/python3.10/dist-packages (from gTTS) (2.31.0)\n","Requirement already satisfied: click<8.2,>=7.1 in /usr/local/lib/python3.10/dist-packages (from gTTS) (8.1.7)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->gTTS) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->gTTS) (3.7)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->gTTS) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->gTTS) (2024.2.2)\n","Installing collected packages: gTTS\n","Successfully installed gTTS-2.5.1\n"]}],"source":["#Instalamos e importamos la librería necesaria\n","!pip install gTTS\n","from gtts import gTTS\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":308,"status":"ok","timestamp":1717367506209,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"axqoYdItY0kS","outputId":"d3cb3625-634a-44e4-a0e7-c8b65aa63a6e"},"outputs":[{"name":"stdout","output_type":"stream","text":["1/1 [==============================] - 0s 26ms/step\n"]}],"source":["# Clasificación de la imagen\n","pred = model.predict(img_batch)\n","class_key = np.argmax(pred)\n","prob = np.max(pred) * 100\n","class_name = label[class_key]\n","\n","# Generación del texto a hablar\n","text_to_speak = f'La imagen ha sido clasificada como {class_name} con una probabilidad del {prob:.2f}%.'\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"8uB1WsRZYkFi"},"outputs":[],"source":["# Generación del archivo de audio\n","tts = gTTS(text=text_to_speak, lang='es') # 'es' para español\n","tts.save('/kaggle/working/result_audio.mp3')\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":75},"executionInfo":{"elapsed":5,"status":"ok","timestamp":1717367530351,"user":{"displayName":"Viviana Farabollini","userId":"17648384242142966058"},"user_tz":180},"id":"kwBwK-W2Ymdq","outputId":"6fe10f43-6c29-42ed-d377-f9e96ea73b1d"},"outputs":[{"data":{"text/html":["\n"," <audio controls=\"controls\" autoplay=\"autoplay\">\n"," <source src=\"data:audio/mpeg;base64,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qpH2quNKVNDJQ8RC0koEslFzwJy0Pw+LqlY2NHcH0bHpqrr////5//////////////NExA0SAxqsAABOvdUaasxbpeaYcs88uUnFRveg6ahEcPH7DhAbHFyQ4K2FzkhgH4tFwtOcuaFxxxSI5gPgoeFBJB+LBUcK8///8////jR///////////tX66KeqHnZ//NExBgROx60AAhKvESDpjCSOQgREnKtjoVxI4sUTDgOUoWMGAGKB4pTCQjEg9Ywk7qcBHEhcecFGc402DTDeCsY9wKJx1v53+r///6fWZWBIOyAxb7sdMWdH7/+3/f9//NExCYSExqoAHiEvf/1rfUv9VKkKQcKxepUo/MZjqQqGhh0lmUqo//1lY1jhVXV/HW6x0VvfhfzjBEJjltgh6v435PM3r7P1F10ThmJ+FnZNRY7OYj+LRNk2b1fT9b+//NExDAQUZaoAMlalGdq2V//p/fc8kD5n+yp0hiqFU7LKAGlgEEL5goLUAsYLXduVM8z0byvqX8XeRhbc8+BYCrNPC3Y40ahg7kvR/N9fmdDww3////9/X7er1c4j6////NExEESGw6oAKKOufr3MLtaX0MK53keQSHBSnBWxlY6Ej7a/7eHbzdUfnZ9FacxAup5QWhKNnVTAHC6eYOs6saD4j1N+/nerZinJJlBOLW//T//ERv/1xFhqpi1LocK//NExEsRYa6sAMiOlPtEaT0j+Ao0SBeKFQHKSOfCq2e1f1VHz8kEVtWjey3kSDzh0FAZB7SmUpXR2KNEDK/X09W/1qpgGDyP///8sPqV2bURAlEFS2vJgOgmgZ4YKgVv//NExFgRIZqMAMmKlEHVJXc4wfcRtJKgHE8XE6hVGtELgQVYBOYPmpAEAsjFa0UaN/m3q8oto9mmjaXBMRBYNB8bpPd0756noe8/H3KlXHxu3n////2+3/01dXdDD3/X//NExGYcSxKQANJOub8yk8+e5hhO9CCz1buFWJDAaYsCSF+oeWOQxJUEIJo2qGACS9ZPuIQM/MwsGynp5unCGOdFeK+JCXubBmi8Tc72rDC1b99r5gzT4v4ETOnraERY//NExEceovqgANvOuekQgNeYULOeqlzFVxuqMaKCBcdGQCDxcYchBee///6f/+/R61es5Et/9HeaxyGqePotCUX/xyoikGMyCWDpZriOXGKaAAydN3OYb2z/0Di2f5Ab//NExB8UsYqwAM4KlBfPLGlT1d6/j8xll/5485W1M+pjYwpSrBCsiuVtkfKZ6iRWJA4qwQD7Ff///u/+1o0cCaHDmGAwIAtXnib2FWE6AmoTssnwDZjj0akeyZw1CbKC//NExB8RuXaoAMvElPCLqhCjzm0Kbf+K7/zr6l/9dHR3q7e2amZ2wok0VAbTf//////49taUPzATdgEsXOBw0XQmGxGGWl4oGgJ7hJFRariUsrnmwalQCoQtEonXtNse//NExCsSOX6EAMsElJnLTOzn+pf+j6G6t6dWvoZsKWVBqR//////7ZV8O0LggQlgwAmkRZtw6DglOAwsEEIwYODIA01Y9JWmuU/1iNX7Malc7GnZJigFVWBGEqXhoOvF//NExDURqIY8AVt4AFT7juv3f/007Ff///+z9hjoQliIIxfAQAjYlRNv1VmU1HYnuXvWEbRNVmLwswMiClF0FMZHS+FvgNtBogFxBbNWsxWkKyIBjLjjJfuqgg6qIuci//NExEEh2ypEAZiIAOoZsyNP6aboIMmT6RoT5kYE//s80VSssnCRMCwo8al0w29m6dBBBN01aDvay0VJGR7//0EC+bm5oggmnb0UULoOo8dMXOIVp6elXnVNXMajQ5ON//NExAwTkc6gAZg4AGjNqk5Ak6nDePG56Ig0E5xysQHRFBacLC4vB4QGhPJFyxxcbiOh437vo3EUZEcgef//srzyf/6v89y1///AGj//+lWtaiT9CMANfgB92hCM4zEX//NExBATuaagAdkwAK9y2/T03ddoP7+FLTSxRQV3LLDoH6mSjf2//n/u7VcojZikgJb4x1/6jsT83Zu0M+uVHzcVO2U6lO//////0N9/oUKDyKUzDDzGRkKn63MJyGPQ//NExBQTcbakANKMlFltRP6D9HlR4bUSw6abP+////+huacDJ5mIV2PK1mafjMNfsQLpqKR7oKS8QQuiiCvb0F////6exqL9bmCriVV5iGzexVjzvHg64mY8C1NXU8f+//NExBkTaSawAMPScAHJv9sM5mEYxPcRkEcSY/vZ7tKZ+oxKNrt5lkbcShywSuAR4RAqXIvAZgQngTDi1f////zV/+1Ur4T25bFkyC/ei4PSWGJgQSn03q7eMrhK6+XL//NExB4RSbK4AMPOlP8h4xf35wxcRSgfYnDR2UI8vzhjgLLD0dFxupfntz/br5R9SUu7iyr/1NhYbb4ZviW/kXwv2FYio3EvKmdGwypeJDWRU/dpFa/iKQnuF8+Uofql//NExCsRCTK4AMRWcIzlZ8cmvtHbbIROvNlpXyXWdcR/1f////XV5zGVjmESsZW+gFBCqhQARwt5NHNSAmuYG5rSl1rqO7xYf5IKTaYQRF9/+f+GaaZmuCTT8t////9///NExDkSSSKsAMRQcMuPfOXdwOFz6qjgusDvSguqc2wEQrErS1MXP/////////5////////+v1WjEV2uhHEqHOH8pmskhSnI5TCYnEg6cQMIMdhxQ+WzlMYyi5AmHBQO//NExEIQ6yK0AEBKvAo1h/////////0vmbOui3zFmkGQ0eKC0gNnPUaHj/dx8fGiEVHlJmC8H5EcG5yg/HUG46NhSOhQfGgMEsRyQcWo//X/////2Pr///////////////NExFEPwxqsAAgOvf//9/+nU3+9xtEQRWPtsulaSx7K1yfZh2YQKnnMnUuOPII0UbVCCKsMeGk0ksoRgHBWVfp6B6QCcSOyiWwUgHYPlYw5z//////WxZWIIYlT/ztd//NExGUREyKwAAhQvF////9Kf/+9suylKipzVYM6qXZMphT0XcolAJ7KYCMYGX8xq0bQCeGAhSr7nJcPkExb27JQjWQkcyCgMClye/Z+//f918t+MWkk4VJRQ8u7Ds2W//NExHMSixqsAMCEvYDxmPAXD4Dpcs88QxaIGvICwAQv//9T7Jpr/+4uXHgoWEy63hVT3P2Jr03ACaBzD3s8JXZzPH4xPXvI1pIFWt6hyODwVD8AKK5i3UsKjbExsaOt//NExHsSoS6gAMlQcELPzE/M1T98TamqKho//////+uIhKeLVeSlwjCtNoFmr/jIRnmMVkb+Lqh7LlDNELXMiwyNEWtDGDweGipAMYWUqNRkMcOmL/rvYiGoLHsQpiGJ//NExIMRyZ6cAMhQlPd//5z7//srESZYlB6wOJAgoljXzvatx09ICJyZoICg8NvoHG7xELl3VyvMO7K9PYhLSCFFmiwCvEgswbaOWIzCD7yw0q14wWrVSqDAybP7Z3H///NExI4QwXqMAMhKlC9d93u9kX/pm4IMg8LAIJihQgNCihCU7ykXBxTEAgAHMfe5qq0nzjqa0vRyQhsI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AgWKgqocCplgvklPbv//4d////RV1zV14hioyN+8KSQisEKxgm21DshU15Eclb/C//NExBsRuPagANPecGRTVc8jOBRg4RmqO24hyX1LiEooMfVtJhcOtYfR6YwYWB/Of////////qpW/Hmb0BV4X4hX1FMx3yZ6avq44961hsHTCtjKTKpb1mLoAaBQLynE//NExCcSYTqkANPacADUgUFkmMkvO6ySExJVmODkVVTP/Qe1Z9FoJ////////1aqx/+4MWIpLfLzxmBkrVJr+rqyb/wlVT/sKN3/lhQmJ/g3imQM+upS+Ca9QdAQAOJz//NExDAU0VasAMvQlAoAYDQDvEqH+Lnyrp8MmmSYH7vFhIA1lGq1Am//////9DUaav//zZyGwY5Zy0VKa/nzHg7zRJfnDZuPCl+OjXxUT44ma1ZkSJMcLnizaTfFvBQ0//NExC8VicKsAMnelDoV+/fafc//tX/4zVgv8W0uWzN/Vtd7+LSOGf9eP9/////ymXqVilXzIEAYFupq6axEgoGP8Gf4r5fRPt6pO42i0dLLz4Ult2coVOJz2sEMlOl6//NExCsSkbqsAKCWlGPfM7CQ+Pzc63+yadiWrD/T35uc+3//Q/0f5d0TkIgVXuaCCwI4mzTgZAE/L5v19/L/yDn/grL+11GrskCghJY5MoXatNcjSf4NqTz+db/72MfC//NExDMRGZ60AJhSlJxEiHg4HEJ///9z//rLIUGiaqlnBugAtwwqcTlMGASt78vr68vv/v/Lr8QA9D1WgFAlFVhyyrdA4CA4lYIG1/LNehrFLoLmqQS7///7//7SI1Ao//NExEEQYaawAKBQlLrHfeTw3Ii3DmW071MKv/I/l8F8H/539Xk8+tSkQpiWQsgQnrOBdCkyJ44SJYpTlS19e1A/VWVJPVMUpR///nl5VX/W1QMnSomCtZvPC2IAx21g//NExFISWa6kAMialGLmW3KUcAmQAyz/DFDNzOuhvf9+U386xhyaLHB0DZzclBa/YeCoF1rTNxXBz1AzU+09Bpp3///DWn/zvSWNKWAsaTFEQ40pI6Dszh1C1TtDJdZf//NExFsRsVaQANCQlEYtYvzsNT929vHWu92dWkfsqkfsx/rNS1lVVyDdElqhgNEwSrxKS/zut2j///9X/ffQmkJUTZwGOg11qOvTydvKLGfpIA3M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MAMEQyzuEmXQZYrl97LNpqKe45DRYckLuOnkozoEwOFAFr+1//NExHMSeH4sAVkYAAXBTwSMS0A2wSP9vhwgrYb4Xwd4wf/+PcpkoMsuFw7/11p010zhcLhofKBmQxkf/pumnN05u9MuGRcHASBwqMjIiFwfv//smpnQZBCg3HAeOHy+//NExHwhYypQAZloAJDDjDmI50S+meVuiFUaWDME6O4YHgQcEQiLCI6F4FaE14dSWMkQUJl+phWwvA11e8AKZphhAEgOxOAOLhsODcgSHlKkznQ0q94+6Gqrojj59o+f//NExEkbOxaEAdo4ADTzyDWMMnUGjPFADAwfnv7e//////r/1+jf//omjd/zz1sPnqbK5Kxh0Wzgxk7NhAuNVjBS2XPGm0DWMeo5tsRYpRZn4FIQTZ3RcXvL3oQcrW+V//NExC8eQxaUANZOueG737zu2v/+X//eeH/uvl/4UlF3DluUVkMg4FrTxzQcJDrDQRABBHIspMzmK3bov/////16UpMs9jm9v/RntMNdUUmpiDhA8icIw5+yoolFnVe4//NExAkT+V6oAM0QlJIhKKT8rCgwIpRLosM4FxnROBMCREQVIksOICz473keS69At8zfy/8u/k4cllBKSv2b+9VuVHTObVn////2Uus/VtgSOPQJsd7gSeT6u2WlGXQ8//NExAwRyPakAMYScO5lcBKAx289vEybf1mYvLz82EFvoGyKAKBpuLYgHvNJC1Gl2dytW27ihyInyUS1hr/////9Ya/+hKqUKsoEr1hCAIpKarnBeIG3LoBIFjksNISz//NExBcRoOqgAMMQcLYzhQsYqjO5SSDcG5gDwXrYx1tf1ImKVqPAYhjSEPiE+fT/////9Vn/5xdYeTAZeqstrXmkBpMjqw6zE1guWdRKLc1vkp5LyBoNWsv0+AFIjIBQ//NExCMQULKoAM4MTB//rd6Akf//1f4p4YKO0y8QN+uCCEiwYe5uAz7ihip62AFCgtJJwciaP7////6//////////////u1e7r7EZYmd1LSUyss7qJh5iMVBQogMZXZQ//NExDQQkxqwAEBKvP0Ezi4cdRATA4cEBQB6akW//////95f///////////p01/orZyMc9TTJpFRuaPnnRggomdhQNCBZXnlyZMYB4LJUdNKj4PzSTg/Go6yOI4jjQLi//NExEQRQyKsAAhOvPb//////t/Qxkma7qhWNzyZBhwfKjw4aNFcfHBoxNFNcwxlIGHQeFj2IFTRMVHS43QbljBoI46BYVHCotX////1/////////////////8f96T/6//NExFIO2x6wAAAOvNJCJD6OqYw8WEJKrhNCacl3Fw/OEQRChGDsrPPYUWJgkYJXPFiqB8ODAahYIgeBcHRopTeA2r//////5uX////////////qisJFMrIZ3YXF0Zxw//NExGkSIx60AABQvWoYRVxhDuIFGmFha4sOFg8OOR9BYoqIoUwkZ1FhEVILlIJjFaloE0DVoIxjRJI+UhZBql2+Z9v/f9vH1sqCsHbqhw0bRRZ2w4v5/I3p9PU7v3////NExHMRAxq8AAhKva/9HmdEcqtopVorI4UGf9IoK7/6+axvgtUXZJXWHeTwAwT7s9rzCVTmd5ivi/Q/q3r9fmHqDkF5ZysN9Sk1GQnCD5FHtuxPPv0m9JvN/j0trN/s//NExIISkn6sAJnEuf/99T6tevXpoTWq/eq70DGA8NU5eT3MVEUzscbqB+jP/8/8I//+P+VDctGjKNwXFYXGVNQIMfGkaMoCriNG+AbWFg0JCYaDAsGxYsC4jDjP///Z//NExIoQScKsAMCalL//Xd/+b0Lf1K8roN6Y1CRguCaPOuTsf1C9/hctueV/e5tT3N8IThiAUEomIUBAur5IItR5tlcw9OITATbPE9aqkxxMHRXPt///Ff/8Y2Vz24re//NExJsSqUa0AMiScEJ4OqR5ZrIn5AZhJHpiLAVVUhk/IP5aazl0ttmJ/cCMZKQUADgME57hdNVZUS3eiQTpNJBGmYeR2XytP519cLsuIeyJ4X56v//u9A5bP/sxZd9+//NExKMR0Tq8AMJScbs9I3YXZASziNF/tUCVZcqE5bH825PS5gly4Sz6Rs/liWOQAsDJLmEhNLYMEzXmfJUOrkwVJcgSPtwCPB8Gh4MhoRAqUBZIhET3///9e7/+mtXl//NExK4WIbasAMxWlKqvEZkw1NJbsMlDDf1EEAE8OYkAZHEYZjzi8fdL/zONb4Ks7yghJYcgPqs0o3n82pVBNmPmVQsww0hwoaoWt1R5T2HUlU///+RGHf9jad9ClFiX//NExKgU0UqwAMNSlKwhzdRRUY9JBUGoC60pmEEisuuexlR6wEN1jd1Vb+Gb+Km+h0oJRDAjDjR7XpNXo3zDXvE8EFC1tPf9uQW6r/////UtNXcjL0DIDMbTMBCV9pkd//NExKcUKUKkAMqScBeHGZoV6ULI1J/Kt2zygVU+VwXaNr1jfLfBB12oKRFXLFL4b+Wbp1nhVXFA+o///xE8RRrnbtVH//+mWWzUzmGDl5pvoJISzUxwathh9L5Q3cOb//NExKkR2TqQANPQcCHGG37kWqlJL/3NsCluOGFrui/xdwglGIKBkPUiG/r/f++kdaofB7//q9f////10nUKwEWaMNRk2AYQUyV/g4KlAKL1JfINmAgOHAXiXsCVp3O5//NExLQScSZ8AOPQcCrPeL6tdAwiKmNEW1LR8pqGX/9TOilmdRIWf///+37f//+SPYcqMnUc0RBzCibNTAo0MNTFgUMsCUWGQYT1dZ5EwLeTOWw5QApAChCcNQSIylmC//NExL0RuTJ0AN4QcMcsKYge0McsaKMiWRBiVaEjKl7Sb1Lt0Wj1HVKq6qlPN8JNqxC9rJOtN420hqmN6RSlWZUVWYqrfbluWVainRWMUWGykdJdzDO0X6S1fm996ern//NExMkSESpcAVwoAKpRePZFY+qQSAuWqcYQiR+6z/pIHIHflViGoFdBg54LWJmMMJiG6ydxMRMyGZEkXiwd6rLkweCKJaI2MKeSJZ1WW4lhcPJlweiCikxgYvtuU0mM//NExNMhkyokAZxAAAeBgo6aEkdPX/9egmmnUtJaOn//M3Wm5fHubmiDGbp3LtEuF0xNf//l83bVQTTN9tW7TQzRnDqJnbtmZTcH/mBKZEJQfKwVYoETOiot/WTkW7fp//NExJ8hKyqIAZhoAKGGS2ptw1nzuhbAbHDVFQRYkADAlCWQgsgEA/JUGdUI00W6GzFQ8xiYqLYixgPzlOW7J0+qa8w1Kp16/7e2yf//7qmqL6W+qf25nWi0MK8uwrxo//NExG0aexaUAdlQAADAO3Tr1mVHjzF4HWMDLCYu0sGLieyghtIuk0+KPEKlCaCKULj7T2C0q7DGS24z8yXHDxXb8B9v5rXOa5vbG6VxP3kZ5RhyD4aAAUFFMLk2OOt///NExFYaISKMANYecNFDmP/9UAmyjWf+0XihYGg4KLrKWvEQ+i50ZdM2itctAQgRAKZrLCA42histYaUHht9CAa3aeXI100JTJGmyHEFIAUgoQRVItvXuGvn+rnmr1ri//NExEAWOSKEANYQcGjhh8VxXSBBER/sX9N3/1Tv/3qaGiUaMCedhiTGbwNmOQ6BhrKStygLDsdbPHU0W0ry1yZG7Dir5pnQflIRxSIp7UGg+ty3N/6j1gw6dFmMUWHo//NExDoREIaEAVlgAP//////9k8mJXLVMwR40RWzBZAMuj7UuMlgswyOCEYqrZ5GRwOhwZtDP+Aw4A048BCcLEg7QWMvUFvQZodoyqyZJ0y8iI55oX3NnSS/MicH2VCa//NExEgiKqpIAZygABxTIvKSS/Fwi9E2kCHLKgs0yPl1S0VfzMwTcxcvlQ3Wjroor/6B5bFy15QZFVFX1f/zJBkETjGy2LqlGMtPMniyghAXlDSEuWmt0JKTCJ6TiVom//NExBISmOn4AckwAOhQl3AJ8RXUdjLSnqvSm52JHVnzpc0aJ0uEYGfJLsDrCx5REqLMsEV6F6Ro7j56t7ezp7o624a5VWBg4Ko4keATwnDkgUacSgGsjhxI0i5HCSyJ//NExBoQyMnUADGGcEAgQFVIMOFKqgqnRERaWNf/zsiSYWAqgqEpE7ShQ/Pbf//npKVK7rG1qkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExCkAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExHwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMu//NExKwAAANIAAAAADEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//NExKwAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//NExKwAAANIAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\" type=\"audio/mpeg\" />\n"," Your browser does not support the audio element.\n"," </audio>\n"," "],"text/plain":["<IPython.lib.display.Audio object>"]},"execution_count":26,"metadata":{},"output_type":"execute_result"}],"source":["from IPython.display import Audio\n","\n","# Reproducción del audio\n","Audio(\"/kaggle/working/result_audio.mp3\", autoplay=True)\n"]},{"cell_type":"markdown","metadata":{"id":"0hHxN9reSfic"},"source":["# **CARGA DE POSIBLES IMÁGENES DE USUARIOS Y SUGERENCIA POR VOZ**"]},{"cell_type":"markdown","metadata":{"id":"E4O5MpH0Tlpz"},"source":["Después de definir y correr el modelo de clasificación y predicción presentamos un script que supone cómo podría utilizarse el mismo para realizar sugerencias de visitas turísticas a usuarios que carguen una o varias imágenes de su interés.\n","\n","Para ello:\n","\n","* Definimos un diccionario *'info_categorias'* que contiene información sobre diferentes categorías de imágenes.\n","* Definimos la función *'predict_image_from_url'* para cargar una imagen desde una URL, preprocesarla y hacer una predicción utilizando un modelo preentrenado.\n","* Definimos las categorías (*class_names*) y se proporcionan las URLs de las imágenes a clasificar.\n","* Iteramos sobre cada URL de imagen en la lista img_urls. Podríamos sólo solicitar una URL al usuario. Creamos una lista para evaluar las sugerencias que se realizan. Para cada imagen, se realiza una predicción utilizando la *función predict_image_from_url*.\n","* Si la predicción es exitosa, se obtiene la clase predicha y se genera un texto basado en la información de la categoría.\n","* Utilizamos la biblioteca gTTS para convertir el texto en voz en español.\n","* Se muestra la imagen original junto con la predicción y se reproduce el audio con la respuesta por voz. Se espera un tiempo para que el audio termine antes de continuar con la siguiente imagen.\n"]},{"cell_type":"code","source":["# Clasificación de la imagen y respuesta por voz\n","\n","from gtts import gTTS\n","from IPython.display import Audio, display\n","import requests\n","from PIL import Image, UnidentifiedImageError\n","from io import BytesIO\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import time\n","\n","# Diccionario con información sobre cada categoría\n","info_categorias = {\n"," \"buildings\": \"te sugiero visitar Buenos Aires, con su arquitectura impresionante y sitios históricos como el Teatro Colón y el Obelisco.\",\n"," \"forest\": \"te recomiendo los Parques Nacionales de la Patagonia, como el Parque Nacional Los Alerces, conocido por sus frondosos bosques.\",\n"," \"glacier\": \"El mejor lugar es el Parque Nacional Los Glaciares en la Patagonia, donde puedes ver el impresionante Glaciar Perito Moreno.\",\n"," \"mountain\": \"No puedes perderte el Aconcagua en Mendoza, la montaña más alta de América.\",\n"," \"sea\": \"Visita Mar del Plata o la Península Valdés, donde puedes disfrutar de playas y avistamiento de ballenas.\",\n"," \"street\": \"Para calles pintorescas, pasea por el barrio de San Telmo en Buenos Aires, con sus calles empedradas y mercados de antigüedades.\"\n","}\n","\n","# Función para cargar una imagen desde una URL y predecir su clase\n","def predict_image_from_url(model, img_url, class_names):\n"," try:\n"," response = requests.get(img_url)\n"," response.raise_for_status() # Verificar si la solicitud fue exitosa\n","\n"," img = Image.open(BytesIO(response.content))\n","\n"," # Mantener una copia de la imagen original\n"," img_original = img.copy()\n","\n"," # Redimensionar la imagen a 150x150 para el modelo\n"," img = img.resize((150, 150))\n"," img_array = np.array(img) / 255.0\n"," img_array = np.expand_dims(img_array, axis=0)\n","\n"," prediction = model.predict(img_array)\n"," predicted_class = np.argmax(prediction)\n"," return predicted_class, prediction[0][predicted_class], img_original\n","\n"," except (requests.exceptions.RequestException, UnidentifiedImageError) as e:\n"," print(f\"Error al procesar la imagen desde la URL {img_url}: {e}\")\n"," return None, None, None\n","\n","class_names = [\"buildings\", \"forest\", \"glacier\", \"mountain\", \"sea\", \"street\"]\n","\n","# URL de la imagen que el usuario quiere clasificar\n","img_url = \"https://www.shutterstock.com/image-photo/beautiful-view-sea-on-atlantic-600nw-253604740.jpg\"\n","\n","# Realizar la predicción\n","predicted_class, confidence, img = predict_image_from_url(model, img_url, class_names)\n","\n","if predicted_class is not None:\n"," class_name = class_names[predicted_class]\n","\n"," # Obtener la información de la categoría predicha\n"," info_categoria_predicha = info_categorias[class_name]\n","\n"," # Generar el texto a hablar con la información de la categoría predicha\n"," text_to_speak = f'Sugerencia turística: {info_categoria_predicha}.'\n","\n"," # Generar el archivo de audio\n"," tts = gTTS(text=text_to_speak, lang='es') # 'es' para español\n"," ruta_audio_respuesta = '/kaggle/working/result_audio.mp3'\n"," tts.save(ruta_audio_respuesta)\n","\n"," # Reproducir el archivo de audio\n"," audio = Audio(ruta_audio_respuesta, autoplay=True)\n"," display(audio)\n","\n"," # Mostrar la imagen original y la predicción con proporciones correctas\n"," plt.imshow(img)\n"," plt.title(f\"Predicción: {class_name} - Confianza: {confidence * 100:.2f}%\")\n"," plt.axis('off')\n"," plt.show()\n","\n"," # Esperar a que termine el audio antes de continuar\n"," duration = len(text_to_speak.split()) / 2 # Aproximación de la duración del audio en segundos\n"," time.sleep(duration + 1) # Esperar un poco más para asegurarse de que el audio termine\n","else:\n"," print(f\"No se pudo procesar la imagen desde la URL {img_url}.\")\n"],"metadata":{"id":"pfgy2iBscEam"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vrN8SgbD0pkk"},"outputs":[],"source":["# Clasificación de la imagen y respuesta por voz\n","\n","# Función para cargar una lista de URLs de imágenes y predecir su clase\n","\n","\n","# Lista de URLs de las imágenes que el usuario quiere clasificar\n","img_urls = [\n"," \"https://www.shutterstock.com/image-photo/beautiful-view-sea-on-atlantic-600nw-253604740.jpg\",\n"," \"https://media.tacdn.com/media/attractions-splice-spp-674x446/07/1a/70/bf.jpg\",\n"," \"https://media.tacdn.com/media/attractions-splice-spp-674x446/06/e4/dd/04.jpg\",\n"," \"https://assets.turismocity.com/cdn-cgi/image/format=auto,width=500,fit=scale-down/playas%20arg%20-%20punta%20perdices.jpg\",\n"," \"https://www.verbuenosaires.com/wp-content/uploads/2019/05/San-Telmo-buenos-aires.jpg\",\n"," \"https://101lugaresincreibles.com/wp-content/uploads/2016/05/hornocal-jujuy-2-e1463151261703.jpg\",\n"," \"https://fotografias.lasexta.com/clipping/cmsimages02/2019/03/05/417B5470-7EA5-4440-B015-1A0E8C30F6B9/69.jpg?crop=960,540,x0,y89&width=1280&height=720&optimize=low&format=jpg\",\n"," \"https://www.shutterstock.com/image-photo/street-intersection-buildings-buenos-aires-600nw-1940554291.jpg\",\n"," \"https://hips.hearstapps.com/hmg-prod/images/centro-cultural-kirchner-buenos-aires-1560761469.jpg\",\n"," \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT8sFj9UZxNRm3wq1M-cOybxCpVPbm7KlahQA&s\",\n"," \"https://st1.uvnimg.com/dims4/default/1d90d8b/2147483647/thumbnail/1024x576%3E/quality/75/?url=https%3A%2F%2Fuvn-brightspot.s3.amazonaws.com%2Fassets%2Fvixes%2F6%2F6-pueblos-argentinos-escondidos-entre-montanas-3.jpg\"\n","]\n","\n","#Iteramos por las lista para automatizar las predicciones de las imágenes cargadas\n","\n","for img_url in img_urls:\n"," # Realizar la predicción\n"," predicted_class, confidence, img = predict_image_from_url(model, img_url, class_names)\n","\n"," if predicted_class is not None:\n"," class_name = class_names[predicted_class]\n","\n"," # Obtener la información de la categoría predicha\n"," info_categoria_predicha = info_categorias[class_name]\n","\n"," # Generar el texto a hablar con la información de la categoría predicha\n"," text_to_speak = f'Sugerencia turística: {info_categoria_predicha}.'\n","\n"," # Generar el archivo de audio\n"," tts = gTTS(text=text_to_speak, lang='es') # 'es' para español\n"," ruta_audio_respuesta = '/kaggle/working/result_audio.mp3'\n"," tts.save(ruta_audio_respuesta)\n","\n"," # Reproducir el archivo de audio\n"," audio = Audio(ruta_audio_respuesta, autoplay=True)\n"," display(audio)\n","\n"," # Mostrar la imagen original y la predicción con proporciones correctas\n"," plt.imshow(img)\n"," plt.title(f\"Predicción: {class_name} - Confianza: {confidence * 100:.2f}%\")\n"," plt.axis('off')\n"," plt.show()\n","\n"," # Esperar a que termine el audio antes de continuar\n"," duration = len(text_to_speak.split()) / 2 # Aproximación de la duración del audio en segundos\n"," time.sleep(duration + 1) # Esperar un poco más para asegurarse de que el audio termine\n"," else:\n"," print(f\"No se pudo procesar la imagen desde la URL {img_url}.\")\n"]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"T4","provenance":[{"file_id":"https://storage.googleapis.com/kaggle-colab-exported-notebooks/notebook9fb2c2d731-eb3afd85-4561-4c1b-8e6a-ba5c9085044c.ipynb?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com/20240602/auto/storage/goog4_request&X-Goog-Date=20240602T202631Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=25f4ab10d63714aa65324e1e882748f82cf9364f89296d7ae2364e411942faf9e3cfebd540c901fcdb01d689f6a54b6449a26c3dc2ba89698413c915bc0223c1cc1aa37807a12e6076f393e97c40b9cff16fc1dfdaee5d2a094a15763dce9217c0124611861805f5f13f95a1bf02a9fb3fba88d603849dd1f42e87846b66d52253da0633b6cff1167077acdbd7e002baa3a61a653c685e9f9884108a00bd5b27189068c2566821125d3c78ee13ef2aaa2041b33ea1494c2e6dfa1e21ace11b66e58b5cb925a1242218936db18f0ad3f6edbb1b8c7484a35cec03ee4e4c980f450effadc2ede8aa1a890ea817cee3a6bd9c8d6f6bbc051e3f456bf96f2a8fa07e","timestamp":1717363885291},{"file_id":"https://storage.googleapis.com/kaggle-colab-exported-notebooks/notebook9fb2c2d731-b26af7bf-e8d7-4825-a680-af3fad861324.ipynb?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com/20240508/auto/storage/goog4_request&X-Goog-Date=20240508T221517Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=905a1ad44753d1e3785ebf0049f1295cceca5123d69e3e91232a1b1564a4f349b969801d8b49c326b7e2536331014cab6719ff472c5f7d9680b55f7bc67c30032aa785e5af90a49856c836e9cb07f19fd005a31d94b38d398c4aa85f22f6b64e30f6f73c64e06583d18088bf26870ed0ce386dcfc5db201af916f00e4f44e72ecf5cc3b45b9d335be28de06c6597b741aaebd645c2af0e203d15c4cc08b3d1f31c9cdc01038d1096b10ba4421edcdb737b0a8d4cc5b907a54ddfcfe066494fb5ed3976d6cdd711fb2750c7be42e10da096628f21e37ce527fc6a6c61c9d47603a8e7c0f9c84821b3fda040ebe9e77b951b81f1450a2f7f4691e3529f4e744e0f","timestamp":1715208670720},{"file_id":"https://storage.googleapis.com/kaggle-colab-exported-notebooks/notebookd612d5e298-89b0d249-d53b-4445-9e8f-7c2c51d97208.ipynb?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com/20240503/auto/storage/goog4_request&X-Goog-Date=20240503T001326Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=74fbc6f2674dab00f66444cb9cbd3dc8e0b3aca71315419b67b46b93b402c3b1fe21f979d803ea239fcacdca8033eb72717286eec7252cf5d61b5b4f3d12caaa2cb915573f6cf28433b334b1d6a47c9a8414f9652358b775472baf67a85d72d41751fe75a99b74f5f63b18d0aa0ace650f38420c8b6c574f50ecaf62564a8c55c78843e20e9df6f0a87ee8211f6188bbc67b45c89f91788f548799237b786a05f3bc411e4e5f570bb89c7ac919b76ce8e551b6eb8875084090b05b506b11d29bc116cf9b0e5ce061a20cd24bf25cb93c34ba384b48089ccd578947c7836b7193b4572d886c2e10da65e19be841a892b76b5518aeb371c92961856e4e424e2ed3","timestamp":1714705850123}]},"kaggle":{"accelerator":"none","dataSources":[{"datasetId":111880,"sourceId":269359,"sourceType":"datasetVersion"}],"dockerImageVersionId":30698,"isGpuEnabled":false,"isInternetEnabled":false,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","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.10.13"}},"nbformat":4,"nbformat_minor":0}