Ask Your Question
0

Java OpenCV Face detection code not working. Nullpointer exception [closed]

asked 2014-08-22 11:43:22 -0600

silvercats gravatar image

updated 2014-08-22 12:58:00 -0600

berak gravatar image

package javapplication15;

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.highgui.Highgui;
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 = Highgui.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()) {
        Core.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));
    Highgui.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();
  }
}

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

I tried this tutorial mentioned above and got the following error.

Exception in thread "main" java.lang.NullPointerException
at javapplication15.DetectFaceDemo.run(HelloOpenCV.java:28)
at javapplication15.HelloOpenCV.main(HelloOpenCV.java:56)
Java Result: 1

I am pretty sure that the files are present in corresponding folders as mentioned in the Tutorial. I think this is a path issue and I tried things like giving the absolute path and other things that can be found online. Still not luck.

I am suing NetBeans 8.0, OpenCV 2.4.9 and Windows 8

edit retag flag offensive reopen merge delete

Closed for the following reason the question is answered, right answer was accepted by berak
close date 2014-09-08 05:10:54.785579

Comments

hey, no need to sue netbeans or microsoft for this ;)

the most probable reason is , that one, or both of the resources did not load, so please add 2 checks:

 if ( faceDetector.empty() ) { /*  damn, it did not find the cascade.xml  */ }

 if ( img.empty() )   {  /*  image was not, where you expected it  */ }

if so, try to use the complete path instead of the getClass().getResource() ... thingie

berak gravatar imageberak ( 2014-08-22 12:03:04 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2014-09-06 00:32:47 -0600

silvercats gravatar image

it run out that the method "getPath" gives an additional "\" at the beginning. Adding ".substring(1)" tot he "getPath" method fixed this by removing the first unwanted "\". check the line below. Make sure to put .substring to every getPath() method.

 String url1 = getClass().getResource("lena.png").getPath().substring(1);
edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2014-08-22 11:43:22 -0600

Seen: 2,171 times

Last updated: Sep 06 '14