Преглед изворни кода

Debugged performance test script.

Taddeus Kroes пре 14 година
родитељ
комит
51d98fd3b7
3 измењених фајлова са 20 додато и 7 уклоњено
  1. 9 3
      src/Classifier.py
  2. 4 2
      src/create_classifier.py
  3. 7 2
      src/test_performance.py

+ 9 - 3
src/Classifier.py

@@ -4,8 +4,14 @@ from svmutil import svm_train, svm_problem, svm_parameter, svm_predict, \
 class Classifier:
     def __init__(self, c=None, gamma=None, filename=None, neighbours=3, \
             verbose=0):
+        self.neighbours = neighbours
+        self.verbose = verbose
+
         if filename:
             # If a filename is given, load a model from the given filename
+            if verbose:
+                print 'Loading classifier from "%s"...' % filename
+
             self.model = svm_load_model(filename)
         elif c == None or gamma == None:
             raise Exception('Please specify both C and gamma.')
@@ -16,11 +22,11 @@ class Classifier:
             self.param.gamma = gamma  # Parameter for radial kernel
             self.model = None
 
-        self.neighbours = neighbours
-        self.verbose = verbose
-
     def save(self, filename):
         """Save the SVM model in the given filename."""
+        if self.verbose:
+            print 'Saving classifier in "%s"...' % filename
+
         svm_save_model(filename, self.model)
 
     def train(self, learning_set):

+ 4 - 2
src/create_classifier.py

@@ -5,14 +5,15 @@ from data import exists, DATA_FOLDER
 
 
 def load_classifier(neighbours, blur_scale, c=None, gamma=None, verbose=0):
-    classifier_file = DATA_FOLDER + 'classifier_%s_%s.dat' \
+    classifier_file = 'classifier_%s_%s.dat' \
             % (blur_scale, neighbours)
+    classifier_path = DATA_FOLDER + classifier_file
 
     if exists(classifier_file):
         if verbose:
             print 'Loading classifier...'
 
-        classifier = Classifier(filename=classifier_file, \
+        classifier = Classifier(filename=classifier_path, \
                 neighbours=neighbours, verbose=verbose)
     elif c != None and gamma != None:
         if verbose:
@@ -23,6 +24,7 @@ def load_classifier(neighbours, blur_scale, c=None, gamma=None, verbose=0):
         learning_set = load_learning_set(neighbours, blur_scale, \
                 verbose=verbose)
         classifier.train(learning_set)
+        classifier.save(classifier_path)
     else:
         raise Exception('No soft margin and gamma specified.')
 

+ 7 - 2
src/test_performance.py

@@ -22,7 +22,7 @@ chars = []
 i = 0
 br = False
 
-for value in sorted(listdir()):
+for value in sorted(listdir(IMAGES_FOLDER)):
     for image in sorted(listdir(IMAGES_FOLDER + value)):
         f = IMAGES_FOLDER + value + '/' + image
         image = GrayscaleImage(f)
@@ -37,15 +37,20 @@ for value in sorted(listdir()):
     if br:
         break
 
-# Load classifier
+# Load classifier (run create_classifier.py first)
 classifier = load_classifier(neighbours, blur_scale, verbose=1)
 
 # Measure the time it takes to recognize <count> characters
 start = time()
 
 for char in chars:
+    # Normalize the character image
     char.image = NormalizedCharacterImage(image, blur=blur_scale, height=42)
+
+    # Create the image's feature vector
     char.get_single_cell_feature_vector(neighbours)
+
+    # Feed the feature vector to the classifier
     classifier.classify(char)
 
 elapsed = time() - start