0

I Problem über meinen Code haben, sind hier mein Code"Indexerror: Listenindex außerhalb des Bereichs" in SVM-Klassifikator mit Python

import os 
os.getcwd() 
from SimpleCV import EdgeHistogramFeatureExtractor, HueHistogramFeatureExtractor, MorphologyFeatureExtractor 
from SimpleCV.MachineLearning import * 
from SimpleCV.ImageClass import Image, ImageSet, ColorSpace 
edgeExtractor = EdgeHistogramFeatureExtractor(20) 
hueExtractor = HueHistogramFeatureExtractor(10) 
morphoExtractor = MorphologyFeatureExtractor() 
extractorsList = [edgeExtractor, hueExtractor, morphoExtractor] 
svm = SVMClassifier(extractorsList) 
tree = TreeClassifier(extractorsList, flavor='Boosted') 
naiveBayes = NaiveBayesClassifier(extractorsList) 
trainPaths = ['C:\\Users\\abi\\Documents\\program coba\\ImageTrain', 'C:\\Users\\abi\\Documents\\program coba\\ImageTest'] 
trainPaths = ['C:\\Users\\abi\\Documents\\program coba\\ImageTrain\\Positive1', 'C:\\Users\\abi\\Documents\\program coba\\ImageTrain\\Negative1'] 
classes = ['Negative', 'Positive'] 
svm.train(trainPaths, classes, savedata="mydata.txt", verbose=False) 
testPaths = ['C:\\Users\\abi\\Documents\\program coba\\ImageTest\\Positive1', 'C:\\Users\\abi\\Documents\\program coba\\ImageTest\\Negative1'] 
print "SVM:", svm.test(testPaths, classes, verbose=False) # [good, bad, confusion] 

edgeExtractor = EdgeHistogramFeatureExtractor(20) 
svm = SVMClassifier(extractorsList) 

listImages = ImageSet() 
    for p in ['C:\\Users\\abi\\Documents\\program coba\\NewImages\\coba']: 
     listImages += ImageSet(p) 

    for image in listImages: 
     className = svm.classify(image) 
     image.drawText(className,25,25,fontsize=60)  
listImages.show() 

Danach listet bekomme ich ein Problem wie diese

Traceback (most recent call last): 
    File "C:\Users\abi\Documents\program coba\imnew", line 28, in <module> 
    className = svm.classify(image) 
    File "C:\Python27\lib\site-packages\SimpleCV\MachineLearning\SVMClassifier.py", line 153, in classify 
     featureVector.extend([self.mClassNames[0]]) 
IndexError: list index out of range 

Es gibt IndexError Massage, aber ich weiß nicht, welcher Code falsch ist. Jetzt benutze ich Python 2.7.3. Hilf mir, bitte

Antwort

0

svm wird zweimal initialisiert. Beim zweiten Mal überspringen Sie svm.train(), und deshalb ist self.mClassNames[0] leer.

svm.train(trainPaths, classes, savedata="mydata.txt", verbose=False)` 

Entfernen Sie einfach die zweite svm = SVMClassifier(extractorsList) und das sollte die IndexError beheben:

mClassNames wird durch das classes Argument in bevölkert.

Beachten Sie jedoch, dass nach dem documentation, haben Sie Ihre classes, um aus der Ausrichtung mit der Reihenfolge der Bildpfade in trainPaths:

images - the order of the paths or imagesets must be in the same order as the class type.
- Note all image classes must be in seperate directories.
- The class names must also align to the directories.

Dies legt nahe, classes sollte trainPaths folgen geändert werden:

trainPaths = ['C:\\Users\\abi\\Documents\\program coba\\ImageTrain\\Positive1', 
       'C:\\Users\\abi\\Documents\\program coba\\ImageTrain\\Negative1'] 
classes = ['Positive', 'Negative'] 

Sie müssen möglicherweise auch die classes Zeichenfolgen die Bildverzeichniszeichenfolgen genau übereinstimmen. Der Kommentar im Quellcode ist etwas mehrdeutig. Sie definieren auch trainPaths zweimal aus irgendeinem Grund.

Verwandte Themen