diff --git a/src/Histogram.py b/src/Histogram.py index b20fd7502795aa26bc43c936475957ce00de65a9..3927c87a58cc10fe2230d2e90b6ee127859eb554 100644 --- a/src/Histogram.py +++ b/src/Histogram.py @@ -6,12 +6,14 @@ class Histogram: self.max = max def add(self, number): - bin_index = self.get_bin_index(number) - self.bins[bin_index] += 1 + #bin_index = self.get_bin_index(number) + #self.bins[bin_index] += 1 + self.bins[number] += 1 def remove(self, number): - bin_index = self.get_bin_index(number) - self.bins[bin_index] -= 1 + #bin_index = self.get_bin_index(number) + #self.bins[bin_index] -= 1 + self.bins[number] -= 1 def get_bin_index(self, number): return (number - self.min) / ((self.max - self.min) / len(self.bins)) diff --git a/src/Interpolation_USELESS.py b/src/Interpolation_USELESS.py deleted file mode 100644 index 216fb8448618638467965cdbc0e27e8e4c1275fc..0000000000000000000000000000000000000000 --- a/src/Interpolation_USELESS.py +++ /dev/null @@ -1,30 +0,0 @@ -from pylab import floor - -def pV(image, x, y): - '''Get the value of a point x,y in the given image, where x and y are not - necessary integers, so the value is interpolated from its neighbouring - pixels.''' - if inImage(image, x, y): - x_low = floor(x) - x_high = floor(x + 1) - y_low = floor(y) - y_high = floor(y + 1) - x_y = (x_high - x_low) * (y_high - y_low) - - interpolatedValue = image[x_low, y_low] / x_y * (x_high - x) * \ - (y_high - y)\ - + image[x_high][y_low] / x_y * (x - x_low) * \ - (y_high - y)\ - + image[x_low][y_high] / x_y * (x_high - x) * \ - (y - y_low)\ - + image[x_high][y_high] / x_y * (x - x_low) * \ - (y - y_low) - return interpolatedValue - else: - constantValue = 0 - return constantValue - -def inImage(image, x, y): - '''Return if the pixels is within the image bounds.''' - return (x > 0 and x < image.get_height() - 1 \ - and y > 0 and y < image.get_width() - 1) diff --git a/src/LocalBinaryPatternizer.py b/src/LocalBinaryPatternizer.py index b1f42101da95f458453e3c4cf4a1840cad3c7d54..5fec1174267c194ea6387d5089203964115da6a5 100644 --- a/src/LocalBinaryPatternizer.py +++ b/src/LocalBinaryPatternizer.py @@ -32,6 +32,16 @@ class LocalBinaryPatternizer: | (self.is_pixel_darker(y + 1, x - 1, value) << 1) \ | (self.is_pixel_darker(y , x - 1, value)) + def pattern_5x5_hybrid(self, y, x, value): + return (self.is_pixel_darker(y - 2, x - 2, value) << 7) \ + | (self.is_pixel_darker(y - 2, x , value) << 6) \ + | (self.is_pixel_darker(y - 2, x + 2, value) << 5) \ + | (self.is_pixel_darker(y , x + 2, value) << 4) \ + | (self.is_pixel_darker(y + 2, x + 2, value) << 3) \ + | (self.is_pixel_darker(y + 2, x , value) << 2) \ + | (self.is_pixel_darker(y + 2, x - 2, value) << 1) \ + | (self.is_pixel_darker(y , x - 2, value)) + def pattern_5x5(self, y, x, value): return (self.is_pixel_darker(y - 1, x - 2, value) << 11) \ | (self.is_pixel_darker(y , x - 2, value) << 10) \ diff --git a/src/find_svm_params.py b/src/find_svm_params.py index 8cdb8cb12f9a2076a83428136ac4c226acf4c76e..5c5140814fd568bcbfe9e4c6cd9e518dee840492 100755 --- a/src/find_svm_params.py +++ b/src/find_svm_params.py @@ -102,7 +102,7 @@ i = 0 s = ' c\y' for y in Y: - s += '| %f' % y + s += ' | %f' % y s += '\n' @@ -110,12 +110,13 @@ for c in C: s += ' %7s' % c for y in Y: - s += '| %8d' % int(round(results[i] * 100)) + s += ' | %8d' % int(round(results[i] * 100)) i += 1 s += '\n' -s += '\nBest result: %.3f%% for C = %f and gamma = %f' % best[:3] +s += '\nBest result: %.3f%% for C = %f and gamma = %f' \ + % ((best[0] * 100,) + best[1:3]) print 'Saving results...' f = open(results_file, 'w+') diff --git a/src/test_performance.py b/src/test_performance.py new file mode 100755 index 0000000000000000000000000000000000000000..6cfa4dfa1c08b2e62efd33cc2280be6413a59636 --- /dev/null +++ b/src/test_performance.py @@ -0,0 +1,37 @@ +#!/usr/bin/python +from cPickle import load +from sys import argv, exit +from time import time + +from Classifier import Classifier + +if len(argv) < 4: + print 'Usage: python %s NEIGHBOURS BLUR_SCALE COUNT' % argv[0] + exit(1) + +neighbours = int(argv[1]) +blur_scale = float(argv[2]) +count = int(argv[3]) +suffix = '_%s_%s' % (blur_scale, neighbours) + +chars_file = 'characters%s.dat' % suffix +classifier_file = 'classifier%s.dat' % suffix + +print 'Loading characters...' +chars = load(open(chars_file, 'r'))[:count] +count = len(chars) +print 'Read %d characters' % count + +print 'Loading classifier...' +classifier = Classifier(filename=classifier_file) + +start = time() + +for char in chars: + classifier.classify(char) + +elapsed = time() - start +individual = elapsed / count + +print 'Took %fs to classify %d caracters (%fms per character)' \ + % (elapsed, count, individual * 1000)