In [1]:
from numpy import *
from PIL import *
import pickle
from pylab import *
import os

In [2]:
import sift
import dsift
dsift = reload(dsift)
import imtools
imtools = reload(imtools)

In [3]:
def read_gesture_features_labels(path):
    # make a list of the files with .dsift at the end
    featlist = [os.path.join(path, f) for f in os.listdir(path)
               if f.endswith('.dsift')]
    
    # read features
    features = []
    for featfile in featlist:
        l, d = sift.read_features_from_file(featfile)
        features.append(d.flatten())
    features = array(features)
    
    # generate labels
    labels = [featfile.split('/')[-1][0] for featfile in featlist]
    
    return features, array(labels)

In [4]:
features, labels = read_gesture_features_labels('train2/')
test_features, test_labels = read_gesture_features_labels('test2/')
classnames = unique(labels)

In [5]:
# the first letter of the file name is the label
print labels


['V' 'A' 'A' 'B' 'P' 'B' 'P' 'C' 'F' 'A' 'P' 'V' 'F' 'F' 'P' 'B' 'P' 'F'
 'F' 'B' 'P' 'F' 'F' 'A' 'F' 'P' 'A' 'A' 'F' 'V' 'A' 'P' 'V' 'V' 'P' 'A'
 'P' 'C' 'B' 'B' 'C' 'P' 'C' 'V' 'P' 'V' 'V' 'C' 'B' 'C' 'V' 'P' 'P' 'B'
 'B' 'C' 'A' 'C' 'V' 'B' 'V' 'B' 'F' 'P' 'A' 'P' 'B' 'P' 'B' 'V' 'F' 'B'
 'C' 'A' 'C' 'C' 'F' 'F' 'V' 'P' 'C' 'F' 'P' 'A' 'A' 'F' 'P' 'B' 'A' 'V'
 'F' 'V' 'C' 'C' 'B' 'C' 'A' 'F' 'F' 'A' 'V' 'C' 'V' 'V' 'A' 'B' 'A' 'C'
 'B' 'C' 'B' 'B' 'V' 'A' 'C' 'V' 'C' 'F' 'C' 'F' 'F' 'P' 'A' 'B' 'P' 'P'
 'B' 'B' 'A' 'F' 'B' 'A' 'C' 'C' 'V' 'A' 'C' 'P' 'P' 'V' 'F' 'V' 'P' 'A'
 'F' 'A' 'V' 'F' 'F' 'C' 'C' 'B' 'V' 'P' 'B' 'V' 'P' 'V' 'A' 'C' 'V' 'A'
 'V' 'A' 'F' 'F' 'B' 'A' 'B' 'F' 'C' 'B' 'C' 'P']

In [42]:
import knn
knn = reload(knn)

In [44]:
# k neighbors
k = 1
knn_classifier = knn.KnnClassifier(labels, features)

In [45]:
res = array([knn_classifier.classify(features[i], k) for i in
            range(len(labels))])

# accuracy
acc = sum(1.0*(res==labels))/len(labels)
print 'Accuracy:', acc


Accuracy: 1.0

In [46]:
# use larger weight in the center
knn_classifier = knn.KnnClassifier(labels, features, centerweight=True)
res = array([knn_classifier.classify(test_features[i], k) for i in
            range(len(test_labels))])

# accuracy
acc = sum(1.0*(res==test_labels))/len(test_labels)
print 'Accuracy:', acc


Accuracy: 0.26213592233

In [47]:
knn_classifier = knn.KnnClassifier(labels, features, centerweight=False)
res = array([knn_classifier.classify(test_features[i], k) for i in
            range(len(test_labels))])

# accuracy
acc = sum(1.0*(res==test_labels))/len(test_labels)
print 'Accuracy:', acc


Accuracy: 0.242718446602

In [ ]: