Как я могу использовать свое собственное изображение для прогноза в CNN? - PullRequest
3 голосов
/ 06 февраля 2020

Я пытаюсь использовать свое собственное изображение размером 28x28 пикселей в своем CNN, но я продолжаю получать эту ошибку, когда пытаюсь изменить ее форму:

x = x.reshape(1,28,28,1)

ValueError: cannot reshape array of size 2352 into shape (1,28,28,1)

У меня изображение размером 28x28, но я могу ' изменить его в один канал в оттенках серого. Я использую spyder через anaconda и получаю «UnsatisfiableError» всякий раз, когда пытаюсь установить opencv в мою среду root. Pip install тоже не работает. Мне было интересно, если кто-нибудь должен был изменить мои изображения без использования внешней библиотеки и просто с помощью tenorflow.

Я искал ответ SO и пытался предложить решения, но, к сожалению, ни один из них не помог.

Заранее спасибо.


В ответ на AKX:

def Predict(imgPath):
    x = plt.imread(imgPath)
    x = x.reshape(1,28,28,1)


    with graph.as_default():
        out = model.predict(x)
        return out

В ответ на Skander HR:

(28,28,3)

В ответ на Матиаса Вальденегро:

Моя проблема в том, что openCV не работает , Он установлен, но я попытался проверить наличие прокси-серверов, установил python3 .dll и попытался установить пакет microsoft mediafeaturepack, чтобы избавиться от ошибки, но ни один из них не сработал. Когда я пишу такую ​​программу:

import cv2 as cv
print("done")

, я получаю сообщение об ошибке:

    import cv2 as cv
ImportError: DLL load failed: The specified module could not be found.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2020

Просто используйте Pillow, чтобы изменить размер изображения:

from PIL import Image
import numpy as np 
...
img = Image.fromarray(x)
img = img.resize((28,28))
x = np.asarray(img)
x = x.reshape(1,28,28,1)
...

установите его, используя pip pip install pillow или python3 -m pip install pillow, чтобы убедиться, что вы используете правильную версию python.

0 голосов
/ 06 февраля 2020

При прогнозировании собственного изображения и использовании изображений в градациях серого необходимо учитывать две концепции.

  1. По умолчанию в режиме серого в OpenCV или PIL изображение серого цвета отображается без последнего ось (цветовая ось). Это означает, что вы должны использовать np.expand_dims(image,axis=2) или image = image[..., np.newaxis]. После этого шага ваше изображение будет иметь размер (width,height,1).
  2. . Вы снова используете np.expand_dims(image, axis=0), чтобы добавить размер batch_index. Это необходимо, поскольку по умолчанию в Keras / TensorFlow вы прогнозируете только партии. В вашем случае фотография практически означает размер партии = 1.

Если вы помните эти два, вы успешно и легко будете использовать model.predict(), чтобы получить свой прогноз.

0 голосов
/ 06 февраля 2020

вы в основном используете RGB-изображение размером 28 * 28, поэтому ваш размер составляет 28 * 28 * 3 = 2352. Вам необходимо преобразовать его в изображение в градациях серого, чтобы оно соответствовало вашей тензорной форме.

вы можете преобразовать используя opencv используя следующую команду: -

gray_image = cv2.imread(path_to_image, cv2.IMREAD_GRAYSCALE) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...