2 * Copyright 2009 (c) Florian Frankenberger (darkblue.de)
\r
4 * This file is part of LEA.
\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
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
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
21 import java.awt.geom.Rectangle2D;
\r
24 * No description given.
\r
26 * @author Florian Frankenberger
\r
28 public class DeviationScanner {
\r
30 private StaticSizeArrayList<EyePosition> eyePositions = new StaticSizeArrayList<EyePosition>(3);
\r
32 public DeviationScanner() {
\r
35 public void addEyePosition(EyePosition eyePosition) {
\r
36 eyePositions.add(eyePosition);
\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
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
52 lastEyePosition = eyePosition;
\r
55 final double deviationPercentX = 0.04;
\r
56 final double deviationPercentY = 0.04;
\r
58 deviationX /= faceRect.getWidth();
\r
59 deviationY /= faceRect.getWidth();
\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
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
77 public void clear() {
\r
78 System.out.println("CLEAR");
\r
79 this.eyePositions.clear();
\r