OpenCV - Resimde Yüz Algılama

VideoCapture sınıfı org.opencv.videoiopaketi, sistem kamerasını kullanarak video çekmek için sınıflar ve yöntemler içerir. Adım adım gidelim ve nasıl yapılacağını öğrenelim.

1. Adım: OpenCV yerel kitaplığını yükleyin

OpenCV kitaplığını kullanarak Java kodu yazarken yapmanız gereken ilk adım, OpenCV'nin yerel kitaplığını, loadLibrary(). OpenCV yerel kitaplığını aşağıda gösterildiği gibi yükleyin.

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

Adım 2: CascadeClassifier sınıfını somutlaştırın

CascadeClassifier paketin sınıfı org.opencv.objdetectsınıflandırıcı dosyasını yüklemek için kullanılır. Bu sınıfı,xml dosya lbpcascade_frontalface.xml Aşağıda gösterildiği gibi.

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

3. Adım: Yüzleri tespit edin

Yöntemi kullanarak görüntüdeki yüzleri tespit edebilirsiniz detectMultiScale() sınıfın adı CascadeClassifier. Bu yöntem, sınıfın bir nesnesini kabul ederMat girdi görüntüsünü ve sınıfın bir nesnesini tutmak MatOfRect tespit edilen yüzleri saklamak için.

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

Misal

Aşağıdaki program, bir görüntüdeki yüzlerin nasıl tespit edileceğini göstermektedir.

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

Aşağıdakinin giriş görüntüsü olduğunu varsayalım facedetection_input.jpg yukarıdaki programda belirtilmiştir.

Çıktı

Programı çalıştırırken aşağıdaki çıktıyı alacaksınız -

Detected 3 faces 
Image Processed

Belirtilen yolu açarsanız, çıktı görüntüsünü aşağıdaki gibi gözlemleyebilirsiniz -