使用OpenCV-3.0.1 / python 2.7创建svm
这是多么奇怪的系统.我遇到了与此问题相同的问题:
AttributeError: ‘module’ object has no attribute ‘SVM_LINEAR’ 但是我不能再对这个问题添加任何问题或评论,所以我不得不问几乎相同的问题. 无论如何,请帮助以下: 所以我只注意到CV-3.0.1有卡方和交叉核,而我以前的2.4.9没有,所以我升级了(gentoo btw).一切都在2.4.9中工作,我只是想要moar内核选择(并且交叉与我正在做的事情很好地说Yang et al 2009). 但是按照上面的说法对我来说并没有用. 除了我平时: import cv2 我试过添加: import cv2.ml 和/或 from cv2 import ml 他们没有修复任何东西(我对python也不熟悉,所以不确定哪些是我的意思). 我的专栏: svm = cv2.SVM() 是导致问题的原因,我尝试将其更改为: svm = cv2.ml.SVM() 这并没有解决它,我得到的仍然是: Traceback (most recent call last): File "05traintestsift.py",line 12,in svm = cv2.SVM() AttributeError: 'module' object has no attribute 'SVM' 要么: Traceback (most recent call last): File "05traintestsift.py",in svm = cv2.ml.SVM() AttributeError: 'module' object has no attribute 'SVM' 当然有一些基本的方法可以让我的东西再次运作,我错过了吗? nb:除了尝试新的内核类型之外的所有内容都是在半小时前在2.4.9中工作的,所以它纯粹是3.0.1-r2中的一些新语法发生了变化. 我还会注意到他们在这里的文档中的示例:http://docs.opencv.org/3.1.0/dd/d3b/tutorial_py_svm_opencv.html也没有放入任何’.ml’,所以即使没有更新(我从第48行复制了svm = cv2.SVM()语法他们的例子btw). 我注意到,如果我只是删除该行,它会进一步通过代码,使用上一个问题中的.ml修复它接受我的参数: svm_params = dict(kernel_type = cv2.ml.SVM_CHI2,svm_type = cv2.ml.SVM_C_SVC,C=7,gamma=3) 但是当我去训练它时找不到svm: svm.train(traindata,trainnames,params=svm_params) (显然是因为我还没有创建’svm’对象) 解决方法
它应该是这样的:
trainingDataMat = np.array(*train_data*,np.float32) labelsMat = np.array([*label_data*],np.int32) svm = cv2.ml.SVM_create() svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) # svm.setDegree(0.0) # svm.setGamma(0.0) # svm.setCoef0(0.0) # svm.setC(0) # svm.setNu(0.0) # svm.setP(0.0) # svm.setClassWeights(None) svm.setTermCriteria((cv2.TERM_CRITERIA_COUNT,100,1.e-06)) svm.train(trainingDataMat,cv2.ml.ROW_SAMPLE,labelsMat) sample_data = np.array([*your_data*],np.float32) response = svm.predict(sample_data) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |