Есть две основные проблемы с вашим кодом.
Во-первых, вам не нужно классифицировать весь набор тестов в каждом взаимодействии цикла for. Предсказания метки класса для одного изображения за раз будет достаточно:
prediction = svm.clf.predict([testDataGlobal[index, :]])
Обратите внимание, что testDataGlobal[index, :]
необходимо заключить в квадратные скобки [ ]
, так как метод predict()
ожидает двухмерную переменную в виде массива.
Во-вторых, и самое главное, допустим, что функция glob
выдает список из трех файлов изображений, а именно imgA.jpg
, imgB.jpg
и imgC.jpg
, и обозначим их соответствующие векторы признаков как featsA
, featsB
и featsC
. Для правильной работы вашего кода важно, чтобы testDataGlobal
был организован следующим образом:
[featsA,
featsB,
featsC]
Если векторы элементов расположены в другом порядке, вы, вероятно, получите неправильные результаты.
Вы можете правильно пометить изображения с помощью следующего фрагмента (не тестировался):
test_images = glob.glob("dataset/test/*.jpg")
for filename in test_images:
img = cv2.imread(filename)
img = cv2.resize(img, fixed_size)
feature_vector = your_feature_extraction_method(img)
prediction = svm.clf.predict([feature_vector])
cv2.putText(img, prediction[0], (20, 30),
cv2.FONT_HERSHEY_TRIPLEX, .7 , (0, 255, 255), 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
где your_feature_extraction_method()
обозначает функцию, которая использует изображение и возвращает его вектор признаков (в виде массива 1D). . [1 125]
Примечание : не забудьте заключить feature_vector
в квадратные скобки [ ]
. Вы также можете использовать любой из следующих подходов, чтобы увеличить измерение feature_vector
в еще одном измерении:
prediction = svm.clf.predict(feature_vector[None, :])
prediction = svm.clf.predict(feature_vector[np.newaxis, :])
prediction = svm.clf.predict(np.atleast_2d(feature_vector))
Посмотрите на Верхушку дерева . Вы можете определить свой DSL как грамматику выражения синтаксического анализа, а затем проанализировать ее, чтобы создать свои правила в любом формате, который вам нравится.
Я не знаю точно, как и на каких объектах следует оценивать эти правила, но если бы это были модели ActiveRecord, возможно, Ambition будет подходить. Это позволит вам писать условия в ruby, что-то вроде:
User.select { |m| m.name == 'jon' && m.age == 21 }
Это преобразуется в SQL, и вы получите всех пользователей, удовлетворяющих заданным критериям