Как я могу предварительно обработать мое изображение, чтобы оно могло обрабатываться SVM так же, как оно обрабатывает набор данных MNIST - PullRequest
0 голосов
/ 22 октября 2019

Я хочу проанализировать свои собственные изображения, используя SVM, обученный на наборе данных MNIST. Как я могу предварительно обработать свое изображение, чтобы оно могло быть принято моделью?

dataset = datasets.fetch_openml("mnist_784", version=1)
(trainX, testX, trainY, testY) = train_test_split(
    dataset.data / 255.0, dataset.target.astype("int0"), test_size = 0.33)

ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", type=str, default="3scenes",
    help="path to directory containing the '3scenes' dataset")
ap.add_argument("-m", "--model", type=str, default="knn",
    help="type of python machine learning model to use")

args = vars(ap.parse_args())

#user input image to classify

userImage = cv.imread('path_to_image/1.jpg')

#preprocess user image
#...

models = {
    "svm": SVC(kernel="linear"),
}

# train the model
print("[INFO] using '{}' model".format(args["model"]))
model = models[args["model"]]
model.fit(trainX, trainY)

print("[INFO] evaluating image...")
predictions = model.predict(userImage)
print(classification_report(userImage, predictions))

1 Ответ

0 голосов
/ 27 октября 2019

Изображения MNIST имеют следующую форму: 28x28x1, ширина 28 пикселей, высота 28 пикселей и один цветовой канал, т.е. оттенки серого.

Если ваша модель принимает ту же входную форму, вы можете использовать следующее:

import cv2
userImage = cv2.imread('path_to_image/1.jpg')
# resize image to 28x28
userImage = cv2.resize(userImage,(28,28))
# convert to grayscale
userImage = cv2.cvtColor(userImage,cv2.COLOR_BGR2GRAY)
# normalize
userImage /= 255.

В зависимости от того, насколько велико ваше изображение, вы можете выбрать патч 28x28 вручную. В противном случае вы рискуете потерять качество изображения и, следовательно, информацию.

Если модель берет на вход вектор, вы можете использовать следующее, чтобы сгладить изображение перед подачей его на модель:

userImage = np.reshape(userImage,(784,))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...