print("Making thumbnails")
size = 50
trainingThumbs = list(
    map(lambda x: misc.imresize(x, (size, size)), trainingImages))
testThumbs = list(map(lambda x: misc.imresize(x, (size, size)), testImages))

print("Calculating features")
#features = list(map(extractor.calculateNormalizedColorFeatures, images))
splits = 5
trainingFeatures = []
testFeatures = []
for i in range(trainingAmount):
    if (i % 10 == 0): print(i, "/", trainingAmount)
    harald = extractor.calculateDarktoBrightRatio(trainingThumbs[i])[0::4]
    rian = extractor.splitColorFeatures(trainingThumbs[i], splits)[0::4]
    trainingFeatures.append(numpy.append(harald, rian))
for i in range(testAmount):
    if (i % 10 == 0): print(i, "/", testAmount)
    harald = extractor.calculateDarktoBrightRatio(testThumbs[i])[0::4]
    rian = extractor.splitColorFeatures(testThumbs[i], splits)[0::4]
    testFeatures.append(numpy.append(harald, rian))

print("Predicting Testdata")
#model = neighbors.KNeighborsClassifier(n_neighbors = 1) #svm.SVC(kernel = 'linear', probability = True)
model = svm.SVC(kernel='linear', probability=True)
model.fit(trainingFeatures, trainingClasses)

with open('split_color_perceived_reduced_classification_2.csv',
          'w',
          newline='') as csvfile:
testAmount = len(testImages)

print("Making thumbnails")
size = 50
trainingThumbs = list(
    map(lambda x: misc.imresize(x, (size, size)), trainingImages))
testThumbs = list(map(lambda x: misc.imresize(x, (size, size)), testImages))

print("Calculating features")
#features = list(map(extractor.calculateNormalizedColorFeatures, images))
splits = 5
trainingFeatures = numpy.zeros([trainingAmount, splits * splits * 3])
testFeatures = numpy.zeros([testAmount, splits * splits * 3])
for i in range(trainingAmount):
    print(i, "/", trainingAmount)
    trainingFeatures[i] = extractor.splitColorFeatures(trainingThumbs[i],
                                                       splits)
for i in range(testAmount):
    print(i, "/", testAmount)
    testFeatures[i] = extractor.splitColorFeatures(testThumbs[i], splits)

print("Predicting Testdata")
model = svm.SVC(kernel='poly', degree=7, probability=True)
model.fit(trainingFeatures, trainingClasses)

with open('split_color_classification_1.csv', 'w', newline='') as csvfile:
    classes = numpy.unique(trainingClasses)
    fieldnames = numpy.insert(classes, 0, 'Id')
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    for i in range(testAmount):
amount = len(images)

print("Making thumbnails")

thumbsize = 50
thumbs = [misc.imresize(x, (thumbsize, thumbsize)) for x in images]
print("Making thumbnails")
print("Calculating features")
#features = list(map(extractor.calculateNormalizedColorFeatures, images))
splits = 5
features = []
for i in range(amount):
    if (i % 10 == 0): print(i, "/", amount)
    #features[i] = extractor.splitColorFeatures(thumbs[i],splits)
    harald = extractor.calculateDarktoBrightRatio(thumbs[i])
    rian = extractor.splitColorFeatures(thumbs[i], splits)
    features.append(numpy.append(harald, rian))

#model = grid_search.GridSearchCV(svm.SVC(),{'kernel' : ['poly'], 'C' : [1, 10, 100, 1000], 'degree' : [4,7,10], 'shrinking' : [True, False]})
#model.fit(features, classes)
#print(model.best_estimator_)
#print('\a')

print("Producing KFold indexes")
kfold = cv.KFold(amount, n_folds=5, shuffle=True)
model = lda.LDA()
#model = svm.SVC(kernel = 'linear')
#model = qda.QDA()
score = cross_validation.cross_val_score(model, features, classes, cv=kfold)
print("scores ", score)
print("mean score ", score.mean())