changes + add two more benchmarks without annotations
[IRC.git] / Robust / src / Benchmarks / SSJava / EyeTrackingInfer / DeviationScanner.java
diff --git a/Robust/src/Benchmarks/SSJava/EyeTrackingInfer/DeviationScanner.java b/Robust/src/Benchmarks/SSJava/EyeTrackingInfer/DeviationScanner.java
new file mode 100644 (file)
index 0000000..4cc353e
--- /dev/null
@@ -0,0 +1,171 @@
+/*\r
+ * Copyright 2009 (c) Florian Frankenberger (darkblue.de)\r
+ * \r
+ * This file is part of LEA.\r
+ * \r
+ * LEA is free software: you can redistribute it and/or modify it under the\r
+ * terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation, either version 3 of the License, or (at your option) any\r
+ * later version.\r
+ * \r
+ * LEA is distributed in the hope that it will be useful, but WITHOUT ANY\r
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+ * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ * \r
+ * You should have received a copy of the GNU Lesser General Public License\r
+ * along with LEA. If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+/**\r
+ * No description given.\r
+ * \r
+ * @author Florian Frankenberger\r
+ */\r
+\r
+\r
+public class DeviationScanner {\r
+\r
+  \r
+  private EyePosition eyePositions[];\r
+\r
+  // LEFT_UP(+1, -1), UP(0, -1), RIGHT_UP(-1, -1), LEFT(+1, 0), NONE(0, 0),\r
+  // RIGHT(-1, 0), LEFT_DOWN(\r
+  // +1, +1), DOWN(0, +1), RIGHT_DOWN(-1, +1);\r
+\r
+  public static final int LEFT_UP = 0;\r
+  public static final int UP = 1;\r
+  public static final int RIGHT_UP = 2;\r
+  public static final int LEFT = 3;\r
+  public static final int NONE = 4;\r
+  public static final int RIGHT = 5;\r
+  public static final int LEFT_DOWN = 6;\r
+  public static final int DOWN = 7;\r
+  public static final int RIGHT_DOWN = 8;\r
+\r
+  public DeviationScanner() {\r
+    eyePositions = new EyePosition[3];\r
+  }\r
+\r
+  \r
+  public void addEyePosition( EyePosition eyePosition) {\r
+\r
+    // for ( int i = 1; i < 3; i++) {\r
+    // eyePositions[i - 1] = eyePositions[i];\r
+    // eyePositions[i] = null;\r
+    // }\r
+    // eyePositions[eyePositions.length - 1] = eyePosition;\r
+\r
+    SSJAVA.append(eyePositions, eyePosition);\r
+\r
+  }\r
+\r
+  // \r
+  \r
+  \r
+  public int scanForDeviation( Rectangle2D faceRect) {\r
+\r
+     int deviation = NONE;\r
+\r
+    for ( int i = 0; i < 3; i++) {\r
+      if (eyePositions[i] == null) {\r
+        return deviation;\r
+      }\r
+    }\r
+\r
+     double deviationX = 0;\r
+     double deviationY = 0;\r
+\r
+     int lastIdx = -1;\r
+    for ( int i = 0; i < 3; ++i) {\r
+      if (lastIdx != -1) {\r
+        deviationX += (eyePositions[i].getX() - eyePositions[lastIdx].getX());\r
+        deviationY += (eyePositions[i].getY() - eyePositions[lastIdx].getY());\r
+      }\r
+      lastIdx = i;\r
+    }\r
+\r
+     final double deviationPercentX = 0.04;\r
+     final double deviationPercentY = 0.04;\r
+\r
+    deviationX /= faceRect.getWidth();\r
+    deviationY /= faceRect.getWidth();\r
+\r
+     int deviationAbsoluteX = 0;\r
+     int deviationAbsoluteY = 0;\r
+    if (deviationX > deviationPercentX)\r
+      deviationAbsoluteX = 1;\r
+    if (deviationX < -deviationPercentX)\r
+      deviationAbsoluteX = -1;\r
+    if (deviationY > deviationPercentY)\r
+      deviationAbsoluteY = 1;\r
+    if (deviationY < -deviationPercentY)\r
+      deviationAbsoluteY = -1;\r
+\r
+    deviation = getDirectionFor(deviationAbsoluteX, deviationAbsoluteY);\r
+\r
+    if (deviation != NONE) {\r
+      eyePositions = new EyePosition[3];\r
+    }\r
+    // System.out.println(String.format("%.2f%% | %.2f%% => %d and %d >>> %s",\r
+    // deviationX*100, deviationY*100, deviationAbsoluteX, deviationAbsoluteY,\r
+    // deviation.toString()));\r
+\r
+    return deviation;\r
+  }\r
+\r
+  \r
+  public int getDirectionFor( int directionX,  int directionY) {\r
+\r
+    if (directionX == +1 && directionY == -1) {\r
+      return LEFT_UP;\r
+    } else if (directionX == 0 && directionY == -1) {\r
+      return UP;\r
+    } else if (directionX == -1 && directionY == -1) {\r
+      return RIGHT_UP;\r
+    } else if (directionX == +1 && directionY == 0) {\r
+      return LEFT;\r
+    } else if (directionX == 0 && directionY == 0) {\r
+      return NONE;\r
+    } else if (directionX == -1 && directionY == 0) {\r
+      return RIGHT;\r
+    } else if (directionX == +1 && directionY == +1) {\r
+      return LEFT_DOWN;\r
+    } else if (directionX == 0 && directionY == +1) {\r
+      return DOWN;\r
+    } else if (directionX == -1 && directionY == +1) {\r
+      return RIGHT_DOWN;\r
+    }\r
+\r
+    return -1;\r
+  }\r
+\r
+  public void clear() {\r
+    System.out.println("CLEAR");\r
+    eyePositions = new EyePosition[3];\r
+  }\r
+\r
+  public String toStringDeviation( int dev) {\r
+    if (dev == LEFT_UP) {\r
+      return "LEFT_UP";\r
+    } else if (dev == UP) {\r
+      return "UP";\r
+    } else if (dev == RIGHT_UP) {\r
+      return "RIGHT_UP";\r
+    } else if (dev == LEFT) {\r
+      return "LEFT";\r
+    } else if (dev == NONE) {\r
+      return "NONE";\r
+    } else if (dev == RIGHT) {\r
+      return "RIGHT";\r
+    } else if (dev == LEFT_DOWN) {\r
+      return "LEFT_DOWN";\r
+    } else if (dev == DOWN) {\r
+      return "DOWN";\r
+    } else if (dev == RIGHT_DOWN) {\r
+      return "RIGHT_DOWN";\r
+    }\r
+    return "ERROR";\r
+  }\r
+\r
+}\r