NameError: имя 'read_image' не определено - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу проверить мою модель классификации изображений с изображением.Но я получаю некоторую ошибку:

 --> path = 'E:/My Work Elements/Thesis Related/Trash Classification/Trash New Code/test/cardboard/cardboard42.jpg'
    test_single_image(path)
        Traceback (most recent call last):

          File "<ipython-input-15-4a6021aada0c>", line 2, in <module>
            test_single_image(path)

          File "<ipython-input-14-1654f8f7a46b>", line 3, in test_single_image
            images = read_image(path)

        NameError: name 'read_image' is not defined

Я использую этот код:

def test_single_image(path):
  Garbage = ['cardboard','Glass','Metal','paper','plastic','Trash']
  images = read_image(path)
  time.sleep(.5)
  bt_prediction = vgg16.predict(images) 
  preds = model.predict_proba(bt_prediction)
  for idx, Garbage, x in zip(range(0,6), Garbage , preds[0]):
   print("ID: {}, Label: {} {}%".format(idx, Garbage, round(x*100,2) ))
  print('Final Decision:')
  time.sleep(.5)
  for x in range(3):
   print('.'*(x+1))
   time.sleep(.2)
  class_predicted = model.predict_classes(bt_prediction)
  class_dictionary = generator_top.class_indices
  print(class_dictionary)
  inv_map = {v: k for k, v in class_dictionary.items()} 
  print("Class: {}, prediction Result: {}".format(class_predicted[0], inv_map[class_predicted[0]])) 
  return load_img(path, target_size=(224,224))

path = 'E:/My Work Elements/Thesis Related/Trash Classification/Trash New Code/test/cardboard/cardboard42.jpg'
test_single_image(path)

Как мне исправить код?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы можете использовать API keras VGG16 для простого получения модели VGG16

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

features = model.predict(x)

Вы read_image смените метод на load_image.API-интерфейс keras изменит размер изображения в соответствии с запросом модели vgg16.

0 голосов
/ 23 сентября 2019

если вы используете opencv для чтения изображения, предполагается, что это cv2.imread ().поскольку я использовал vgg16, должна быть определена функция read_image, перед которой он принимает изображение любой формы, изменяет его размер до стандартной формы (224 * 224 * 3) и выполняет любой другой требуемый тип предварительной обработки.

Если вы используете предварительную обработку keras, она имеет предопределенную функцию load_img, которая выполняет предварительную обработку для вас.

пример:

from keras.preprocessing.image import load_img
load_image(path,target_size= (224*224*3))

моя функция загрузки образца

from keras.preprocessing import image 
from keras.applications.imagenet_utils import decode_predictions, preprocess_input
def load_image(path): 
  img = image.load_img(path,target_size=model.input_shape[1:3]) 
  x = image.img_to_array(img) 
  x = np.expand_dims(x,axis=0) 
  x = preprocess_input(x) 
  return img,x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...