entregable 3, problema con el código del notebook 1

entregable 3, problema con el código del notebook 1

de Karolina Soca Rosas -
Número de respuestas: 1

Buenas, haciendo el entregable 3, tuve un problema con parte del código que está en el notebook, que al correrlo me daba error.

El código problema es el siguiente:

# Sample a minibatch and show the images and captions.

# If you get an error, the URL just no longer exists, so don't worry!

# You can re-sample as many times as you want.


print(sys.version)

batch_size = 3


captions, features, urls = sample_coco_minibatch(data, batch_size=batch_size)

for i, (caption, url) in enumerate(zip(captions, urls)):

    plt.imshow(image_from_url(url))

    plt.axis('off')

    caption_str = decode_captions(caption, data['idx_to_word'])

    plt.title(caption_str)

    plt.show()

El error que me sale es el siguiente:


3.9.7 (default, Sep 16 2021, 08:50:36) 
[Clang 10.0.0 ]
URL Error:  [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129) http://farm4.staticflickr.com/3357/3180229799_249761e7af_z.jpg
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/var/folders/yd/_6nt44dn44n03lbl38bbbqkc0000gq/T/ipykernel_95336/1798664965.py in <module>
      8 captions, features, urls = sample_coco_minibatch(data, batch_size=batch_size)
      9 for i, (caption, url) in enumerate(zip(captions, urls)):
---> 10     plt.imshow(image_from_url(url))
     11     plt.axis('off')
     12     caption_str = decode_captions(caption, data['idx_to_word'])

~/opt/anaconda3/lib/python3.9/site-packages/matplotlib/pyplot.py in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, filternorm, filterrad, resample, url, data, **kwargs)
   2901         filternorm=True, filterrad=4.0, resample=None, url=None,
   2902         data=None, **kwargs):
-> 2903     __ret = gca().imshow(
   2904         X, cmap=cmap, norm=norm, aspect=aspect,
   2905         interpolation=interpolation, alpha=alpha, vmin=vmin,

~/opt/anaconda3/lib/python3.9/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
   1359     def inner(ax, *args, data=None, **kwargs):
   1360         if data is None:
-> 1361             return func(ax, *map(sanitize_sequence, args), **kwargs)
   1362 
   1363         bound = new_sig.bind(ax, *args, **kwargs)

~/opt/anaconda3/lib/python3.9/site-packages/matplotlib/axes/_axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, filternorm, filterrad, resample, url, **kwargs)
   5607                               resample=resample, **kwargs)
   5608 
-> 5609         im.set_data(X)
   5610         im.set_alpha(alpha)
   5611         if im.get_clip_path() is None:

~/opt/anaconda3/lib/python3.9/site-packages/matplotlib/image.py in set_data(self, A)
    698         if (self._A.dtype != np.uint8 and
    699                 not np.can_cast(self._A.dtype, float, "same_kind")):
--> 700             raise TypeError("Image data of dtype {} cannot be converted to "
    701                             "float".format(self._A.dtype))
    702 

TypeError: Image data of dtype object cannot be converted to float
Intenté hacer todo lo que pude para eliminar el error sin modificar ese código, pero no hubo caso, la única forma que encontré fue modificandolo.
Que entiendo no debería hacerlo, como quería avanzar en la tarea lo hice para poder hacer las siguientes partes, y sustituí ese código por el siguiente:

from PIL import Image

import requests

from io import BytesIO


batch_size = 3


captions, features, urls = sample_coco_minibatch(data, batch_size=batch_size)

for i, (caption, url) in enumerate(zip(captions, urls)):

    # Descargar la imagen desde la URL

    response = requests.get(url)

    img = Image.open(BytesIO(response.content))


    # Mostrar la imagen

    plt.imshow(img)

    plt.axis('off')


    # Decodificar y mostrar la leyenda

    caption_str = decode_captions(caption, data['idx_to_word'])

    plt.title(caption_str)

    

    plt.show()

Con este si me carga todo correctamente.


La verdad es que mi duda es que no sé que hacer, porque lo que no me funciona es algo que viene por defecto, pero a su vez sino lo cambiaba no podía avanzar.
Puedo dejar el código cambiado o existe algún inconveniente? Yo lo corro de manera local, por si eso tiene algo que ver.

Desde ya muchas gracias.

Saludos,


Karolina

En respuesta a Karolina Soca Rosas

Re: entregable 3, problema con el código del notebook 1

de Camilo Joaquin Mariño Cabrera -
Hola Karolina,

No hay problema en que hayas realizado esa modificación para que funcione correctamente. Es posible que el error esté relacionado con algún problema en el entorno de Python de tu máquina local.

Saludos,
Camilo