2017-11-21 7 views
2

openCV의 SVM을 교육하고 설명서를 읽고 온라인에서 예제를 본 후 문제는 내 교육 데이터 및/또는 레이블의 형식이 어떻게되는지를 잘 모르겠다. 그것을 해결하기 위해. 나는이 오류 메시지가 계속openCV SVM 용 데이터 서식 지정 방법

[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2] 

:

[[5795, 41957, 65, 11910, 23, 11470, 4928, 652, 53.1, 43.0, 30.9, 1401, 40311], [9894, 47158, 90, 6525, 36, 7179, 5239, 679, 53.1, 55.0, 37.0, 1358, 110809], [8739, 37084, 0, 2586, 0, 16315, 11579, 497, 77.0, 21.0, 34.0, 1358, 90314], [12249, 50962, 0, 362, 60, 12555, 114, 498, 82.0, 27.0, 54.0, 1359, 91902], [15187, 43766, 139, 2145, 91, 10767, 4026, 679, 82.0, 31.0, 48.9, 1359, 91509], [115, 40564, 125, 371, 812, 31401, 2059, 1353, 37.9, 65.0, 27.0, 1356, 20999], [75, 202, 2, 371, 4, 70454, 5046, 646, 39.9, 89.0, 37.0, 1357, 110909], [0, 0, 0, 0, 0, 62941, 13209, 650, 45.5, 80.0, 37.7, 1333, 111517], [0, 0, 0, 0, 0, 62593, 13690, 517, 46.4, 91.0, 43.9, 1126, 111017], [0, 42, 0, 268, 0, 60787, 15286, 417, 50.0, 57.0, 35.1, 1552, 110717], [8457, 28320, 56, 815, 413, 37816, 454, 469, 78.1, 46.0, 55.9, 1359, 82502], [8797, 28189, 21, 721, 349, 37940, 313, 470, 80.1, 40.0, 54.0, 1358, 83017], [1063, 135, 17, 5947, 752, 67682, 744, 460, 82.9, 24.0, 42.1, 1562, 81802], [7906, 39942, 109, 926, 196, 26724, 534, 463, 84.9, 26.0, 46.0, 1359, 82302], [8834, 50751, 67, 722, 119, 15431, 402, 474, 84.9, 29.0, 48.9, 1359, 82402], [4493, 16618, 23, 4159, 0, 41145, 9916, 446, 91.9, 23.0, 48.9, 1358, 81512], [6309, 34053, 13, 5698, 0, 20845, 9415, 467, 98.1, 23.0, 54.0, 1358, 81612]] 

이 좋아하는 것을 레이블하는 모습입니다 :

def train_svm(trainingData,labels): 
    svm_params = dict(kernel_type = cv2.ml.SVM_LINEAR, svm_type = cv2.ml.SVM_C_SVC, C=2.67, gamma=3) 

    svm = cv2.ml.SVM_create() 
    svm.train(np.array(trainingData),np.array(labels),params=svm_params) 
    svm.save('svm_data.dat') 

이 trainingData는 모습입니다 : 여기

내 코드입니다 :

svm.train(np.array(trainingData),np.array(labels),params=svm_params) 
TypeError: only length-1 arrays can be converted to Python scalars 

내 문제는 데이터 포맷 방식입니까? 어떻게 수정해야합니까?

:

답변

1

난 당신이 float.And로 기차 데이터의 DTYPE을 언급하지 않는이 내가

p:857: error: (-5) train data must be floating-point matrix in function cvCheckTrainData 

그냥이 라인을 대체하는 코드를 실행했을 때 내가 가진 오류 때 비슷한 문제가 발생했다 이와

svm.train(np.array(trainingData),np.array(labels),params=svm_params) 

:

svm.train(np.array(trainingData,np.float32),np.array(labels,np.int32),params=svm_params) 
+0

감사합니다! 나는 svm.train (np.array (trainingData, np.float32), cv2.ml.ROW_SAMPLE, np.array (labels, np.int32)) 라인을 사용해야했지만, 답을 찾지 못했을 것이다! – StarSweeper

+0

좋아요! 나는 그것이 기뻤다 :) – janu777