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.rubine3d;
28
29 import java.util.HashMap;
30 import java.util.Map;
31 import java.util.logging.Level;
32 import java.util.logging.Logger;
33
34 import org.sigtec.util.Constant;
35 import org.ximtec.igesture.algorithm.AlgorithmTool;
36 import org.ximtec.igesture.algorithm.feature.F1;
37 import org.ximtec.igesture.algorithm.feature.F10;
38 import org.ximtec.igesture.algorithm.feature.F11;
39 import org.ximtec.igesture.algorithm.feature.F12;
40 import org.ximtec.igesture.algorithm.feature.F13;
41 import org.ximtec.igesture.algorithm.feature.F14;
42 import org.ximtec.igesture.algorithm.feature.F15;
43 import org.ximtec.igesture.algorithm.feature.F16;
44 import org.ximtec.igesture.algorithm.feature.F17;
45 import org.ximtec.igesture.algorithm.feature.F18;
46 import org.ximtec.igesture.algorithm.feature.F19;
47 import org.ximtec.igesture.algorithm.feature.F2;
48 import org.ximtec.igesture.algorithm.feature.F20;
49 import org.ximtec.igesture.algorithm.feature.F21;
50 import org.ximtec.igesture.algorithm.feature.F3;
51 import org.ximtec.igesture.algorithm.feature.F4;
52 import org.ximtec.igesture.algorithm.feature.F5;
53 import org.ximtec.igesture.algorithm.feature.F6;
54 import org.ximtec.igesture.algorithm.feature.F7;
55 import org.ximtec.igesture.algorithm.feature.F8;
56 import org.ximtec.igesture.algorithm.feature.F9;
57 import org.ximtec.igesture.algorithm.rubine.RubineAlgorithm;
58 import org.ximtec.igesture.algorithm.rubine.RubineConfiguration;
59 import org.ximtec.igesture.configuration.Configuration;
60
61 public class Rubine3DConfiguration {
62
63 private static final Logger LOGGER = Logger
64 .getLogger(Rubine3DConfiguration.class.getName());
65
66 private static final String DEFAULT_XY_WEIGHT = "0.2";
67 private static final String DEFAULT_YZ_WEIGHT = "0.6";
68 private static final String DEFAULT_ZX_WEIGHT = "0.2";
69
70 private static final String DEFAULT_XY_MIN_DISTANCE = "2.0";
71 private static final String DEFAULT_XY_MAHALANOBIS_DISTANCE = "400.0";
72 private static final String DEFAULT_XY_PROBABILITY = "0.95";
73
74 private static final String DEFAULT_YZ_MIN_DISTANCE = "3.0";
75 private static final String DEFAULT_YZ_MAHALANOBIS_DISTANCE = "800.0";
76 private static final String DEFAULT_YZ_PROBABILITY = "0.95";
77
78 private static final String DEFAULT_ZX_MIN_DISTANCE = "1.0";
79 private static final String DEFAULT_ZX_MAHALANOBIS_DISTANCE = "400.0";
80 private static final String DEFAULT_ZX_PROBABILITY = "0.95";
81
82 protected static Map<String, String> DEFAULT_CONFIGURATION = new HashMap<String, String>();
83
84 public enum Config {
85 XY_WEIGHT, YZ_WEIGHT, ZX_WEIGHT, XY_MIN_DISTANCE, XY_FEATURE_LIST, XY_MAHALANOBIS_DISTANCE, XY_PROBABILITY, YZ_MIN_DISTANCE, YZ_FEATURE_LIST, YZ_MAHALANOBIS_DISTANCE, YZ_PROBABILITY, ZX_MIN_DISTANCE, ZX_FEATURE_LIST, ZX_MAHALANOBIS_DISTANCE, ZX_PROBABILITY
86 }
87
88 private double xyWeight;
89 private double yzWeight;
90 private double zxWeight;
91 private RubineConfiguration xyConfiguration;
92 private RubineConfiguration yzConfiguration;
93 private RubineConfiguration zxConfiguration;
94
95
96
97
98 static {
99
100
101
102 DEFAULT_CONFIGURATION.put(Config.XY_WEIGHT.name(), DEFAULT_XY_WEIGHT);
103 DEFAULT_CONFIGURATION.put(Config.YZ_WEIGHT.name(), DEFAULT_YZ_WEIGHT);
104 DEFAULT_CONFIGURATION.put(Config.ZX_WEIGHT.name(), DEFAULT_ZX_WEIGHT);
105
106 StringBuilder sb = new StringBuilder();
107 for(Class<?> clazz:new Class<?>[]{F1.class, F2.class, F3.class
108 sb.append(clazz.getName());
109 sb.append(Constant.COMMA);
110 }
111
112 DEFAULT_CONFIGURATION.put(Config.XY_MIN_DISTANCE.name(),
113 DEFAULT_XY_MIN_DISTANCE);
114 DEFAULT_CONFIGURATION.put(Config.XY_MAHALANOBIS_DISTANCE.name(),
115 DEFAULT_XY_MAHALANOBIS_DISTANCE);
116 DEFAULT_CONFIGURATION.put(Config.XY_PROBABILITY.name(),
117 DEFAULT_XY_PROBABILITY);
118 DEFAULT_CONFIGURATION.put(Config.XY_FEATURE_LIST.name(),
119 sb.toString());
120
121 DEFAULT_CONFIGURATION.put(Config.YZ_MIN_DISTANCE.name(),
122 DEFAULT_YZ_MIN_DISTANCE);
123 DEFAULT_CONFIGURATION.put(Config.YZ_MAHALANOBIS_DISTANCE.name(),
124 DEFAULT_YZ_MAHALANOBIS_DISTANCE);
125 DEFAULT_CONFIGURATION.put(Config.YZ_PROBABILITY.name(),
126 DEFAULT_YZ_PROBABILITY);
127 DEFAULT_CONFIGURATION.put(Config.YZ_FEATURE_LIST.name(),
128 sb.toString());
129
130 DEFAULT_CONFIGURATION.put(Config.ZX_MIN_DISTANCE.name(),
131 DEFAULT_ZX_MIN_DISTANCE);
132 DEFAULT_CONFIGURATION.put(Config.ZX_MAHALANOBIS_DISTANCE.name(),
133 DEFAULT_ZX_MAHALANOBIS_DISTANCE);
134 DEFAULT_CONFIGURATION.put(Config.ZX_PROBABILITY.name(),
135 DEFAULT_ZX_PROBABILITY);
136 DEFAULT_CONFIGURATION.put(Config.ZX_FEATURE_LIST.name(),
137 sb.toString());
138
139 LOGGER.setLevel(Level.SEVERE);
140 }
141
142 public Rubine3DConfiguration(Configuration config) {
143 init(config);
144 }
145
146 private void init(Configuration config) {
147 Map<String, String> parameters = config
148 .getParameters(Rubine3DAlgorithm.class.getCanonicalName());
149
150 xyWeight = AlgorithmTool.getDoubleParameterValue(Config.XY_WEIGHT
151 .name(), parameters, DEFAULT_CONFIGURATION);
152 LOGGER.info(Config.XY_WEIGHT + Constant.COLON_BLANK + xyWeight);
153
154 yzWeight = AlgorithmTool.getDoubleParameterValue(Config.YZ_WEIGHT
155 .name(), parameters, DEFAULT_CONFIGURATION);
156 LOGGER.info(Config.YZ_WEIGHT + Constant.COLON_BLANK + yzWeight);
157
158 zxWeight = AlgorithmTool.getDoubleParameterValue(Config.ZX_WEIGHT
159 .name(), parameters, DEFAULT_CONFIGURATION);
160 LOGGER.info(Config.ZX_WEIGHT + Constant.COLON_BLANK + zxWeight);
161
162
163
164
165 Configuration xyConf = new Configuration();
166 xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
167 "MAHALANOBIS_DISTANCE", String.valueOf(AlgorithmTool
168 .getDoubleParameterValue(Config.XY_MAHALANOBIS_DISTANCE
169 .name(), parameters, DEFAULT_CONFIGURATION)));
170 xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
171 "PROBABILITY", String.valueOf(AlgorithmTool
172 .getDoubleParameterValue(Config.XY_PROBABILITY.name(),
173 parameters, DEFAULT_CONFIGURATION)));
174 xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
175 "MIN_DISTANCE", String.valueOf(AlgorithmTool
176 .getDoubleParameterValue(Config.XY_MIN_DISTANCE.name(),
177 parameters, DEFAULT_CONFIGURATION)));
178 String xyFeatureNames = AlgorithmTool.getParameterValue(
179 Config.XY_FEATURE_LIST.name(), parameters,
180 DEFAULT_CONFIGURATION);
181 xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
182 "FEATURE_LIST", xyFeatureNames);
183
184 xyConfiguration = new RubineConfiguration(xyConf);
185
186
187 Configuration yzConf = new Configuration();
188 yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
189 "MAHALANOBIS_DISTANCE", String.valueOf(AlgorithmTool
190 .getDoubleParameterValue(Config.YZ_MAHALANOBIS_DISTANCE
191 .name(), parameters, DEFAULT_CONFIGURATION)));
192 yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
193 "PROBABILITY", String.valueOf(AlgorithmTool
194 .getDoubleParameterValue(Config.YZ_PROBABILITY.name(),
195 parameters, DEFAULT_CONFIGURATION)));
196 yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
197 "MIN_DISTANCE", String.valueOf(AlgorithmTool
198 .getDoubleParameterValue(Config.YZ_MIN_DISTANCE.name(),
199 parameters, DEFAULT_CONFIGURATION)));
200 String yzFeatureNames = AlgorithmTool.getParameterValue(
201 Config.YZ_FEATURE_LIST.name(), parameters,
202 DEFAULT_CONFIGURATION);
203 yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
204 "FEATURE_LIST", yzFeatureNames);
205
206 yzConfiguration = new RubineConfiguration(yzConf);
207
208
209 Configuration zxConf = new Configuration();
210 zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
211 "MAHALANOBIS_DISTANCE", String.valueOf(AlgorithmTool
212 .getDoubleParameterValue(Config.ZX_MAHALANOBIS_DISTANCE
213 .name(), parameters, DEFAULT_CONFIGURATION)));
214 zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
215 "PROBABILITY", String.valueOf(AlgorithmTool
216 .getDoubleParameterValue(Config.ZX_PROBABILITY.name(),
217 parameters, DEFAULT_CONFIGURATION)));
218 zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
219 "MIN_DISTANCE", String.valueOf(AlgorithmTool
220 .getDoubleParameterValue(Config.ZX_MIN_DISTANCE.name(),
221 parameters, DEFAULT_CONFIGURATION)));
222 String zxFeatureNames = AlgorithmTool.getParameterValue(
223 Config.ZX_FEATURE_LIST.name(), parameters,
224 DEFAULT_CONFIGURATION);
225 zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
226 "FEATURE_LIST", zxFeatureNames);
227
228 zxConfiguration = new RubineConfiguration(zxConf);
229
230 }
231
232 public double getXyWeight() {
233 return xyWeight;
234 }
235
236 public double getYzWeight() {
237 return yzWeight;
238 }
239
240 public double getZxWeight() {
241 return zxWeight;
242 }
243
244 public RubineConfiguration getXyConfiguration() {
245 return xyConfiguration;
246 }
247
248 public RubineConfiguration getYzConfiguration() {
249 return yzConfiguration;
250 }
251
252 public RubineConfiguration getZxConfiguration() {
253 return zxConfiguration;
254 }
255
256 public static Map<String, String> getDefaultConfiguration() {
257 return DEFAULT_CONFIGURATION;
258 }
259
260 }