Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để phát hiện khuôn mặt trong ảnh bằng thư viện Java OpenCV?


Lớp CascadeClassifier của được sử dụng để tải tệp trình phân loại và phát hiện các đối tượng mong muốn trong hình ảnh.

DetMultiScale () của lớp này phát hiện nhiều đối tượng có kích thước khác nhau. Phương thức này chấp nhận -

  • Một đối tượng của lớp Mat giữ hình ảnh đầu vào.

  • Một đối tượng của lớp MatOfRect để lưu trữ các khuôn mặt được phát hiện.

Để lấy số lượng khuôn mặt trong hình ảnh -

  • Tải tệp lbpcascade_frontalface.xml bằng lớp CascadeClassifier.

  • Gọi phương thức DetMultiScale ().

  • Chuyển đổi đối tượng MatOfRect thành một mảng.

  • Chiều dài của mảng là số lượng khuôn mặt trong hình ảnh.

Ví dụ

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 FaceDetection {
   public static void main (String[] args) {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the Image from the file
      String file ="D:\\Images\\faces.jpg";
      Mat src = Imgcodecs.imread(file);
      //Instantiating the CascadeClassifier
      String xmlFile = "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,
            new Point(rect.x, rect.y),
            new Point(rect.x + rect.width, rect.y + rect.height),
            new Scalar(0, 0, 255),
            3
         );
      }
      //Writing the image
      Imgcodecs.imwrite("D:\\Images\\face_Detection.jpg", src);
      System.out.println("Image Processed");
   }
}

Đầu vào

Làm cách nào để phát hiện khuôn mặt trong ảnh bằng thư viện Java OpenCV?

Đầu ra

No of faces detected: 3