Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

OpenCV Face detection works on PC but not on Laptop

I was trying out the face detection mechanism of OpenCV 3.0 using Java 8u40, i. e. the very simple HelloOpenCV example. Exactly the same code and libraries on PC and Laptop.

Problem

The face gets detected on my PC, but not on my laptop. Both are Win7 x64.

Question

Does anyone how it could be possible that the face gets detected with exactly the same code on the one system and not on the other?

Is there some way to activate OpenCV logging in the Java version? There aren't any exceptions.

Code

Code is the HelloOpenCV code from here:

http://docs.opencv.org/master/d9/d52/tutorial_java_dev_intro.html#gsc.tab=0

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.objdetect.CascadeClassifier;
//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
class DetectFaceDemo {
  public void run() {
    System.out.println("\nRunning DetectFaceDemo");
    // Create a face detector from the cascade file in the resources
    // directory.
    CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("/lbpcascade_frontalface.xml").getPath());
    Mat image = Imgcodecs.imread(getClass().getResource("/lena.png").getPath());
    // Detect faces in the image.
    // MatOfRect is a special container class for Rect.
    MatOfRect faceDetections = new MatOfRect();
    faceDetector.detectMultiScale(image, faceDetections);
    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
    // Draw a bounding box around each face.
    for (Rect rect : faceDetections.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));
    }
    // Save the visualized detection.
    String filename = "faceDetection.png";
    System.out.println(String.format("Writing %s", filename));
    Imgcodecs.imwrite(filename, image);
  }
}
public class HelloOpenCV {
  public static void main(String[] args) {
    System.out.println("Hello, OpenCV");
    // Load the native library.
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    new DetectFaceDemo().run();
  }
}

Thank you very much for the help!

OpenCV Face detection works on PC but not on Laptop

I was trying out the face detection mechanism of OpenCV 3.0 using Java 8u40, i. e. the very simple HelloOpenCV example. Exactly the same code and libraries on PC and Laptop.

Problem

The face gets detected on my PC, but not on my laptop. Both are Win7 x64.x64. I tried executing the code in a development environment and I created a JAR and executed it on both system. Same problem. The face detection doesn't work on the laptop. However, I found out that the haar cascades work on the laptop.

Question

Does anyone how it could be possible that the face gets detected with exactly the same code on the one system and not on the other?

Is there some way to activate OpenCV logging in the Java version? There aren't any exceptions.

Code

Code is the HelloOpenCV code from here:

http://docs.opencv.org/master/d9/d52/tutorial_java_dev_intro.html#gsc.tab=0

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.objdetect.CascadeClassifier;
//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
class DetectFaceDemo {
  public void run() {
    System.out.println("\nRunning DetectFaceDemo");
    // Create a face detector from the cascade file in the resources
    // directory.
    CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("/lbpcascade_frontalface.xml").getPath());
    Mat image = Imgcodecs.imread(getClass().getResource("/lena.png").getPath());
    // Detect faces in the image.
    // MatOfRect is a special container class for Rect.
    MatOfRect faceDetections = new MatOfRect();
    faceDetector.detectMultiScale(image, faceDetections);
    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
    // Draw a bounding box around each face.
    for (Rect rect : faceDetections.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));
    }
    // Save the visualized detection.
    String filename = "faceDetection.png";
    System.out.println(String.format("Writing %s", filename));
    Imgcodecs.imwrite(filename, image);
  }
}
public class HelloOpenCV {
  public static void main(String[] args) {
    System.out.println("Hello, OpenCV");
    // Load the native library.
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    new DetectFaceDemo().run();
  }
}

Thank you very much for the help!