Я тренирую SVM с использованием дескриптора ORB рядом с BOW, однако при его выполнении я получаю следующую ошибку
"return bowDiction.compute (серый, orb.detect (серый))cv2.error: OpenCV (3.4.5) D: \ Build \ OpenCV \ opencv-3.4.5 \ modules \ features2d \ src \ matchers.cpp: 753: ошибка: (-215: утверждение не выполнено) _queryDescriptors.type () == trainDescType в функции 'cv :: BFMatcher :: knnMatchImpl' "
Я понимаю, что ошибка возникает из-за того, что дескриптор запроса и дескриптор поезда не имеют одинаковый тип, однако я не могу найтиспособ исправить это.
for p in training_paths:
image = cv2.imread(p)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Initiate STAR detector
orb = cv2.ORB_create()
# find the keypoints with ORB
kp = orb.detect(gray,None)
# compute the descriptors with ORB
kp, des = orb.compute(gray, kp)
des = np.float32(des)
BOW.add(des)
#dictionary created
dictionary = BOW.cluster()
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)
orb2 = cv2.ORB_create()
bowDiction = cv2.BOWImgDescriptorExtractor(orb2, cv2.BFMatcher(cv2.NORM_L2))
bowDiction.setVocabulary(dictionary)
print("bow dictionary", np.shape(dictionary))
#returns descriptor of image at pth
def feature_extract(pth):
im = cv2.imread(pth, 1)
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
return bowDiction.compute(gray, orb.detect(gray))
train_desc = []
train_labels = []
i = 0
for p in training_paths:
##Error Here
train_desc.extend(feature_extract(p))
if names_path[i]=='Accordian':
train_labels.append(1)
if names_path[i]=='Dollar Bill':
train_labels.append(2)
if names_path[i]=='Motor Bike':
train_labels.append(3)
if names_path[i]=='Soccer Ball':
train_labels.append(4)
i = i+1
После этого, я надеюсь выполнить некоторые методы для оценки производительности классификатора SVM, я нашел процент деления и перекрестной проверки, однако я не знаю, если ониработать в этом случае.
Наконец, я хотел бы знать, какие соображения я должен иметь при обучении SVM с использованием BOW.