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.tools;
28
29 import java.io.File;
30 import java.util.Iterator;
31 import java.util.List;
32 import java.util.Vector;
33
34 import org.ximtec.igesture.Recogniser;
35 import org.ximtec.igesture.algorithm.AlgorithmException;
36 import org.ximtec.igesture.algorithm.rubine3d.Rubine3DAlgorithm;
37 import org.ximtec.igesture.configuration.Configuration;
38 import org.ximtec.igesture.core.Gesture;
39 import org.ximtec.igesture.core.GestureClass;
40 import org.ximtec.igesture.core.GestureSample3D;
41 import org.ximtec.igesture.core.GestureSet;
42 import org.ximtec.igesture.core.ResultSet;
43 import org.ximtec.igesture.core.SampleDescriptor3D;
44 import org.ximtec.igesture.storage.StorageManager;
45 import org.ximtec.igesture.util.additions3d.RecordedGesture3D;
46
47 public class Gesture3DTool {
48
49 private StorageManager storage;
50 private WiiReader reader;
51 private Recogniser recogniser;
52 private Gesture3DToolUI ui;
53
54 public Gesture3DTool(String gestureSetName) {
55 storage = new StorageManager(StorageManager
56 .createStorageEngine(new File(gestureSetName)));
57 reader = new WiiReader();
58 }
59
60
61
62
63
64 public void initWiiMote() {
65 reader.init();
66 }
67
68
69
70
71 public void disconnectWiiMote() {
72 reader.disconnect();
73 }
74
75 public void setUI(Gesture3DToolUI ui) {
76 this.ui = ui;
77 }
78
79
80
81
82
83
84 public WiiReaderPanel getWiiReaderPanel() {
85 return reader.getPanel();
86 }
87
88
89
90
91
92
93
94 public void addGestureSet(String setName) {
95 System.err.println("Adding new gesture set with name \"" + setName
96 + "\"");
97 GestureSet set = new GestureSet(setName);
98 storage.store(set);
99 storage.commit();
100 }
101
102
103
104
105
106
107 public List<GestureSet> getGestureSets() {
108 return storage.load(GestureSet.class);
109 }
110
111
112
113
114
115
116
117
118 public GestureSet getGestureSet(String setName) {
119 if (storage.load(GestureSet.class, "name", setName).size() > 0)
120 return storage.load(GestureSet.class, "name", setName).get(0);
121 else
122 return null;
123 }
124
125
126
127
128
129
130
131
132 public void addGestureClass(String setName, String className) {
133 System.err.print("addGestureClass(): ");
134 GestureClass newClass = new GestureClass(className);
135 if (storage.load(GestureSet.class, "name", setName).size() > 0) {
136 GestureSet tempSet = storage
137 .load(GestureSet.class, "name", setName).get(0);
138 tempSet.addGestureClass(newClass);
139 storage.update(tempSet);
140 storage.commit();
141 System.err.println("Added new gesture class with name \""
142 + className + "\" to gesture set \"" + setName + "\"");
143 } else
144 System.err.println("Nothing added");
145 }
146
147
148
149
150
151
152
153
154
155
156
157
158 public void addCurrentGestureSampleToGestureClass(String setName,
159 String className) {
160 System.err.print("addCurrentGestureSampleToGestureClass(): ");
161
162 if (storage.load(GestureSet.class, "name", setName).size() > 0) {
163 GestureSet tempSet = storage
164 .load(GestureSet.class, "name", setName).get(0);
165
166 if (tempSet.getGestureClass(className) != null) {
167
168
169 if (tempSet.getGestureClass(className).getDescriptor(
170 SampleDescriptor3D.class) == null) {
171 SampleDescriptor3D desc = new SampleDescriptor3D();
172 tempSet.getGestureClass(className).addDescriptor(desc);
173 }
174 GestureSample3D gesture = (GestureSample3D) reader.getGesture();
175
176 if (gesture.getGesture().getAccelerations() != null) {
177
178 tempSet.getGestureClass(className).getDescriptor(
179 SampleDescriptor3D.class).addSample(gesture);
180
181 storage.update(tempSet);
182 storage.commit();
183 System.err.println("Added GestureSample3D with name \""
184 + gesture.getName()
185 + "\" to gesture class with name \"" + className
186 + "\" in gesture set \"" + setName + "\"");
187
188
189
190
191
192
193
194
195
196
197
198
199
200 return;
201 }
202 }
203 }
204 System.err.println("Nothing added");
205 }
206
207
208
209
210
211
212
213
214
215
216
217 public List<Gesture<RecordedGesture3D>> getGestureSamples(String setName, String className) {
218 System.err.println("getGestureSamples() for GestureSet " + setName
219 + " and GestureClass " + className + ".");
220
221 List<Gesture<RecordedGesture3D>> returnList = new Vector<Gesture<RecordedGesture3D>>();
222
223 if (storage.load(GestureSet.class, "name", setName).size() > 0) {
224 GestureSet tempSet = storage
225 .load(GestureSet.class, "name", setName).get(0);
226
227 if (tempSet.getGestureClass(className) != null) {
228 GestureClass tempClass = tempSet.getGestureClass(className);
229
230
231 SampleDescriptor3D descriptor = tempClass
232 .getDescriptor(SampleDescriptor3D.class);
233
234
235 if (descriptor != null)
236 returnList = descriptor.getSamples();
237 else
238 System.err
239 .println("There is no SampleDescriptor in gesture class with name \""
240 + className
241 + "\" in gesture set \""
242 + setName + "\".");
243 } else
244 System.err.println("There is no gesture class with name \""
245 + className + "\" in gesture set \"" + setName + "\".");
246 } else
247 System.err.println("There is no gesture set with name \"" + setName
248 + "\".");
249
250 return returnList;
251 }
252
253
254
255
256
257
258
259
260 public void recognise(String setName) {
261
262
263 Configuration config = new Configuration();
264 config.addAlgorithm(Rubine3DAlgorithm.class.getName());
265 config.addGestureSet(getGestureSet(setName));
266 try {
267 recogniser = new Recogniser(config);
268 } catch (AlgorithmException e) {
269 e.printStackTrace();
270 }
271
272 ResultSet resultSet = recogniser.recognise(reader.getGesture());
273 ui.setResultField(resultSet);
274
275 System.err.println("Number of Results in ResultSet: "
276 + resultSet.getResults().size());
277 }
278
279
280
281
282
283
284
285
286
287 public void removeSample(String setName, String className, int sampleNumber) {
288 GestureSet tempSet = storage.load(GestureSet.class, "name", setName)
289 .get(0);
290 if (tempSet.getGestureClass(className).getDescriptor(
291 SampleDescriptor3D.class).getSamples().size() > 0) {
292 tempSet.getGestureClass(className).getDescriptor(
293 SampleDescriptor3D.class).getSamples().remove(sampleNumber);
294 storage.update(tempSet);
295 } else
296 System.err
297 .println("Gesture3DTool: No samples can be removed from Gesture class "
298 + className
299 + " in gesture set "
300 + setName
301 + " because there are no samples present.");
302
303 }
304
305
306
307
308
309
310 public void removeSet(String setName) {
311 if (storage.load(GestureSet.class, "name", setName).get(0) != null) {
312 storage.remove(storage.load(GestureSet.class, "name", setName).get(
313 0));
314 } else
315 System.err.println("Gesture3DTool: Gesture set " + setName
316 + " can not be removed because it does not exist");
317 }
318
319
320
321
322
323
324
325
326 public void removeClass(String setName, String className) {
327 GestureSet tempSet = storage.load(GestureSet.class, "name", setName)
328 .get(0);
329 if (tempSet.getGestureClass(className) != null) {
330 tempSet.removeGestureClass(tempSet.getGestureClass(className));
331 storage.update(tempSet);
332 } else
333 System.err.println("Gesture3DTool: Gesture class " + className
334 + " in gesture set " + setName
335 + " can not be removed because it does not exist");
336
337 }
338
339 }