Как сохранить вывод (прогноз) модели CNN в виде изображения? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть папка с именем Downloaded, в которой содержатся изображения, для которых прогноз должен быть выполнен обученной моделью CNN.

Ниже приведен код для импорта изображений:

import os
images = []

for filename in os.listdir("downloaded"):
    img = Image.open(os.path.join("downloaded", filename))
    img = img.resize((32, 32))
    plt.imshow(img)
    plt.show()
    img = np.array(img) / 255
    images.append(img)

Теперь приведенный ниже код помогает делать прогнозы на этих изображениях:

predictions = model.predict(images)

Наконец, прогнозы отображаются в виде изображения и графика для каждого изображения.

fig, axs = plt.subplots(9, 2, figsize=(10, 25))
axs = axs.ravel()
for i in range(18):
    if i%2 == 0:
        axs[i].axis('off')
        axs[i].imshow(images[i // 2])
        axs[i].set_title("Prediction: %s" % id_to_name[np.argmax(predictions[i // 2])])

    else:
        axs[i].bar(np.arange(65), predictions[i // 2])
        axs[i].set_ylabel("Softmax")
        axs[i].set_xlabel("Labels")

plt.show()

Я хочу сохранить этот вывод в виде изображения.

Для этого я использую следующий код:

fig, axs = plt.subplots(9, 2, figsize=(10, 25))
axs = axs.ravel()
for i in range(18):
    if i%2 == 0:
        axs[i].axis('off')
        axs[i].imshow(images[i // 2])
        axs[i].set_title("Prediction: %s" % id_to_name[np.argmax(predictions[i // 2])])
        plt.imsave('"Prediction: %s" % id_to_name[np.argmax(predictions[i // 2])]',axs[i])

    else:
        axs[i].bar(np.arange(65), predictions[i // 2])
        axs[i].set_ylabel("Softmax")
        axs[i].set_xlabel("Labels")


plt.show()

Но, появляется следующая ошибка:

AttributeError: 'AxesSubplot' object has no attribute 'shape'

Не могли бы вы рассказать, как сохранить этот вывод в для изображений?

PS: Ниже содержится то, что images содержит:

Out [94]:

[массив ([[[1., 0,85882353, 0,85882353], [1., 0.04313725, 0.03921569], [1., 0.04313725, 0.03921569], ..., [1., 0.04313725, 0.03921569], [1., 0.03529412, 0.03137255], [1., 0.76862745, 0.76470588]],

    [[1.        , 0.        , 0.        ],
     [1.        , 0.        , 0.        ],
     [1.        , 0.        , 0.        ],
     ...,
     [1.        , 0.        , 0.        ],
     [1.        , 0.        , 0.        ],
     [1.        , 0.        , 0.        ]],...................

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Мне удалось сохранить изображения, используя следующий код:

for i in range(len(images)*2):
        finalPrediction.append(id_to_name[np.argmax(predictions[i // 2])])
        plt.imsave(('testo/ {}.jpg'.format(str(i // 2)+id_to_name[np.argmax(predictions[i // 2])])),images[i // 2])
0 голосов
/ 03 октября 2018

Если вы хотите сохранить массив как изображение, вам нужно предоставить массив для imsave

plt.imsave('filename.png', images[i // 2])

Если вы хотите сохранить фигуру matplotlib с графиком imshow в нем в файл, который выследует использовать savefig.

fig.savefig("filename.png")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...