Как сохранить изображение, которое было визуализировано / сгенерировано моделью Keras?

#numpy #machine-learning #keras #object-detection

#numpy #машинное обучение #keras #обнаружение объекта

Вопрос:

Я использую detecto model для визуализации изображения. Итак, по сути, я передаю изображение этой модели, и оно проведет граничную линию по объекту и отключит визуализированное изображение.

 from keras.preprocessing.image import load_img
from keras.preprocessing.image import save_img
from keras.preprocessing.image import img_to_array
from detecto import core, utils, visualize

image = utils.read_image('retina_model/4.jpg')
model = core.Model()

labels, boxes, scores = model.predict_top(image)
img=visualize.show_labeled_image(image, boxes,)
 

введите описание изображения здесь

Теперь я пытаюсь преобразовать это визуализированное изображение в массив Numpy. Я использую приведенную ниже строку для преобразования изображения в массив numpy :

 img_array = img_to_array(img)
 

Это выдает ошибку :

 Unsupported Image Shape
 

Все, что я хочу, это отобразить визуализированное изображение, которое является результатом этой модели, на моем веб-сайте. План состоит в том, чтобы преобразовать изображение в массив numpy, а затем сохранить изображение с помощью кода, используя строку ниже :

 save_img('image1.jpg', img_array)
 

Итак, я планировал загрузить это визуализированное изображение (выходные данные этой модели), чтобы я мог отобразить загруженное изображение на своем веб-сайте. Если есть какой-то другой способ добиться этого, пожалуйста, дайте мне знать.

Ответ №1:

В документации Detecto говорится, что функция utils.read_image() уже возвращает массив NumPy.

Но вы передаете возврат visualize.show_labeled_image() в Keras img_to_array(img)

Глядя на исходный код visualize.show_labeled_image() в Detecto, у него нет возвращаемого типа, поэтому по умолчанию он возвращает None . Итак, я думаю, ваша проблема в том, что вы не передаете допустимое изображение в img_to_array (img), но нет.

Я не думаю, что вызов img_to_array(img) необходим, потому что у вас уже есть изображение в виде массива NumPy. Но обратите внимание, что, согласно документации Detecto, utils.read_image() «Эквивалентно использованию функции cv2.imread OpenCV и преобразованию из формата BGR в формат RGB». Убедитесь, что это то, что вы хотите.