AWS SageMaker Jupyter Notebook: Images not Showing

Question:

I’m currently trying to display some images using AWS SageMaker making use of its Jupyter Notebook app. However, all I’m trying to do is show the loaded images. I have written a function to do this but all I’m left with is the images index and image name on calling the function.

The function:

import glob
import random
import matplotlib.pyplot as plt

def get_random_image(dir, condition):

    placeholder = ''
    
    if condition == 'n':
        placeholder = 'NORMAL'
    elif condition == 'p':
        placeholder = 'PNEUMONIA'
    else:
        raise Exception("Sorry, invalid condition")
        
    #folder to look through for images
    folder = f"./data/chest_xray/{dir}/{placeholder}/*.jpeg"
    img_paths = glob.glob(folder)
    #folders have different number of images in them
    max_length = len(img_paths)
    randomNumber = random.randint(0, max_length)
    
    for index, item in enumerate(img_paths, start = 1):
    
        if index == randomNumber:
            #print image path
            print(index, item)
            #image from folder
            image = plt.imread(item)
            readyImage = plt.imshow(image)
            return readyImage

Calling the function:

get_random_image("train", "p")

Example result:

2078 ./data/chest_xray/train/PNEUMONIA/person522_virus_1041.jpeg
<matplotlib.image.AxesImage at 0x7fd89ab86090>

I’ve done various things from logging out/in to restarting the kernel; only one option and thats python 3.

Asked By: MRL

||

Answers:

You have to add line to the first cell (or before the first plt.show() call) of the notebook:

%matplotlib inline

This a is a magic function in IPython.

According to documentation:

With this backend, the output of plotting commands is displayed inline
within frontends like the Jupyter notebook, directly below the code
cell that produced it. The resulting plots will then also be stored in
the notebook document.

Answered By: Giuseppe La Gualano