package ac.essex.ooechs.facedetection.learners.gp;

import ac.essex.gp.training.haar.HaarTrainingSet;
import ac.essex.ooechs.imaging.commons.util.ImageFilenameFilter;
import ac.essex.ooechs.imaging.commons.HaarRegions;
import ac.essex.ooechs.imaging.commons.PixelLoader;
import ac.essex.ooechs.adaboost.AdaBoostM1Sample;
import ac.essex.ooechs.adaboost.AdaBoostM1;
import ac.essex.ooechs.adaboost.AdaBoostM1Learner;
import ac.essex.ooechs.adaboost.AdaBoost;
import ac.essex.ooechs.adaboost.AdaBoostSample;
import ac.essex.ooechs.adaboost.AdaBoostLearner;

import java.io.File;
import java.util.Vector;

/**
 * Attempts to solve the face detector problem using Adaboost. The weak learners used are simply
 * one of the haar basis functions.
 *
 * @author Olly Oechsle, University of Essex, Date: 17-May-2007
 * @version 1.0
 */
public class AdaboostGP extends AdaBoost {

    public AdaBoostSample[] getSamples() {

       Vector<AdaBoostSample> samples = new Vector<AdaBoostSample>();

       final File trueDirectory2 = new File("/home/ooechs/ecj-training/faces/essex/mit/test/scaled32x40/");

       return null;

    }

    private int addImageFiles(File directory, Vector<HaarTrainingSet> trainingData, int classID) {

        if (!directory.exists()) throw new RuntimeException("Directory does not exist: " + directory.getAbsolutePath());
        int counter = 0;
        try {
            File[] trueFiles = directory.listFiles();

            for (int i = 0; i < trueFiles.length; i++) {
                File f = trueFiles[i];
                if (ImageFilenameFilter.isImage(f)) {
                    trainingData.add(new HaarTrainingSet(new HaarRegions(new PixelLoader(f)), classID));
                    counter++;
                }
            }
            System.out.println("\nLoaded: " + counter + " images.");

        } catch (Exception e) {
            e.printStackTrace();
        }
        return counter;
    }

    protected AdaBoostLearner weakLearn(AdaBoostSample[] adaBoostM1Samples, double[] doubles) {
        return null;  //To change body of implemented methods use File | Settings | File Templates.
    }

}
