OpenCV - Détection de visage dans une image

le VideoCapture classe de la org.opencv.videoioLe package contient des classes et des méthodes pour capturer de la vidéo à l'aide de la caméra système. Allons-y étape par étape et apprenons à le faire.

Étape 1: Chargez la bibliothèque native OpenCV

Lors de l'écriture de code Java à l'aide de la bibliothèque OpenCV, la première étape à faire est de charger la bibliothèque native d'OpenCV à l'aide du loadLibrary(). Chargez la bibliothèque native OpenCV comme indiqué ci-dessous.

// Loading the core library 
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Étape 2: instancier la classe CascadeClassifier

le CascadeClassifier classe du package org.opencv.objdetectest utilisé pour charger le fichier classificateur. Instanciez cette classe en passant lexml fichier lbpcascade_frontalface.xml comme indiqué ci-dessous.

// Instantiating the CascadeClassifier 
String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml"; 
CascadeClassifier classifier = new CascadeClassifier(xmlFile);

Étape 3: Détectez les visages

Vous pouvez détecter les visages sur l'image en utilisant la méthode detectMultiScale() de la classe nommée CascadeClassifier. Cette méthode accepte un objet de la classeMat contenant l'image d'entrée et un objet de la classe MatOfRect pour stocker les visages détectés.

// Detecting the face in the snap 
MatOfRect faceDetections = new MatOfRect(); 
classifier.detectMultiScale(src, faceDetections);

Exemple

Le programme suivant montre comment détecter les visages dans une image.

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");
   }
}

Supposons que ce qui suit est l'image d'entrée facedetection_input.jpg spécifié dans le programme ci-dessus.

Production

Lors de l'exécution du programme, vous obtiendrez la sortie suivante -

Detected 3 faces 
Image Processed

Si vous ouvrez le chemin spécifié, vous pouvez observer l'image de sortie comme suit -