add PCLOC annotations. all three benchmarks are type-checked now.
[IRC.git] / Robust / src / Benchmarks / SSJava / EyeTracking / LEAImplementation.java
index 50e6d0160811ab61dc85a02cad4aec53ff64ea2e..cf564ff1b0bf8e51f291ce4fc6b583d63910d224 100644 (file)
  * 
  * @author Florian Frankenberger
  */
+@LATTICE("R<CT,R*")
+@METHODDEFAULT("OUT<THIS,THIS<IN,THISLOC=THIS,RETURNLOC=OUT")
 public class LEAImplementation {
 
+  @LOC("CT")
   private ClassifierTree classifierTree;
 
+  @LOC("R")
   private Rectangle2D lastRectangle;
 
   public LEAImplementation() {
     this.loadFaceData();
   }
 
-  public FaceAndEyePosition getEyePosition(Image image) {
+  @LATTICE("OUT<V,V<THIS,THIS<IN,V*,THISLOC=THIS,RETURNLOC=OUT")
+  @PCLOC("THIS")
+  public FaceAndEyePosition getEyePosition(@LOC("IN") Image image) {
     if (image == null)
       return null;
-
-    Rectangle2D faceRect = classifierTree.locateFaceRadial(image, lastRectangle);
-    System.out.println("FACE RECT=" + faceRect);
-    EyePosition eyePosition = null;
+    @LOC("THIS,LEAImplementation.R") Rectangle2D faceRect =
+        classifierTree.locateFaceRadial(image, lastRectangle);
+    if (faceRect.getWidth() > image.getWidth() || faceRect.getHeight() > image.getHeight()) {
+      return null;
+    }
+    @LOC("V") EyePosition eyePosition = null;
     if (faceRect != null) {
-
       lastRectangle = faceRect;
-      Point point = readEyes(image, faceRect);
+      faceRect = null;
+      @LOC("V") Point point = readEyes(image, lastRectangle);
       if (point != null) {
-        eyePosition = new EyePosition(point, faceRect);
+        eyePosition = new EyePosition(point, lastRectangle);
       }
+    } else {
+      lastRectangle = null;
     }
-    System.out.println("eyePosition="+eyePosition);
-    
-    return new FaceAndEyePosition(faceRect, eyePosition);
+    System.out.println("eyePosition=" + eyePosition);
+
+    return new FaceAndEyePosition(lastRectangle, eyePosition);
   }
 
-  private Point readEyes(Image image, Rectangle2D rect) {
-    EyeDetector ed = new EyeDetector(image, rect);
+  @LATTICE("OUT<P,P<IN,OUT<THIS,THISLOC=THIS,RETURNLOC=OUT")
+  @PCLOC("P")
+  private Point readEyes(@LOC("IN") Image image, @LOC("IN") Rectangle2D rect) {
+    @LOC("OUT") EyeDetector ed = new EyeDetector(image, rect);
     return ed.detectEye();
   }
 
@@ -69,10 +81,8 @@ public class LEAImplementation {
 
     FileInputStream inputFile = new FileInputStream("facedata.dat");
 
-    classifierTree = new ClassifierTree();
-
     int numClassifier = Integer.parseInt(inputFile.readLine());
-    System.out.println("numClassifier=" + numClassifier);
+    classifierTree = new ClassifierTree(numClassifier);
     for (int c = 0; c < numClassifier; c++) {
 
       int numArea = Integer.parseInt(inputFile.readLine());
@@ -108,21 +118,8 @@ public class LEAImplementation {
       classifier.setPossibilityFaceYes(Integer.parseInt(inputFile.readLine()));
       classifier.setPossibilityFaceNo(Integer.parseInt(inputFile.readLine()));
 
-      classifierTree.addClassifier(classifier);
+      classifierTree.addClassifier(c, classifier);
     }
   }
-  // private Point readEyes(BufferedImage image, Rectangle2D rect) {
-  //
-  // // now we cluster the black image points and try to find the inner eye
-  // /*
-  // * BlackHoleDetector bhd = new BlackHoleDetector(image, rect);
-  // * bhd.detect(20);
-  // *
-  // * return bhd.getPosition();
-  // */
-  //
-  // EyeDetector ed = new EyeDetector(image, rect);
-  // return ed.detectEye();
-  // }
 
 }