View Javadoc

1   /*
2    * @(#)$Id: BatchTest3DTool.java
3    *
4    * Author		:	Arthur Vogels, arthur.vogels@gmail.com
5    *                  
6    *
7    * Purpose		:   Provides tools for running batch tests.
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date				Who			Reason
14   *
15   * 15.01.2009		vogelsar	Initial Release
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
23   * 
24   */
25  
26  package org.ximtec.igesture.algorithm.rubine3d.tools;
27  
28  import java.io.File;
29  import java.util.Iterator;
30  import java.util.List;
31  import java.util.Vector;
32  
33  import org.sigtec.ink.Note;
34  import org.ximtec.igesture.batch.BatchProcess;
35  import org.ximtec.igesture.batch.BatchProcessContainer;
36  import org.ximtec.igesture.batch.BatchResultSet;
37  import org.ximtec.igesture.batch.BatchTools;
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.SampleDescriptor;
43  import org.ximtec.igesture.core.SampleDescriptor3D;
44  import org.ximtec.igesture.core.TestClass;
45  import org.ximtec.igesture.core.TestSet;
46  import org.ximtec.igesture.util.XMLTool;
47  import org.ximtec.igesture.util.additions3d.RecordedGesture3D;
48  
49  public class BatchTest3DTool {
50  
51  	private File configFile;
52  	private File outputDir;
53  	TestSet testSet;
54  	GestureSet gestureSet;
55  
56  	/**
57  	 * Constructor
58  	 * 
59  	 * @param testSet
60  	 * @param gestureSet
61  	 */
62  	public BatchTest3DTool(TestSet testSet, GestureSet gestureSet,
63  			String configFileName, String outputDirName) {
64  		if (configFileName == null || configFileName.equals(""))
65  			configFile = new File("C:\\configuration3d.xml");
66  		else
67  			configFile = new File(configFileName);
68  		System.out.println("CONFIG FILE: " + configFile);
69  		if (outputDirName == null || outputDirName.equals(""))
70  			outputDir = new File("C:\\Output");
71  		if (testSet == null) {
72  			// this.testSet =
73  		} else {
74  			this.testSet = testSet;
75  		}
76  		if (gestureSet == null) {
77  			// this.gestureSet
78  		} else {
79  			this.gestureSet = gestureSet;
80  		}
81  	}
82  
83  	/**
84  	 * Runs a batch process to find the best setting for the algorithm features
85  	 * 
86  	 * @return
87  	 * @throws Exception
88  	 */
89  	public BatchResultSet runBatch() throws Exception {
90  		// Output variable
91  		BatchResultSet resultSet = null;
92  		// If conditions are met to start the batch process
93  		if (configFile.exists() && testSet != null && gestureSet != null) {
94  			// New batch process container
95  			BatchProcessContainer container = XMLTool
96  					.importBatchProcessContainer(configFile);
97  			// New batch process
98  			BatchProcess batchProcess = new BatchProcess(container);
99  			// Set sets for batch process
100 			batchProcess.setTestSet(testSet);
101 			batchProcess.addGestureSet(gestureSet);
102 			// Run the process
103 			resultSet = batchProcess.run();
104 			// Write results to file
105 			BatchTools.writeResultsOnDisk(outputDir, resultSet);
106 		}
107 		// Return result
108 		return resultSet;
109 	}
110 
111 	/**
112 	 * Converts a GestureSet to a TestSet
113 	 * 
114 	 * @param gestureSet
115 	 * @return
116 	 */
117 	public static TestSet convert3DGestureSetToTestSet(GestureSet gestureSet) {
118 		TestSet testSet = new TestSet(gestureSet.getName());
119 		//System.err.println("NUMBER OF TEST CLASSES IN TEST SET: " + testSet.getTestClasses().size());
120 		// Iterate through gesture classes in gesture set and add them to
121 		// testset
122 		Iterator<GestureClass> i = gestureSet.getGestureClasses().iterator();
123 		while (i.hasNext()) {
124 			GestureClass tempGestureClass = i.next();
125 			//System.err.println("TEMP CLASS NAME: " + tempGestureClass.getName());
126 			// Create new TestClass
127 			TestClass tempTestClass = new TestClass(tempGestureClass.getName());
128 			// Add gesture samples from the gesture class to the test class
129 			Iterator<Gesture<RecordedGesture3D>> sampleIter = tempGestureClass
130 					.getDescriptor(SampleDescriptor3D.class).getSamples()
131 					.iterator();
132 			while (sampleIter.hasNext()) {
133 				GestureSample3D tempSample = (GestureSample3D) sampleIter
134 						.next();
135 				//System.err.println("TEMP SAMPLE NAME: " + tempSample.getName());
136 				// Add sample to tempTestClass
137 				tempTestClass.add(tempSample);
138 			}
139 			// Add tempTestClass to set
140 			testSet.addTestClass(tempTestClass);
141 		}
142 		//System.err.println("TESTSET NAME: " + testSet.getName());
143 		// Return
144 		return testSet;
145 	}
146 
147 	/**
148 	 * Converts a GestureSet to a TestSet
149 	 * 
150 	 * @param gestureSet
151 	 * @return
152 	 */
153 	public static TestSet convert2DGestureSetToTestSet(GestureSet gestureSet) {
154 		TestSet testSet = new TestSet(gestureSet.getName());
155 		// Iterate through gesture classes in gesture set and add them to
156 		// testset
157 	
158 		for(GestureClass tempGestureClass: gestureSet.getGestureClasses()){
159 		
160 			// Create new TestClass
161 			TestClass tempTestClass = new TestClass(tempGestureClass.getName());
162 			// Add gesture samples from the gesture class to the test class
163 			
164 			List<Gesture<Note>> samples = tempGestureClass.getDescriptor(SampleDescriptor.class).getSamples();
165 			for(Gesture<Note> tempSample:samples){
166 				// Add sample to tempTestClass
167 				tempTestClass.add(tempSample);
168 				// System.err.println("Sample: " + tempSample.getGesture());
169 			}
170 			// Add tempTestClass to set
171 			testSet.addTestClass(tempTestClass);
172 			// System.err.println("Number of samples in TestSet Class " +
173 			// tempTestClass.getName() + ": " +
174 			// tempTestClass.getGestures().size());
175 
176 		}
177 		// Return
178 		return testSet;
179 	}
180 
181 	public static List<GestureSet> splitSetToPlanes(GestureSet gestureSet3D) {
182 		GestureSet gestureSetXY = new GestureSet(gestureSet3D.getName());
183 		GestureSet gestureSetYZ = new GestureSet(gestureSet3D.getName());
184 		GestureSet gestureSetZX = new GestureSet(gestureSet3D.getName());
185 		// Iterate through gesture classes
186 		Iterator<GestureClass> i = gestureSet3D.getGestureClasses().iterator();
187 		while (i.hasNext()) {
188 			GestureClass tempClass = i.next();
189 			GestureClass xyClass = new GestureClass(tempClass.getName());
190 			GestureClass yzClass = new GestureClass(tempClass.getName());
191 			GestureClass zxClass = new GestureClass(tempClass.getName());
192 			SampleDescriptor xyDescriptor = new SampleDescriptor();
193 			SampleDescriptor yzDescriptor = new SampleDescriptor();
194 			SampleDescriptor zxDescriptor = new SampleDescriptor();
195 			// Iterate through samples
196 			Iterator<Gesture<RecordedGesture3D>> sampleIter = tempClass
197 					.getDescriptor(SampleDescriptor3D.class).getSamples()
198 					.iterator();
199 			while (sampleIter.hasNext()) {
200 				GestureSample3D tempSample = (GestureSample3D) sampleIter
201 						.next();
202 				// Split sample into three plane projections
203 				List<Gesture<Note>> planes = tempSample.splitToPlanes();
204 				// Add to 2D gesture descriptors
205 				xyDescriptor.addSample(planes.get(0));
206 				yzDescriptor.addSample(planes.get(1));
207 				zxDescriptor.addSample(planes.get(2));
208 			}
209 
210 			// System.err.println("Number of samples in XY set class " +
211 			// xyClass.getName() + ": " + xyDescriptor.getSamples().size());
212 			// System.err.println("Number of samples in YZ set class " +
213 			// xyClass.getName() + ": " + yzDescriptor.getSamples().size());
214 			// System.err.println("Number of samples in ZX set class " +
215 			// xyClass.getName() + ": " + zxDescriptor.getSamples().size());
216 			// System.err.println();
217 
218 			// Add 2D gesture descriptors to 2D gesture classes
219 			xyClass.addDescriptor(xyDescriptor);
220 			yzClass.addDescriptor(yzDescriptor);
221 			zxClass.addDescriptor(zxDescriptor);
222 			// Add 2D gesture classes to 2D gesture sets
223 			gestureSetXY.addGestureClass(xyClass);
224 			gestureSetYZ.addGestureClass(yzClass);
225 			gestureSetZX.addGestureClass(zxClass);
226 		}
227 		// Add 2D sets to return list
228 		Vector<GestureSet> returnList = new Vector<GestureSet>();
229 		returnList.add(gestureSetXY);
230 		returnList.add(gestureSetYZ);
231 		returnList.add(gestureSetZX);
232 		// Return
233 		return returnList;
234 	}
235 
236 }