package packt;

import static java.lang.System.out;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

// Adapted from http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

public class DetectFaceDemo {
    
  public void run() {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    String base = "C:/Books in Progress/Java for Data Science/Chapter 10/OpenCVExamples/src/resources";
    CascadeClassifier faceDetector = 
            new CascadeClassifier(base + "/lbpcascade_frontalface.xml");
    
    Mat image = Imgcodecs.imread(base + "/images.jpg");

    MatOfRect faceVectors = new MatOfRect();
    faceDetector.detectMultiScale(image, faceVectors);

    out.println(faceVectors.toArray().length + " faces found");

    for (Rect rect : faceVectors.toArray()) {
        Imgproc.rectangle(image, new Point(rect.x, rect.y), 
                new Point(rect.x + rect.width, rect.y + rect.height), 
                new Scalar(0, 255, 0));
    }
    Imgcodecs.imwrite("faceDetection.png", image);
  }
}