Proyecto de IA diferenciador calicó vs tuxedo
Proyecto de IA diferenciador calicó vs tuxedo
de eduarce2005 @eduarce2005
- 149
- 6
- 3
Introducción
En este proyecto realicé una IA que mediante la transferencia del aprendizaje es capaz de de distinguir entre los gatos CALICÓ y TUXEDO.

Materiales
Python
Google Colab
MobileNet-V2
Extensión de Google:"Download All Images"
Paso 1: Descargar la extensión "Download All Images"
Esta extensión se utilizará para guardar grupos de varias imágenes a la vez.

Paso 2: Buscar y descargar imágenes.
Buscamos las imágenes de los gatos tuxedo y calicó, en mi caso baje alrededor de 11 veces con la rueda del mouse para poder descargar mas o menos 500/400 imágenes.
Luego utilizamos la extensión de Google para descargarla y le damos a SAVE.


Paso 3: Meter los archivos descargados en carpetas.
Realizamos este paso para que luego una vez que cada archivo este en su respectiva carpeta, descomprimimos el archivo.

Paso 4: Limpiar las fotos.
Procedemos a limpiar las fotos, básicamente cada foto que este fuera de lo común o no encaje con lo que descargamos lo eliminamos.

Paso 5: Igualar y convertir a ZIP.
Una vez que tenemos los grupos de fotos listo, procedemos a igualar las cantidades de cada carpeta, es decir, si una tiene 269 y otra tiene 289, eliminamos 20 fotos al azar de la carpeta que contiene 289 fotos.
Luego seleccionamos todas las fotos de cada carpeta y las convertimos en un archivo ZIP, a cada archivo le ponemos el nombre "calico" y "tuxedo".

Paso 6: Google Colab.
Ya con los archivos ZIP listos, abrimos Google Colab(colab.research.google.com), una vez abierto buscamos en la columna izquierda la opción "Archivos" y la seleccionamos, luego creamos 2 carpetas con el nombre de "calico" y "tuxedo" y subimos los archivos ZIP a sus respectivas carpetas.

Paso 7: Copiar y pegar primera parte del código.
Vamos a copiar y pegar en sus respectivas celdas el código detallado a continuación:
---------------------------------------------------------------------------------------------
!unzip calico/calico.zip -d calico
!unzip tuxedo/tuxedo.zip -d tuxedo
!rm -rf calico/calico.zip
!rm -rf tuxedo/tuxedo.zip
!mkdir dataset
!cp -r calico dataset/calico
!cp -r tuxedo dataset/tuxedo
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np
datagen = ImageDataGenerator(
rescale=1. / 255,
rotation_range = 10,
width_shift_range = 0.15,
height_shift_range = 0.15,
shear_range = 5,
zoom_range = [0.7, 1.3],
validation_split = 0.2,
)
data_gen_entrenamiento = datagen.flow_from_directory("/content/dataset",
target_size=(224, 224),
batch_size=32, shuffle=True,
subset="training")
data_gen_pruebas = datagen.flow_from_directory("/content/dataset",
target_size=(224, 224),
batch_size=32, shuffle=True,
subset="validation")
import matplotlib.pyplot as plt
for imagen, etiqueta in data_gen_entrenamiento:
for i in range(10):
plt.subplot(2 , 5 , i+1)
plt.imshow(imagen[i])
break
plt.show()
import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds
from tensorflow.keras import layers
url = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4"
mobilenetv2 = hub.KerasLayer(url, input_shape=(224, 224, 3))
mobilenetv2.trainable = False
def mobilenet_v2_layer(inputs):
return mobilenetv2(inputs)
modelo = tf.keras.Sequential([
tf.keras.layers.Lambda(mobilenet_v2_layer, input_shape=(224, 224, 3)),
tf.keras.layers.Dense(2, activation="softmax")
])
modelo.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
EPOCAS = 50
entrenamiento = modelo.fit(data_gen_entrenamiento, epochs=EPOCAS, batch_size=32, validation_data=data_gen_pruebas)



Paso 8: Buscar ejemplos.
Vamos a entrar a Google para buscar una foto de un gato tuxedo y uno calicó para probar la IA, preferentemente buscaremos ejemplos que no se hayan descargado en el grupo de fotos del paso 2.
Una vez descargados dos ejemplos, uno de cada uno, vamos a cambiarles el nombre a "ejcalico" y "ejtuxedo".
Luego subimos estas fotos a Google Colab para utilizarlas.

Paso 9: Pegar el resto del código.
from PIL import Image
import cv2
def categorizar(ruta):
img = Image.open(ruta)
img = img.convert("RGB")
img = np.array(img).astype(float)/255
img = cv2.resize(img, (224, 224))
prediccion = modelo.predict(img.reshape(-1, 224, 224, 3 ))
return np.argmax(prediccion[0], axis=-1)
ruta = "ejtuxedo.jpeg"
prediccion = categorizar(ruta)
print(prediccion)
if prediccion == 0:
print("Calico")
img = Image.open(ruta)
img = np.array(img)
plt.imshow(img)
plt.show()
else:
print("Tuxedo")
img = Image.open(ruta)
img = np.array(img)
plt.imshow(img)
plt.show()
ruta = "ejcalico.jpeg"
prediccion = categorizar(ruta)
print(prediccion)
if prediccion == 0:
print("Calico")
img = Image.open(ruta)
img = np.array(img)
plt.imshow(img)
plt.show()
else:
print("Tuxedo")
img = Image.open(ruta)
img = np.array(img)
plt.imshow(img)
plt.show()
-------------------------------------------------------------------------------------------------------------------
Una vez finalizado este paso deberás ejecutarlo.


1 comentariu
Minunat!!!! Proiect foarte frumos 💖🐱
Treabă excelentă, felicitări! 👏🏻✨
Foarte complet și clar...Succes!!!
Conectați-vă sau înscrieți-vă gratuit pentru a comenta