我正在尝试创建一个由GPU驱动的BOVW模型,该模型使用KAZE描述符和SVM模型对对象进行分类。但是我遇到了一个我无法解决的错误,并且我在文档中没有找到任何有关它的信息。
更具体地说,我正在加载图像,提取KAZE描述符,使用BOVW模型提取聚簇索引并将其传递给SVM模型。
image = cv2.imread('/path/to/image.jpg')
image = cv2.UMat(image)
# feature_extractor = cv2.KAZE_create
# bow_extract = cv2.BOWImgDescriptorExtractor, pretrained
# svm = cv2.ml.SVM_create(), pretrained
kp = feature_extractor.detect(image)
bowsig = bow_extract.compute(image=image, keypoints=kp)
prediction = svm.predict(bowsig)
错误发生在bow_extract.compute(image=image, keypoints=kp)
中:
TypeError: image is not a numpy array, neither a scalar
现在,在docs for cv2.BOWImgDescriptorExtractor中,计算函数接受InputArray,它也可以是UMat ...
现在我很困惑。我是否应该将可以在我的代码中使用GPU的变量转换为cv2.UMat(image
中的feature_extractor.detect(image)
和bowsig
中的svm.predict(bowsig)
),而忘记在GPU上计算BOVW功能?