OpenCV - Detección de rostro en una imagen
los VideoCapture clase de la org.opencv.videoioEl paquete contiene clases y métodos para capturar video usando la cámara del sistema. Vayamos paso a paso y aprendamos a hacerlo.
Paso 1: Cargue la biblioteca nativa de OpenCV
Mientras escribe código Java usando la biblioteca OpenCV, el primer paso que debe hacer es cargar la biblioteca nativa de OpenCV usando el loadLibrary(). Cargue la biblioteca nativa de OpenCV como se muestra a continuación.
// Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Paso 2: crear una instancia de la clase CascadeClassifier
los CascadeClassifier clase del paquete org.opencv.objdetectse utiliza para cargar el archivo clasificador. Cree una instancia de esta clase pasando elxml archivo lbpcascade_frontalface.xml Como se muestra abajo.
// Instantiating the CascadeClassifier
String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
Paso 3: detecta las caras
Puede detectar las caras en la imagen usando el método detectMultiScale() de la clase nombrada CascadeClassifier. Este método acepta un objeto de la clase.Mat sosteniendo la imagen de entrada y un objeto de la clase MatOfRect para almacenar los rostros detectados.
// Detecting the face in the snap
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
Ejemplo
El siguiente programa demuestra cómo detectar caras en una imagen.
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");
}
}
Suponga que la siguiente es la imagen de entrada facedetection_input.jpg especificado en el programa anterior.
Salida
Al ejecutar el programa, obtendrá el siguiente resultado:
Detected 3 faces
Image Processed
Si abre la ruta especificada, puede observar la imagen de salida de la siguiente manera: