add eye tracking benchmark.
[IRC.git] / Robust / src / Benchmarks / SSJava / EyeTracking / DeviationScanner.java
1 /*\r
2  * Copyright 2009 (c) Florian Frankenberger (darkblue.de)\r
3  * \r
4  * This file is part of LEA.\r
5  * \r
6  * LEA is free software: you can redistribute it and/or modify it under the\r
7  * terms of the GNU Lesser General Public License as published by the Free\r
8  * Software Foundation, either version 3 of the License, or (at your option) any\r
9  * later version.\r
10  * \r
11  * LEA is distributed in the hope that it will be useful, but WITHOUT ANY\r
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
13  * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
14  * details.\r
15  * \r
16  * You should have received a copy of the GNU Lesser General Public License\r
17  * along with LEA. If not, see <http://www.gnu.org/licenses/>.\r
18  */\r
19 \r
20 \r
21 import java.awt.geom.Rectangle2D;\r
22 \r
23 /**\r
24  * No description given.\r
25  * \r
26  * @author Florian Frankenberger\r
27  */\r
28 public class DeviationScanner {\r
29 \r
30         private StaticSizeArrayList<EyePosition> eyePositions = new StaticSizeArrayList<EyePosition>(3);\r
31         \r
32         public DeviationScanner() {\r
33         }\r
34 \r
35         public void addEyePosition(EyePosition eyePosition) {\r
36                 eyePositions.add(eyePosition);\r
37         }\r
38         \r
39         public Deviation scanForDeviation(Rectangle2D faceRect) {\r
40                 Deviation deviation = Deviation.NONE;\r
41                 if (eyePositions.size() >= 3) {\r
42                         double deviationX = 0;\r
43                         double deviationY = 0;\r
44                         \r
45                         EyePosition lastEyePosition = null;\r
46                         for (int i = 0; i < 3; ++i) {\r
47                                 EyePosition eyePosition = this.eyePositions.get(i);\r
48                                 if (lastEyePosition != null) {\r
49                                         deviationX += (eyePosition.getX() - lastEyePosition.getX());\r
50                                         deviationY += (eyePosition.getY() - lastEyePosition.getY());\r
51                                 }\r
52                                 lastEyePosition = eyePosition; \r
53                         }\r
54                         \r
55                         final double deviationPercentX = 0.04;\r
56                         final double deviationPercentY = 0.04;\r
57                         \r
58                         deviationX /= faceRect.getWidth();\r
59                         deviationY /= faceRect.getWidth();\r
60                         \r
61                         int deviationAbsoluteX = 0;\r
62                         int deviationAbsoluteY = 0;\r
63                         if (deviationX > deviationPercentX) deviationAbsoluteX = 1;\r
64                         if (deviationX < -deviationPercentX) deviationAbsoluteX = -1;\r
65                         if (deviationY > deviationPercentY) deviationAbsoluteY = 1;\r
66                         if (deviationY < -deviationPercentY) deviationAbsoluteY = -1;\r
67                         \r
68                         deviation = Deviation.getDirectionFor(deviationAbsoluteX, deviationAbsoluteY);\r
69                         if (deviation != Deviation.NONE) this.eyePositions.clear();\r
70                         //System.out.println(String.format("%.2f%% | %.2f%% => %d and %d >>> %s", deviationX*100, deviationY*100, deviationAbsoluteX, deviationAbsoluteY, deviation.toString()));\r
71                         \r
72                 }\r
73                 \r
74                 return deviation;\r
75         }\r
76         \r
77         public void clear() {\r
78                 System.out.println("CLEAR");\r
79                 this.eyePositions.clear();\r
80         }\r
81 }\r