OpenCV - Gesichtserkennung in einem Bild
Das VideoCapture Klasse der org.opencv.videoioDas Paket enthält Klassen und Methoden zum Aufnehmen von Videos mit der Systemkamera. Lassen Sie uns Schritt für Schritt gehen und lernen, wie es geht.
Schritt 1: Laden Sie die native OpenCV-Bibliothek
Während Sie Java-Code mit der OpenCV-Bibliothek schreiben, müssen Sie zunächst die native OpenCV-Bibliothek mit der laden loadLibrary(). Laden Sie die native OpenCV-Bibliothek wie unten gezeigt.
// Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Schritt 2: Instanziieren Sie die CascadeClassifier-Klasse
Das CascadeClassifier Klasse des Pakets org.opencv.objdetectwird zum Laden der Klassifikatordatei verwendet. Instanziieren Sie diese Klasse, indem Sie diexml Datei lbpcascade_frontalface.xml Wie nachfolgend dargestellt.
// Instantiating the CascadeClassifier
String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
Schritt 3: Erkennen Sie die Gesichter
Sie können die Gesichter im Bild mithilfe der Methode erkennen detectMultiScale() der genannten Klasse CascadeClassifier. Diese Methode akzeptiert ein Objekt der KlasseMat Halten des Eingabebildes und eines Objekts der Klasse MatOfRect um die erkannten Gesichter zu speichern.
// Detecting the face in the snap
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
Beispiel
Das folgende Programm zeigt, wie Gesichter in einem Bild erkannt werden.
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;
public class FaceDetectionImage {
public static void main (String[] args) {
// Loading the OpenCV core library
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// Reading the Image from the file and storing it in to a Matrix object
String file ="E:/OpenCV/chap23/facedetection_input.jpg";
Mat src = Imgcodecs.imread(file);
// Instantiating the CascadeClassifier
String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
// Detecting the face in the snap
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
System.out.println(String.format("Detected %s faces",
faceDetections.toArray().length));
// Drawing boxes for (Rect rect : faceDetections.toArray()) { Imgproc.rectangle( src, // where to draw the box new Point(rect.x, rect.y), // bottom left new Point(rect.x + rect.width, rect.y + rect.height), // top right new Scalar(0, 0, 255), 3 // RGB colour );
}
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap23/facedetect_output1.jpg", src);
System.out.println("Image Processed");
}
}
Angenommen, das Folgende ist das Eingabebild facedetection_input.jpg im obigen Programm angegeben.
Ausgabe
Beim Ausführen des Programms erhalten Sie folgende Ausgabe:
Detected 3 faces
Image Processed
Wenn Sie den angegebenen Pfad öffnen, können Sie das Ausgabebild wie folgt beobachten: