Cambiar el tamaño de la imagen en TensorFlow
- Cambiar el tamaño de una sola imagen en TensorFlow
- Cambiar el tamaño de una serie de imágenes en TensorFlow
Las imágenes se pueden manipular a través de bibliotecas como OpenCV, Pillow, TensorFlow, etc. TensorFlow está más enfocado debido a las actualizaciones constantes y una mejor compatibilidad con las GPU.
TensorFlow versión 1x y versión 2x tienen diferentes clases y métodos para realizar múltiples operaciones de imagen. Algunos métodos se han actualizado sintácticamente en la versión 2x.
En la siguiente sección, mostraremos dos ejemplos. Uno se trataría con la versión 2x en una sola imagen.
El siguiente ejemplo incluirá TensorFlow versión 1x con una serie de imágenes. Saltemos a esa parte.
Cambiar el tamaño de una sola imagen en TensorFlow
En este caso, hemos utilizado Google Colab como nuestro entorno. Esto es para especificar que Google Colab no admite la versión 1x de TensorFlow y solo importa la versión 2x.
Inicialmente se montó el disco, y así se habilitó la importación de imágenes.
Después de tomar la ruta de la imagen, la cargamos como una imagen de TensorFlow. La operación de redimensionamiento
no ocurrirá en múltiples formatos de imagen; en su lugar, deben convertirse en una matriz con los valores de píxeles correspondientes.
En la siguiente fase, declararemos una altura y un ancho específicos para la imagen y pasaremos esos valores en el método resize()
de TensorFlow. Más tarde, volveremos a convertir las matrices en una imagen y la trazaremos para visualizar si la calidad de la imagen varió al cambiar el tamaño.
Fragmento de código:
from google.colab import drive
drive.mount("/content/drive")
import tensorflow as tf
import matplotlib.pyplot as plt
image_path = "/content/drive/MyDrive/IMG/pizza.jpg"
img = tf.keras.utils.load_img(image_path)
plt.imshow(img)
print(img.size)
image_array = tf.keras.preprocessing.image.img_to_array(img)
new_img = tf.image.resize(image_array, (70, 70))
resized_img = tf.keras.preprocessing.image.array_to_img(new_img)
plt.imshow(resized_img)
Producción:
Cambiar el tamaño de una serie de imágenes en TensorFlow
Usaremos el Jupyter Notebook en este ejemplo. Las dependencias y los métodos requeridos están disponibles en la versión 1x de TensorFlow.
Aunque esos métodos se actualizan constantemente en la versión 2x, preferimos usar el anterior para un funcionamiento fluido.
Hemos instalado los paquetes necesarios y los hemos importado. La versión de TensorFlow, en este caso, es 1.15.8
.
En este caso, las imágenes se obtienen como cadenas y luego se pasan a tf.train.string_input_producer()
y obtenemos una cola de archivos.
Tras inicializar un lector de archivos, recibiremos los nombres y contenidos correspondientes. Los contenidos son posteriormente decodificados al formato jpeg
.
Por lo general, TensorFlow usa la transformada de coseno discreta como valor predeterminado para sus entradas. Luego, encasillamos las imágenes para que floten y finalmente las redimensionamos.
Fragmento de código:
import matplotlib.pyplot as plt
import tensorflow as tf
import os
tf.__version__
image_path = "D:M"
categ = ["coffee"]
for c in categ:
path = os.path.join(image_path, c)
for img in os.listdir(path):
image = [os.path.join(path, img)]
queue = tf.train.string_input_producer(image)
reader = tf.WholeFileReader()
name, content = reader.read(queue)
images = tf.image.decode_jpeg(content, channels=3)
print(images.shape)
images = tf.cast(images, tf.float32)
resized_images = tf.image.resize_images(images, (224, 224))
print(resized_images.shape)
Producción: