1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.ximtec.igesture.algorithm.rubine;
28
29 import java.util.logging.Level;
30 import java.util.logging.Logger;
31
32 import org.sigtec.ink.Note;
33 import org.ximtec.igesture.algorithm.feature.FeatureException;
34 import org.ximtec.igesture.util.DoubleVector;
35
36
37
38
39
40
41
42 public class GestureSampleHelper {
43
44 private static final Logger LOGGER = Logger.getLogger(GestureSampleHelper.class
45 .getName());
46
47 private Note note;
48 private RubineConfiguration config;
49 private DoubleVector featureVector;
50
51
52 public GestureSampleHelper(Note note, RubineConfiguration config) {
53 this.note = note;
54 this.config = config;
55 LOGGER.setLevel(Level.SEVERE);
56 }
57
58
59
60
61
62
63
64
65
66
67 private DoubleVector computeFeatureVector()
68 throws FeatureException {
69
70
71 Note clone = (Note)note.clone();
72 clone.scaleTo(200, 200);
73
74
75 clone.filter(config.getMinDistance());
76
77
78 DoubleVector featureVector = new DoubleVector(config.getNumberOfFeatures());
79
80 for (int i = 0; i < config.getNumberOfFeatures(); i++) {
81 featureVector.set(i, config.getFeatureList()[i].compute(clone));
82 }
83
84 LOGGER.info(featureVector.toString());
85 return featureVector;
86 }
87
88
89 public DoubleVector getFeatureVector() throws FeatureException {
90 if(featureVector == null){
91 featureVector = computeFeatureVector();
92 }
93 return featureVector;
94 }
95
96 }