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
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