package ac.essex.ooechs.facedetection.util.evaluation;

import ac.essex.gp.multiclass.PCM;
import ac.essex.gp.multiclass.BetterDRS;
import ac.essex.gp.multiclass.BasicDRS;
import ac.essex.ooechs.adaboost.AdaBoostSolution;
import ac.essex.ooechs.adaboost.AdaBoostSample;
import ac.essex.ooechs.imaging.commons.PixelLoader;
import ac.essex.ooechs.imaging.commons.HaarRegions;
import ac.essex.ooechs.imaging.commons.fast.HaarlikeFeatures;
import ac.essex.ooechs.facedetection.singlestage.nodes.FeatureUtils;

import java.io.File;

/**
 * Detects non-smiling mouths in a window.
 *
 * @author Olly Oechsle, University of Essex, Date: 07-Jul-2008
 * @version 1.0
 */
public class SmileDetector extends ObjectDetector {

    PCM pcm0 = new BasicDRS(-25,25,new int[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1});;

    public static void main(String[] args) throws Exception {
        //MouthDetector d = new MouthDetector();
        ObjectDetector d = new SmileDetector();
        d.test(new File("/home/ooechs/Data/me/mouth/windows/smile"));
        d.test(new File("/home/ooechs/Data/me/mouth/windows/mouth"));
    }

    public double calculate(int x, int y, int windowWidth, int windowHeight, PixelLoader img) {

        //HaarlikeFeatures image = img.getIntegralImage().getHaarlikeFeatures();
        HaarlikeFeatures varianceimage = img.getIntegralImage().getHaarlikeFeaturesVariance();

        return pcm0.getClassFromOutput(varianceimage.getTwoRectangleFeature(x + FeatureUtils.getX(0.4005248744881468, windowWidth), y + FeatureUtils.getY(0.1142140080536791, windowHeight), FeatureUtils.getWidth(0.2493110209448366, windowWidth), FeatureUtils.getHeight(0.5136671978722122, windowHeight), HaarRegions.HORIZONTALLY_ADJACENT));

    }

}
