0

openCV の Hough Circle Transform 用に新しい SimpleCV FeatureExtractor を構築しようとしていますが、機械学習スクリプトのトレーニング フェーズでエラーが発生します。

以下のエラーを提供しました。self.mDataSetOrangeこれは、 SimpleCV の TreeClassifier.py 内で変数を作成するときに、Orange 機械学習ライブラリによって発生します。データセットのサイズは、何らかの理由で Orange の予想と一致しません。Orange のソース コードを調べたところ、ここでエラーがスローされることがわかりました。

オレンジ/ソース/オレンジ/cls_example.cpp

int const nvars = dom->variables->size() + dom->classVars->size();
if (Py_ssize_t(nvars) != PyList_Size(lst)) {
    PyErr_Format(PyExc_IndexError, "invalid list size (got %i, expected %i items)",
        PyList_Size(lst), nvars);
    return false;
}

明らかに、私の機能エクストラクタはオレンジが必要とするものを抽出していませんが、何が問題なのかを特定することはできません. 私は SimpleCV と Orange にかなり慣れていないので、誰かが私が犯している間違いを指摘していただければ幸いです。

エラー:

Traceback (most recent call last):
  File "MyClassifier.py", line 113, in <module>
    MyClassifier.run(MyClassifier.TRAIN_RUN_TYPE, trainingPaths)
  File "MyClassifier.py", line 39, in run
    self.decisionTree.train(imgPaths, MyClassifier.CLASSES, verbose=True)
  File "/usr/local/lib/python2.7/dist-packages/SimpleCV-1.3-py2.7.egg/SimpleCV/MachineLearning/TreeClassifier.py", line 282, in train
    self.mDataSetOrange = orange.ExampleTable(self.mOrangeDomain,self.mDataSetRaw)
IndexError: invalid list size (got 266, expected 263 items) (at example 2)

HoughTransformFeatureExtractor.py

class HoughTransformFeatureExtractor(FeatureExtractorBase):

    def extract(self, img):
        bitmap = img.getBitmap()
        cvMat = cv.GetMat(bitmap)
        cvImage = numpy.asarray(cvMat)

        height, width = cvImage.shape[:2]
        gray = cv2.cvtColor(cvImage, cv2.COLOR_BGR2GRAY)

        circles = cv2.HoughCircles(gray, cv2.cv.CV_HOUGH_GRADIENT, 2.0, width / 2)
        self.featuresLen = 0

        if circles is not None:
            circleFeatures = circles.ravel().tolist()
            self.featuresLen = len(circleFeatures)

            return circleFeatures
        else:
            return None

    def getFieldNames(self):
        retVal = []
        for i in range(self.featuresLen):
            name = "Hough"+str(i)
            retVal.append(name)
        return retVal

    def getNumFields(self):
        return self.featuresLen
4

1 に答える 1