# ============================================
# Clasificación de imágenes con MobileNetV2
# ============================================
# Importar las librerías necesarias
import numpy as np
import matplotlib.pyplot as plt
from google.colab import files
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.applications.mobilenet_v2 import decode_predictions
from tensorflow.keras.preprocessing import image
# ============================================
# 1. Cargar el modelo preentrenado
# ============================================
modelo = MobileNetV2(weights="imagenet")
print("Modelo MobileNetV2 cargado correctamente.")
# ============================================
# 2. Subir una imagen
# ============================================
archivos_subidos = files.upload()
nombre_imagen = next(iter(archivos_subidos))
print("Imagen seleccionada:", nombre_imagen)
# ============================================
# 3. Cargar y visualizar la imagen
# ============================================
imagen_original = image.load_img(nombre_imagen)
plt.figure(figsize=(6, 6))
plt.imshow(imagen_original)
plt.axis("off")
plt.title("Imagen cargada")
plt.show()
# ============================================
# 4. Preprocesar la imagen
# ============================================
# MobileNetV2 espera imágenes de 224 x 224 píxeles
imagen_redimensionada = image.load_img(
nombre_imagen,
target_size=(224, 224)
)
# Convertir la imagen en un arreglo numérico
imagen_array = image.img_to_array(imagen_redimensionada)
# Agregar una dimensión para representar el lote
imagen_array = np.expand_dims(imagen_array, axis=0)
# Aplicar el preprocesamiento requerido por MobileNetV2
imagen_procesada = preprocess_input(imagen_array)
# ============================================
# 5. Realizar la predicción
# ============================================
predicciones = modelo.predict(imagen_procesada)
# Obtener las tres clases más probables
resultados = decode_predictions(
predicciones,
top=3
)[0]
# ============================================
# 6. Mostrar los resultados
# ============================================
print("\nClases identificadas:")
for codigo, clase, probabilidad in resultados:
porcentaje = probabilidad * 100
print(f"{clase}: {porcentaje:.2f}%")
# Mostrar la clase principal
clase_principal = resultados[0][1]
probabilidad_principal = resultados[0][2] * 100
print(
f"\nEl objeto identificado principalmente es: "
f"{clase_principal}, con una probabilidad de "
f"{probabilidad_principal:.2f}%."
)
Primero, se carga el modelo MobileNetV2 utilizando los pesos aprendidos con el conjunto de datos ImageNet. Luego, el usuario puede subir una imagen desde su computador.
La imagen se redimensiona a 224 × 224 píxeles, ya que ese es el tamaño esperado por el modelo. Después, se transforma en un arreglo numérico, se agrega la dimensión correspondiente al lote de imágenes y se aplica la función de preprocesamiento de MobileNetV2.
Finalmente, el modelo realiza la predicción y muestra las tres clases con mayor probabilidad, indicando también el porcentaje de confianza para cada una.
Conclusión
En esta actividad utilicé el modelo preentrenado MobileNetV2 para clasificar una imagen. Para hacerlo, fue necesario adaptar la imagen al tamaño y formato que espera el modelo. Después del preprocesamiento, MobileNetV2 entregó diferentes resultados con sus respectivos porcentajes de probabilidad. Esta experiencia demuestra que los modelos preentrenados permiten realizar tareas de clasificación de imágenes sin tener que entrenar una red neuronal desde cero.